Aller au contenu
For the complete DHIS2 documentation index, see llms.txt.

Maintenance

Tableaux de ressources et d'analyse

DHIS2 comporte un ensemble de tableaux de base de données générés qui sont utilisés comme base pour diverses fonctionnalités du système. Ces tableaux peuvent être exécutés immédiatement ou programmés à intervalles réguliers via l'interface utilisateur. Ils peuvent également être générés via l'API Web, comme expliqué dans cette section. Cette tâche incombe généralement à un administrateur système et non aux clients consommateurs.

Les tables de ressources sont utilisées en interne par l'application DHIS2 pour diverses fonctions d'analyse. Ces tables sont également utiles aux utilisateurs qui rédigent des rapports SQL avancés. Elles peuvent être générées par une requête POST ou PUT à l'URL suivante :

/api/33/resourceTables

Les tableaux analytiques sont optimisés pour l'agrégation des données et sont actuellement utilisés dans DHIS2 pour le module de tableau croisé dynamique. Les tableaux d'analyse peuvent être générés à l'aide d'une requête POST ou PUT à :

/api/33/resourceTables/analytics

Tableau : Paramètres de requête facultatifs des tableaux d'analyse

Paramètre de requête Options Description
Ignorer les tableaux de ressources faux | vrai Ignorer la génération des tableaux de ressources
Ignorer l'agrégat faux | vrai Ignorer la génération de données agrégées et de données exhaustives
Ignorer les événements faux | vrai Ignorer la génération de données d'événement
Ignorer les événements faux | vrai Ignorer la génération des données d'inscription
Ignorer la propriété de l'unité d'Organisation faux | vrai Ignorer la génération des données de propriété de l'unité d'organisation
années précédentes entier Nombre de dernières années de données à inclure

Note

lastYears=0 means latest or continuous analytics, as defined in Continuous analytics table.

Les tâches « Qualité des données “ et ” Surveillance des données » peuvent être exécutées via la tâche de surveillance, déclenchée avec le endpoint

/api/33/resourceTables/monitoring

Cette tâche analyse vos règles de validation, détecte les violations et les conserve en tant que résultats de validation.

Ces demandes sont renvoyées immédiatement et déclenchent un processus côté serveur.

Maintenance

Pour effectuer la maintenance, vous pouvez interagir avec la ressource maintenance. Vous devez utiliser POST ou PUT comme méthode pour les requêtes. Les méthodes suivantes sont disponibles.

La suppression des tables d'analyse entraîne la disparition de toutes les tables d'analyse.

POST PUT /api/maintenance/analyticsTablesClear

L'analyse des tables d'analyse permet de collecter des statistiques sur le contenu des tables d'analyse de la base de données.

POST PUT /api/maintenance/analyticsTablesAnalyze

La suppression des invitations expirées permet de supprimer toutes les invitations de comptes d'utilisateurs qui ont expiré.

POST PUT /api/maintenance/expiredInvitationsClear

L'élagage des périodes permet de supprimer les périodes qui ne sont liées à aucune valeur de données.

POST PUT /api/maintenance/periodPruning

La suppression des valeurs de données nulles permet de supprimer les valeurs de données nulles liées à des éléments de données où les données nulles sont définies comme non significatives :

POST PUT /api/maintenance/zeroDataValueRemoval

La suppression des valeurs de données supprimées de façon réversible supprime définitivement les valeurs de données supprimées de façon réversible.

POST PUT /api/maintenance/softDeletedDataValueRemoval

La suppression de l'instance de l'étape du programme supprimé de façon réversible supprime de façon permanente les événements supprimés de façon réversible.

POST PUT /api/maintenance/softDeletedProgramStageInstanceRemoval

La suppression de l'instance de programme supprimée de façon réversible supprime définitivement les inscriptions supprimées de façon réversible.

POST PUT /api/maintenance/softDeletedProgramInstanceRemoval

La suppression des instances d'entités suivies supprimées de façon réversible supprime définitivement les instances d'entités suivies supprimées de façon réversible.

POST PUT /api/maintenance/softDeletedTrackedEntityInstanceRemoval

