Courte description du web service Metrics qui permet de récupérer un certain nombre d’informations quantitatives sur une application.
Présentation
Le web service “Metrics” a été créé afin de pouvoir récupérer des informations quantitatives sur une application : le nombre de projets au sein de l’application, le nombre de dictionnaires, le nombre d’enregistrements dans un varset ou encore le nombre d’utilisateur par rôle au sein de un, plusieurs ou tous les projets.
Plusieurs niveaux de précisions existent, le plus haut étant le niveau “application”.
Chaque niveau dispose d’un certain nombres de métriques. Par exemple, la métrique “projects_count” pour le niveau “application”, “vars_count”, pour les niveaux “projects” et “varsets”, “record_counts” pour les niveaux “varsets”, “pj_tables” et “sys_tables”, etc.
Chaque niveau, à l’exception du niveau “application”, peut-être filtré pour ne récupérer que les métriques que d’un ou plusieurs éléments précis : le nombre d’utilisateurs des projets “mon_projet” et “mon_autre_projet”, le nombre d’enregistrements au sein du varset “visit” du projet “mon_projet”, etc.
Ce web service fonctionne au niveau applicatif, la base de l’URI est donc le vhost de l’application, pas besoin de préciser un projet : https://mon_appli.voozanoo.net/ws/metrics/application/projects_count. Celà implique également que l’authentification se fait via un utilisateur système. La création d’un utilisateur système se fait via la méthode CLI “mtd=createSysUser”.
voozanoo.ws.metrics.enable = true
dans le fichier application.ini de l’application.
Construction des URI
Le web service Metrics comprend des URI formées comme suit :
vhost/application/projects/:project/varsets/:varset/mon_metric?parameter1=valeur¶meter2=[valeur1, valeur2, valeur3]
Où :
- “application” est un élément obligatoire qui ne peut être précisé aujourd’hui (à terme, le web service devra être en mesure de gérer les applications multi-bases)
- “projects” et “varsets” sont des niveaux de metrics pouvant être filtrés par un ou plusieurs élément(s) (élément = nom de projet/varset)
- “:project” et “:varset” sont des parties optionelles, à remplacer par le ou les nom(s) des éléments sur lesquels on souhaite avoir des informations. Pour passer plusieur noms d’éléments, utiliser la syntaxe : “vhost/application/projects/[projet1,projet2]/varsets/mon_metric
- “mon_metric” : le nom d’une métrique existant au niveau “varset”
- “?parameter1=valeur¶meter2=[valeur1, valeur2, valeur3]” : les paramètres passés à la méthode calculant la métrique demandée
Auto-documentation
Le web service est auto-documenté.
La liste des URI existantes est disponible aux adresses :
vhost/ws/metrics/
vhost/ws/metrics/doc
La liste des métriques disponibles, avec leur description et les paramètres acceptés est disponible en ne faisant appel à aucune métrique ou en ajoutant /doc à la fin de l’URI :
vhost/ws/metrics/application/projects/
vhost/ws/metrics/application/projects/active_users_count/doc
Format de résultats
Les résultats sont renvoyés au format JSON.
Si la requête est précise, c’est à dire filtrée pour ne récupérer qu’une seule métrique sur un élément précis (ex : le nombre d’enregistrements au sein du varset “file” du projet “mon_projet”), le résultat renvoyé est un nombre, un string (date) ou un objet s’il s’agit de données agrégées (ex : le nombre d’utlisateurs par groupe au sein du varset “file” au sein du projet “mon_projet”).
Si la requête est moins précise, la réponse prendra la forme d’un objet décrivant l’arborescence des niveaux parcourus avec, pour chaque niveau, les clés “name” (nom de l’élément), “type” (niveau de l’élément), “value” (résultat de la métrique ou suite de l’arbrescence).
Exemples
Documentation
vhost/ws/metrics/
{
"response": [
"vhost/ws/metrics",
"vhost/ws/metrics/application",
"vhost/ws/metrics/application/projects_count",
"vhost/ws/metrics/application/sys_dictionaries_count",
"vhost/ws/metrics/application/projects",
"vhost/ws/metrics/application/projects/:projects/varsets_count",
"..."
],
"success": true
}
vhost/ws/metrics/application
{
"response": [
{
"name": "projects_count",
"url": "vhost/ws/metrics/application/projects_count",
"description": "Number of projects in the application. Returns: Integer",
"parameters": []
},
{
"name": "sys_dictionaries_count",
"url": "vhost/ws/metrics/application/sys_dictionaries_count",
"description": "Number of system dictionaries in the application. Returns: Integer",
"parameters": []
}
],
"success": true
}
vhost/ws/metrics/application/projects/groups_count_per_axis/doc
{
"response": {
"name": "groups_count_per_axis",
"url": "http://localhost/ws/metrics/application/projects/groups_count_per_axis",
"description": "- Number of groups in each axis of the project. Returns: Array of { axis_name: n_groups }",
"parameters": [
{
"name": "axis_ids",
"description": "Id(s) of targeted axis.",
"default": "All axis",
"possible_values": "int[]|int|null"
}
]
},
"success": true
}
Métriques
vhost/ws/metrics/application/projects/mon_projet/varsets/doctor/deleted_records_count
{
"response": 76,
"success": true
}
vhost/ws/metrics/application/projects/mon_projet/varsets/doctor/last_insertion_date
{
"response": "2020-09-11 13:45:34",
"success": true
}
vhost/ws/metrics/application/projects/mon_projet/varsets/user/vars_count_per_type
{
"response": {
"primary_key": 0,
"fkey_varset": 0,
"fkey_varset_ref": 0,
"fkey_dico": 0,
"fkey_dico_ext": 0,
"fkey_sysdico": 2,
"fkey_sysdico_ext": 0,
"string": 8,
"integer": 2,
"float": 0,
"date": 3,
"file": 0,
"datetime": 0,
"boolean": 0,
"time": 0,
"text": 0,
"longtext": 0
},
"success": true
}
vhost/ws/metrics/application/projects/mon_projet/varsets/user/vars_count_per_type?vars_types=string
{
"response": 8,
"success": true
}
vhost/ws/metrics/application/projects/varsets/records_count
{
"response": [
{
"name": "mon_application",
"type": "application",
"value": [
{
"name": "mon_projet_1",
"type": "project",
"value": [
{
"name": "resource",
"type": "varset",
"value": {
"records_count": 37
}
},
{
"name": "evtlog",
"type": "varset",
"value": {
"records_count": 212
}
},
{
"name": "monitoring",
"type": "varset",
"value": {
"records_count": 693
}
},
{
"name": "dico",
"type": "varset",
"value": {
"records_count": 8
}
},
{
"name": "dicostatus",
"type": "varset",
"value": {
"records_count": 8
}
},
{
"name": "query",
"type": "varset",
"value": {
"records_count": 2
}
},
{
"name": "queryvar",
"type": "varset",
"value": {
"records_count": 3
}
},
{
"name": "querycache",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "user",
"type": "varset",
"value": {
"records_count": 3
}
},
{
"name": "dental_record",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "patient",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "ophthalmo_visit",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "doctor",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "dental_visit",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "ophthalmo_record",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "empty",
"type": "varset",
"value": {
"records_count": 0
}
}
]
},
{
"name": "mon_projet_2",
"type": "project",
"value": [
{
"name": "resource",
"type": "varset",
"value": {
"records_count": 33
}
},
{
"name": "evtlog",
"type": "varset",
"value": {
"records_count": 123
}
},
{
"name": "monitoring",
"type": "varset",
"value": {
"records_count": 394
}
},
{
"name": "dico",
"type": "varset",
"value": {
"records_count": 4
}
},
{
"name": "dicostatus",
"type": "varset",
"value": {
"records_count": 4
}
},
{
"name": "query",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "queryvar",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "querycache",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "user",
"type": "varset",
"value": {
"records_count": 3
}
},
{
"name": "dental_record",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "patient",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "ophthalmo_visit",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "doctor",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "dental_visit",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "ophthalmo_record",
"type": "varset",
"value": {
"records_count": 0
}
},
{
"name": "empty",
"type": "varset",
"value": {
"records_count": 0
}
}
]
}
]
}
],
"success": true
}