Supprimer les vues SQL supprime toutes les vues SQL de la base de données. Notez qu'il ne supprime pas les entités de la vue SQL de DHIS2.

POST PUT /api/maintenance/sqlViewsDrop

Créer des vues SQL va recréer toutes les vues SQL dans la base de données.

POST PUT /api/maintenance/sqlViewsCreate

La mise à jour des combinaisons d'options de catégories supprimera les combinaisons d'options de catégories obsolètes et générera les combinaisons d'options de catégories manquantes pour toutes les combinaisons de catégories.

POST PUT /api/maintenance/categoryOptionComboUpdate

Il est également possible de mettre à jour les combinaisons d'options de catégorie pour une seule combinaison de catégorie en utilisant le point d'extrémité suivant.

POST PUT /api/maintenance/categoryOptionComboUpdate/categoryCombo/<category-combo-uid>

Le nettoyage du cache efface le cache d'hibernation de l'application et les caches de la partition analytique.

POST PUT /api/maintenance/cacheClear

La mise à jour des chemins des unités d'organisation va regénérer la propriété du chemin de l'unité d'organisation. Cela peut être utile, par exemple, si vous avez importé des unités d'organisation avec SQL.

POST PUT /api/maintenance/ouPathsUpdate

L'élagage des données permet de supprimer des enregistrements complets d'ensembles de données, des approbations de données, des audits de valeurs de données et des valeurs de données, dans ce cas pour une unité d'organisation.

POST PUT /api/maintenance/dataPruning/organisationUnits/<org-unit-id>

L'élagage des données pour les éléments de données, qui supprime les audits de valeurs de données et les valeurs de données.

POST PUT /api/maintenance/dataPruning/dataElements/<data-element-uid>

La validation des métadonnées appliquera toutes les règles de validation des métadonnées et renverra le résultat de l'opération.

POST PUT /api/metadataValidation

Le rechargement d'applications actualise le cache des applications installées géré par DHIS2 en lisant le système de fichiers.

POST PUT /api/appReload

Les opérations de maintenance sont prises en charge par lots au moyen d'une requête POST à la ressource api/maintenance, où les opérations sont fournies en tant que paramètres de requête :

POST PUT /api/maintenance?analyticsTablesClear=true&expiredInvitationsClear=true
  &periodPruning=true&zeroDataValueRemoval=true&sqlViewsDrop=true&sqlViewsCreate=true
  &categoryOptionComboUpdate=true&cacheClear=true&ouPathsUpdate=true

Informations sur le système

La ressource système vous fournit des informations et des fonctions pratiques. La ressource système se trouve à l'adresse /api/system.

Générer des identifiants

Pour générer des identifiants DHIS2 valides et aléatoires, vous pouvez effectuer une requête GET à cette ressource :

/api/33/system/id?limit=3

Le paramètre de requête limit est facultatif et indique le nombre d'identifiants à renvoyer avec la réponse. La valeur par défaut est de renvoyer un seul identifiant. La réponse contiendra un objet JSON avec un tableau nommé codes, similaire à ceci :

{
  "codes": [
    "Y0moqFplrX4",
    "WI0VHXuWQuV",
    "BRJNBBpu4ki"
  ]
}

Le format DHIS2 UID répond à ces critères :

  • Long de 11 caractères.

  • Caractères alphanumériques uniquement, c'est-à-dire caractères alphabétiques ou numériques (A-Za-z0-9).

  • Commencez par un caractère alphabétique (A-Za-z).

Visualiser les informations du système

Pour obtenir des informations sur le système actuel, vous pouvez envoyer une requête GET à cette URL :

/api/33/system/info

Les formats de réponse JSON et JSONP sont pris en charge. La réponse info système comprend actuellement les propriétés suivantes.

{
  "contextPath": "http://yourdomain.com",
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/29.0.1547.62",
  "calendar": "iso8601",
  "dateFormat": "yyyy-mm-dd",
  "serverDate": "2021-01-05T09:16:03.548",
  "serverTimeZoneId": "Etc/UTC",
  "serverTimeZoneDisplayName": "Coordinated Universal Time",
  "version": "2.13-SNAPSHOT",
  "revision": "11852",
  "buildTime": "2013-09-01T21:36:21.000+0000",
  "serverDate": "2013-09-02T12:35:54.311+0000",
  "environmentVariable": "DHIS2_HOME",
  "javaVersion": "1.7.0_06",
  "javaVendor": "Oracle Corporation",
  "javaIoTmpDir": "/tmp",
  "javaOpts": "-Xms600m -Xmx1500m -XX:PermSize=400m -XX:MaxPermSize=500m",
  "osName": "Linux",
  "osArchitecture": "amd64",
  "osVersion": "3.2.0-52-generic",
  "externalDirectory": "/home/dhis/config/dhis2",
  "databaseInfo": {
    "type": "PostgreSQL",
    "name": "dhis2",
    "user": "dhis",
    "spatialSupport": false
  },
  "memoryInfo": "Mem Total in JVM: 848 Free in JVM: 581 Max Limit: 1333",
  "cpuCores": 8
}

Remarque

Si l'utilisateur qui demande cette ressource n'a pas toute l'autorité nécessaire, seules les propriétés qui ne sont pas considérées comme sensibles seront incluses.

Pour obtenir des informations sur le contexte du système uniquement, c'est-à-dire contextPath et userAgent, vous pouvez faire une requête GET à l'URL ci-dessous. Les formats de réponse JSON et JSONP sont supportés :

/api/33/system/context

Vérifier si la combinaison du nom d'utilisateur et du mot de passe est correcte

Pour vérifier si les informations d'identification d'un utilisateur (combinaison d'un nom d'utilisateur et d'un mot de passe) est correcte, vous pouvez envoyer une requête GET à la ressource suivante en utilisant l'option authentification de base :

/api/33/system/ping

Vous pouvez détecter le résultat de l'authentification en inspectant le code du statut HTTP de l'en-tête de la réponse. La signification des codes de statut possibles sont énumérés ci-dessous. Notez que cela s'applique aux demandes d'API Web en général.

Tableau : Codes de statut HTTP

Code de statut HTTP Description Résultat
200 OK L'authentification a réussi
302 Trouvé Aucune information d'identification n'a été fournie avec la requête - aucune authentification n'a eu lieu.
401 Non autorisé La combinaison du nom d'utilisateur et du mot de passe est incorrecte - l'authentification a échoué.

Consulter le statut d'une tâche asynchrone

Les tâches qui prennent souvent beaucoup de temps peuvent être exécutées de manière asynchrone. Après avoir initié une tâche asynchrone, vous pouvez interroger son statut via la ressource system/tasks en fournissant la catégorie de tâche et l'identifiant de la tâche qui vous intéresse.

Lorsque vous demandez le statut d'une tâche, vous devez vous authentifier en tant qu'utilisateur ayant initié la tâche. Les catégories de tâches suivantes sont prises en charge :

Tableau : Catégories de tâches

Identificateur Description
TABLE_ANALYTIQUE Génération des tableaux analytiques.
TABLE_DE RESSOURCES Génération des tableaux de ressources.
SURVEILLANCE Traitement des règles de validation des données de surveillance/contrôle.
IMPORTATION_DE DONNÉES Importation de données.
IMPORTATION_D'ÉVÉNEMENTS Importation d'événements.
IMPORTATION_D'INSCRIPTION Importation des inscriptions.
IMPORTATION_D'IES Importation d'instances d'entités suivies.
IMPORTATION_DE MÉTADONNÉES Importation de métadonnées.
INTÉGRITÉ_DES DONNÉES Traitement des contrôles d'intégrité des données.

Chaque tâche asynchrone se voit automatiquement attribuer un identifiant qui peut être utilisé pour contrôler le statut de la tâche. Cet identifiant de tâche est renvoyé par l'API lorsque vous lancez une tâche asynchrone via les différents endpoints activés asynchrones.

Surveillance d'une tâche

Vous pouvez consulter l'état des tâches par le biais d'une requête GET à la ressource des tâches du système, comme suit :

/api/33/system/tasks/{task-category-id}/{task-id}

Un exemple de requête peut ressembler à ceci :

/api/33/system/tasks/DATAVALUE_IMPORT/j8Ki6TgreFw

La réponse fournira des informations sur le statut, telles que le niveau de notification, la catégorie, l'heure et le statut. La propriété terminé indique si le processus est considéré comme terminé.

[{
  "uid": "hpiaeMy7wFX",
  "level": "INFO",
  "category": "DATAVALUE_IMPORT",
  "time": "2015-09-02T07:43:14.595+0000",
  "message": "Import done",
  "completed": true
}]

Suivre toutes les tâches d'une catégorie

Vous pouvez consulter toutes les tâches d'une catégorie spécifique par le biais d'une requête GET vers la ressource des tâches du système :

/api/33/system/tasks/{task-category-id}

Un exemple de requête pour consulter le statut des tâches d'importation de données ressemble à ceci :

/api/33/system/tasks/DATAVALUE_IMPORT

Suivre toutes les tâches

Vous pouvez demander une liste de toutes les tâches en cours d'exécution dans le système avec une requête GET à la ressource tâches du système :

/api/33/system/tasks

La réponse ressemblera à ceci :

[{
  "EVENT_IMPORT": {},
  "DATA_STATISTICS": {},
  "RESOURCE_TABLE": {},
  "FILE_RESOURCE_CLEANUP": {},
  "METADATA_IMPORT": {},
  "CREDENTIALS_EXPIRY_ALERT": {},
  "SMS_SEND": {},
  "MOCK": {},
  "ANALYTICSTABLE_UPDATE": {},
  "COMPLETE_DATA_SET_REGISTRATION_IMPORT": {},
  "DATAVALUE_IMPORT": {},
  "DATA_SET_NOTIFICATION": {},
  "DATA_INTEGRITY": {
    "OB1qGRlCzap": [{
      "uid": "LdHQK0PXZyF",
      "level": "INFO",
      "category": "DATA_INTEGRITY",
      "time": "2018-03-26T15:02:32.171",
      "message": "Data integrity checks completed in 38.31 seconds.",
      "completed": true
    }]
  },
  "PUSH_ANALYSIS": {},
  "MONITORING": {},
  "VALIDATION_RESULTS_NOTIFICATION": {},
  "REMOVE_EXPIRED_RESERVED_VALUES": {},
  "DATA_SYNC": {},
  "SEND_SCHEDULED_MESSAGE": {},
  "DATAVALUE_IMPORT_INTERNAL": {},
  "PROGRAM_NOTIFICATIONS": {},
  "META_DATA_SYNC": {},
  "ANALYTICS_TABLE": {},
  "PREDICTOR": {}
}]

Visualiser les résumés des tâches asynchrones

La ressource résumés de tâches vous permet de récupérer un résumé d'une invocation d'une tâche asynchrone. Vous devez spécifier la catégorie et, éventuellement l'identifiant de la tâche. L'identifiant de la tâche peut être récupéré à partir de la réponse de la requête API qui a initié la tâche asynchrone.

Pour récupérer le résumé d'une tâche spécifique, vous pouvez envoyer une requête à :

/api/33/system/taskSummaries/{task-category-id}/{task-id}

Un exemple de requête pourrait ressembler à ceci :

/api/33/system/taskSummaries/DATAVALUE_IMPORT/k72jHfF13J1

La réponse ressemblera à ceci :

{
  "responseType": "ImportSummary",
  "status": "SUCCESS",
  "importOptions": {
    "idSchemes": {},
    "dryRun": false,
    "async": true,
    "importStrategy": "CREATE_AND_UPDATE",
    "reportMode": "FULL",
    "skipExistingCheck": false,
    "sharing": false,
    "skipNotifications": false,
    "datasetAllowsPeriods": false,
    "strictPeriods": false,
    "strictCategoryOptionCombos": false,
    "strictAttributeOptionCombos": false,
    "strictOrganisationUnits": false,
    "requireCategoryOptionCombo": false,
    "requireAttributeOptionCombo": false,
    "skipPatternValidation": false
  },
  "description": "Import process completed successfully",
  "importCount": {
    "imported": 0,
    "updated": 431,
    "ignored": 0,
    "deleted": 0
  },
  "dataSetComplete": "false"
}

Vous pouvez également récupérer des résumés d'importation pour plusieurs tâches d'une catégorie spécifique avec une requête comme celle-ci :

/api/33/system/taskSummaries/{task-category-id}

Obtenir des informations sur la présentation

Vous pouvez récupérer les icônes de drapeaux disponibles au format JSON à l'aide d'une requête GET :

/api/33/system/flags

Vous pouvez récupérer les styles d'interface utilisateur disponibles au format JSON à l'aide d'une requête GET :

/api/33/system/styles

Informations sur le cluster

Lorsque DHIS 2 est configuré en cluster, il est utile de savoir quel nœud du cluster agit en tant que principal nœud du cluster. L'API suivante peut être utilisée pour obtenir les détails de l'instance du nœud principal. L'API prend en charge les formats JSON et XML.

GET /api/36/cluster/leader

Un exemple de réponse JSON ressemble à ceci :

{
  "leaderNodeId": "play-dhis2-org-dev",
  "leaderNodeUuid": "d386e46b-26d4-4937-915c-025eb99c8cad",
  "currentNodeId": "play-dhis2-org-dev",
  "currentNodeUuid": "d386e46b-26d4-4937-915c-025eb99c8cad",
  "leader": true
}

Min-max data elements

La ressource éléments de données min-max vous permet de définir des plages de valeurs minimales et maximales pour les éléments de données. Elle est unique en raison de la combinaison de l'unité d'organisation, de l'élément de données et de l'option de catégorie.

/api/minMaxDataElements

Tableau : Structure des données de l'élément Min-max

Élément Description Type de données
source Identifiant de l'unité d'organisation Chaîne
dataElement Identifiant de l'élément de données Chaîne
Combinaison d'options Identifiant de la combinaison d'options de catégorie de l'élément de données Chaîne
min Valeur minimale Entier
max Valeur maximale Entier
généré Indique si cet objet est généré par le système (et non défini manuellement). Booléen

Vous pouvez obtenir une liste de tous les éléments de données min-max à partir de la ressource suivante :

GET /api/minMaxDataElements.json

Vous pouvez filtrer la réponse comme suit :

GET /api/minMaxDataElements.json?filter=dataElement.id:eq:UOlfIjgN8X6

GET /api/minMaxDataElements.json?filter=dataElement.id:in:[UOlfIjgN8X6,xc8gmAKfO95]

Le paramètre de filtrage des éléments de données min-max prend en charge deux opérateurs : eq et in. Vous pouvez également utiliser le paramètre de requête fields.

GET /api/minMaxDataElements.json?fields=:all,dataElement[id,name]

Add/update single min-max data element

Pour ajouter un nouvel élément de données min-max, utilisez la requête POST à :

POST /api/minMaxDataElements.json

Le format de contenu JSON se présente comme suit :

{
  "min": 1,
  "generated": false,
  "max": 100,
  "dataElement": {
    "id": "UOlfIjgN8X6"
   },
  "source": {
    "id": "DiszpKrYNg8"
  },
  "optionCombo": {
    "id": "psbwp3CQEhs"
  }
}

Si la combinaison de l'élément de données, de l'unité d'organisation et de la catégorie existe, la valeur min-max sera mise à jour.

Delete single min-max data element

Pour supprimer un élément de données min-max, envoyez une requête avec la méthode DELETE :

DELETE /api/minMaxDataElements.json

Le contenu JSON est dans le même format que ci-dessus :

{
  "min": 1,
  "generated": false,
  "max": 100,
  "dataElement": {
    "id": "UOlfIjgN8X6"
   },
  "source": {
    "id": "DiszpKrYNg8"
  },
  "optionCombo": {
    "id": "psbwp3CQEhs"
  }
}

Add/update multiple min-max data elements

To add or update multiple min-max data elements, you can use a POST request to the following resource:

POST /api/minMaxDataElements/upsert

The JSON content format for multiple min-max data elements looks like this:

[
{
  "dataSet": "BfMAe6Itzgt",
  "values": [
    {
      "dataElement": "s46m5MS0hxu",
      "orgUnit": "Qc9lf4VM9bD",
      "optionCombo": "Prlt0C1RF0s",
      "minValue": 27,
      "maxValue": 564
    },
    {
      "dataElement": "s46m5MS0hxu",
      "orgUnit": "Qc9lf4VM9bD",
      "optionCombo": "V6L425pT3A0",
      "minValue": 0,
      "maxValue": 100
    }
]

Note that the dataSet property is required in the request body when using JSON. Each min-max value should contain UID references to dataElement, orgUnit, optionCombo. The minValue and maxValue properties represent the minimum and maximum values for the data element, respectively and will be parsed as integers.

You can also specify the generated property if you want to indicate whether the min-max data element is generated by the system or set manually. If not specified, it defaults to true.

Gzipped JSON payloads are also supported for this endpoint, which can be useful for large datasets. The server will automatically decompress the gzipped content. If you send a gzipped payload, make sure to set the Content-Encoding header to gzip and include the Content-Type header with the value application/json. The payload itself should be part of the request body.

CSV payloads are also supported for this endpoint. The CSV file should be delimited with commas. You should set the Content-Type header to text/csv and the Accept header to application/json. You will also need to specify the dataSet query parameter in the request URL. The CSV payload should contain the following columns:

Column Name Description
dataElement The UID of the data element
orgUnit The UID of the organisation unit
Combinaison d'options The UID of the category option combo
minValue The minimum value for the data element
maxValue The maximum value for the data element
généré (optional) Indicates whether the min-max data element is generated by the system or set manually. Defaults to true if not specified.

An example CSV payload might look like this:

dataElement,orgUnit,optionCombo,minValue,maxValue,generated
s46m5MS0hxu,Qc9lf4VM9bD,Prlt0C1RF0s,27,564,false
s46m5MS0hxu,Qc9lf4VM9bD,V6L425pT3A0,0,100,true

Delete multiple min-max data elements

To delete multiple min-max data elements, you can use a DELETE request to the following resource:

DELETE /api/minMaxDataElements/delete

The JSON content for the request body should be in the same format as for adding or updating multiple min-max data elements, but you only need to specify the dataElement, orgUnit, and optionCombo properties for each min-max data element you want to delete. The minValue, maxValue, and generated properties are not required for deletion. Gzipped JSON payloads and CSV payloads are also supported for this endpoint, similar to the add/update multiple min-max data elements endpoint. Be sure to set the appropriate headers (Content-Encoding as gzip and Content-Type as application/csv or application/json) when sending the request. If using CSV, you will also need to specify the dataSet query parameter in the request URL.

Exceptions de verrouillage

La ressource exceptions de blocage vous permet d'ouvrir des ensembles de données verrouillés pour la saisie de données pour un ensemble de données, une période et une unité d'organisation spécifiques. Vous pouvez lire les exceptions de verrouillage à partir de la ressource suivante :

/api/lockExceptions

Pour créer une nouvelle exception de verrouillage, vous pouvez utiliser une requête POST et spécifier l'ensemble de données, la période et l'unité d'organisation :

POST /api/lockExceptions?ds=BfMAe6Itzgt&pe=201709&ou=DiszpKrYNg8

Pour supprimer une exception de verrouillage, vous pouvez utiliser une syntaxe de demande similaire avec une requête DELETE :

DELETE /api/lockExceptions?ds=BfMAe6Itzgt&pe=201709&ou=DiszpKrYNg8

Data summary

The data summary resource provides some metrics about the database and level of system usage. The metrics include: Data statistics can be accessed with a GET request to :

GET /api/dataSummary

A JSON response similar to the one below is provided. We will explain the various parts of the response in the following sections.

Object counts represent the number of different metadata objects in the system. These counts can be useful for monitoring the size and complexity of a DHIS2 instance. An example of the objectCounts part of the response is shown below: Note that these values represent the number of objects at a specific point in time and will change as data is added or removed from the system.

"objectCounts": {
"indicator": 77,
"trackerevent": 55781,
"trackedEntity": 73125,
"visualization": 292,
"period": 384,
"organisationUnit": 1332,
"validationRule": 37,
"dataValue": 4935894,
"dataElement": 1037,
"program": 14,
"organisationUnitGroup": 18,
"singleevent": 317816,
"enrollment": 73126,
"indicatorType": 5,
"eventVisualization": 50,
"event": 373597,
"indicatorGroup": 17,
"dataSet": 26,
"userGroup": 34,
"user": 131,
"dataElementGroup": 84,
"map": 91,
"dashboard": 27
}

In addition to object counts, the data summary response also includes various usage statistics related to users and data in the form of histograms. activeUsers represents the number of users who have performed an action which results in a data statistics event (opened a dashboard, viewed a report, etc.) over the past hour (0), today (1), last 2 days (2), last 7 days (7) and last 30 days (30). Note that the "today" value represents the number of unique users who have been active since midnight server time, while the "last 2 days", "last 7 days" and "last 30 days" values represent the number of unique users who have been active in the respective time periods calculated backwards from the current time. logins represents the number of successful user logins over the same time periods. userInvitations provides the number of user invitations currently in the system, both total and expired. An example of these parts of the response is shown below:

"activeUsers": {
"0": 1,
"1": 1,
"2": 1,
"7": 2,
"30": 2
},
"logins": {
"0": 1,
"1": 1,
"2": 131,
"7": 131,
"30": 131
},
"userInvitations": {
"all": 0,
"expired": 0
}

In addition, the data summary response includes information about different types of data stored in the system. dataValueCount represents the number of data values entered into the system over the past hour (0), today (1), last 7 days (7) and last 30 days (30). singleEventCount and trackerEventCount represents the number of single events and tracker events entered into the system over the same time periods.

"dataValueCount": {
"0": 0,
"1": 0,
"7": 0,
"30": 0
},
"eventCount": {
"0": 0,
"1": 0,
"7": 1,
"30": 2
}
....

Finally, the data summary response includes information about the system itself, such as the version, revision, build time, system ID and current server date. An example of the system part of the response is shown below:

"system": {
"version": "2.43-SNAPSHOT",
"revision": "db516b5",
"buildTime": "2025-11-18T10:53:50.000",
"systemId": "eed3d451-4ff5-4193-b951-ffcc68954299",
"serverDate": "2025-11-18T10:55:15.048"
}

Data summary Prometheus metrics

In order to support the long-term monitoring of DHIS2 instances, a special endpoint is available which outputs the data summary information in the Prometheus text exposition format. This can be fetched from the server by making a GET request to : GET api/dataSummary/metrics

An example of the output is provided below

# HELP data_summary_object_counts Count of metadata objects
# TYPE data_summary_object_counts gauge
data_summary_object_counts{type="indicator"} 77
data_summary_object_counts{type="trackedEntity"} 73125
data_summary_object_counts{type="visualization"} 292
data_summary_object_counts{type="period"} 384
data_summary_object_counts{type="programStageInstance"} 373597

This endpoint provides essentially the same information as the api/dataSummary endpoint, but in a format which Prometheus is capable of scraping and importing. Most of the metrics represent object counts, such as the current number of data elements, organization units, etc.

The build information metric is explained in more detail below.

# HELP data_summary_build_info Build information
# TYPE data_summary_build_info gauge
data_summary_build_info{version="2.42-SNAPSHOT", commit="932e552"} 1737621197

This metric represents the current version and commit hash of the server. The metric itself is an integer and represents the build time as seconds since the epoch. This metric can be easily converted or to an actual date when needed.

Note On systems with large amounts of data, the dataValueCount and eventCount metrics may take a long time to compute due to the large number of records in the database. Users should thus use caution if scraping metrics from this endpoint as it may impact the performance of the server. It should generally be sufficient to scrape this endpoint once per day, since this will provide a good overview of the system usage and performance.