Exemples d'API REST
La section suivante contient des exemples de scripts bash expliquant comment effectuer des actions à l'aide de l'API REST SKOOR avec l'utilitaire curl. La plupart des entrées et sorties sont au format JSON. Pour faciliter la lecture, le parseur JSON jq a été utilisé dans certains exemples. Il peut être installé à partir des référentiels Redhat ou CentOS courants.
En-tête du script bash
Paramètres communs à définir en tant qu'en-tête de script bash pour les exemples de script ci-dessous (USER et PASSWORD doivent être adaptés à un utilisateur SKOOR réel) :
#!/bin/bash HOST=reltest USER=admin PASSWORD=admin
Exemples de requêtes
Les requêtes et les corps de requête dans les exemples ci-dessous peuvent être copiés et collés tels quels, à l'exception des identifiants d'objet qui doivent être remplacés par ceux existant sur le système où les requêtes sont effectuées. Certaines parties des corps de requête doivent être fournies, même si elles ne contiennent pas de valeurs significatives pour la création ou la mise à jour d'objets.
La plupart des informations de date et d'heure dans les requêtes doivent être fournies au format ISO 8601 et au format de durée.
Session SKOOR
Connexion à SKOOR :
SESSION_ID=$(curl --silent -k "https://$HOST/skoor-webservice/session/login?username=$USER&password=$PASSWORD" | jq -r '.sessionId') >/dev/null
Veuillez toujours vous déconnecter une fois toutes les requêtes effectuées. Les sessions restent ouvertes pendant 24 heures, sinon
Déconnexion :
curl -k "https://$HOST/skoor-webservice/session/logout?sessionId=$SESSION_ID"
Utilisateurs
Interrogez tous les utilisateurs SKOOR et analysez les noms et les rôles à l'aide de jq :
curl --silent -k "https://$HOST/skoor-webservice/users?sessionId=$SESSION_ID" | jq -r '.[] | "\(.name) \(.role)"'
Groupes
Rechercher un groupe spécifique avec l'identifiant 495 :
curl -k -X GET "https://$HOST/skoor-webservice/groups/495?sessionId=$SESSION_ID"
Rechercher un groupe à l'aide d'un filtre de recherche encodé en URL. Le résultat doit contenir tous les groupes sous le groupe parent id 207.
Filtre de recherche d'origine : groupes dont l'identifiant n'est pas égal à 207 :
{"type":"group","mode": "and","conditions": [{"item":"id","operator": "ne","expression":"207"}]}
Filtre de recherche encodé en URL (l'encodage/décodage peut être effectué à l'aide d'une tâche HTTP SKOOR ou de l'un des nombreux services disponibles sur Internet) :
%7B%22type%22%3A%22group%22%2C%22mode%22%3A%20%22and%22%2C%22conditions%22%3A%20%5B%7B%22item%22%3A%22id%22%2C%22operator%22%3A%20%22ne%22%2C%22expression%22%3A%22207%22%7D%5D%7D
Requête :
curl -k -X GET "https://$HOST/skoor-webservice/groups/207/search?filterDefinition=%7B%22type%22%3A%22group%22%2C%22mode%22%3A%20%22and%22%2C%22conditions%22%3A%20%5B%7B%22item%22%3A%22id%22%2C%22operator%22%3A%20%22ne%22%2C%22expression%22%3A%22207%22%7D%5D%7D&sessionId=$SESSION_ID"
Appareils
Requête sur l'appareil avec l'ID 383 :
curl -k -X GET "https://$HOST/skoor-webservice/devices/383?sessionId=$SESSION_ID"
Créer un appareil sous le groupe avec l'identifiant 308 :
Corps de la requête pour un appareil de sous-type server avec le nom SKOOR Server. Définissez le collecteur par défaut sur l'ID 2, qui est le collecteur local :
DEVICE_BODY='{
"type": "device",
"subType": "server",
"name": "SKOOR Server",
"address": "",
"netmask": "",
"deviceName": "localhost",
"properties": [],
"parameter": {},
"permissions": {
"read": true,
"write": true,
"execute": true
},
"isTemplate": false,
"instanceType": "sub",
"collectorId": 2,
"hasChildren": false
}'
Demande :
echo $DEVICE_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/devices?parentType="group"&parentId="308"&sessionId=$SESSION_ID"
Créer une instance de périphérique à partir d'un modèle sous le groupe avec l'ID 332. Pour ce faire, la méthode de copie de l'API REST sera utilisée. L'ID du périphérique (180 dans l'exemple) doit être défini sur l'ID du modèle de périphérique :
curl -k -X POST "https://$HOST/skoor-webservice/devices/180/copy?destinationName="rest-test"&destinationAddress="localhost"&parentType="group"&parentId=332&destinationType="instance"&collectorId=2&jobsStopped=false&sessionId=$SESSION_ID"
Supprimer le dispositif avec l'ID 558 :
Les objets supprimés ne peuvent être restaurés qu'à partir d'une sauvegarde de configuration !
curl -k -X DELETE "https://localhost/skoor-webservice/devices/558?recursive=true&sessionId=$SESSION_ID"
Tâches
Requête sur le travail 1675 avec seuils et valeurs :
curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1675?thresholds=true&values=true&sessionId=$SESSION_ID"
Rechercher une tâche à l'aide d'un filtre de recherche.
Filtre de recherche encodé en URL pour rechercher les tâches sous le groupe avec l'ID 216 ayant une propriété personnalisée avec la clé test_property définie sur la valeur abc :
curl -ks -X GET "https://$HOST/skoor-webservice/groups/216/search?filterDefinition=%7B%22type%22%3A%22job%22%2C%22mode%22%3A%22and%22%2C%22conditions%22%3A%5B%7B%22item%22%3A%22property_key%22%2C%22operator%22%3A%22eq%22%2C%22expression%22%3A%22abc%22%2C%22propertyKey%22%3A%22test_property%22%7D%5D%7D&sessionId=$SESSION_ID"
Filtre de recherche en texte brut pour les tâches de sous-type webcollector sous le groupe 310 avec résultat analysé à l'aide de jq :
curl -ks -X GET -G "https://$HOST/skoor-webservice/groups/310/search?sessionId=$SESSION_ID" --data-urlencode "filterDefinition={\"type\":\"job\",\"mode\":\"and\",\"conditions\":[{\"item\":\"subType\",\"operator\":\"eq\",\"expression\":\"webcollector\"}]}" | jq -r '.items[] | "\(.deviceName) \(.name) \(.id)"'
Créer un travail sous l'ID de périphérique 555 :
Corps de la requête pour une tâche de sous-type webcollector avec le nom TEST généré et trois valeurs de retour. Créer la tâche sous le périphérique avec l'ID 555. L'intervalle d'exécution sera défini sur 0 seconde (PT0S : aucun intervalle) :
JOB_BODY='{
"type": "job",
"name": "TEST generated",
"deviceId": 555,
"subType": "webcollector",
"interval": "PT0S",
"stopped": false,
"parameters": {
"intervalMode": 0,
"filename": "",
"returnValue": [
{
"valueName": "Return value 1"
},
{
"valueName": "Return value 2"
},
{
"valueName": "Return value 3"
}
]
},
"isTemplate": false,
"properties": [],
"permissions": {
"read": true,
"write": true,
"execute": true
},
"instanceType": "none",
"stateForced": false,
"thresholds": null,
"values": null,
"message": null
}'
Demande :
echo $JOB_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs?parentType="device"&parentId="555"&sessionId=$SESSION_ID"
Mettre à jour la tâche avec l'ID 1608 :
Corps de la requête pour la tâche avec l'ID 1608 sur l'ID de périphérique 555. Définir les seuils pour cette tâche :
JOB_BODY_UPDATE='{
"type": "job",
"id": 1608,
"name": "Richmond",
"deviceId": 555,
"deviceName": "TEST generated device",
"subType": "webcollector",
"interval": "PT0S",
"stopped": false,
"parameters": {
"intervalMode": 0,
"filename": "",
"returnValue": [
{
"valuePrecision": 3,
"valueName": "myValue"
}
]
},
"isTemplate": false,
"properties": [],
"permissions": {
"read": true,
"write": true,
"execute": true
},
"instanceType": "none",
"currentState": "ok",
"stateForced": false,
"thresholds": {
"major": {
"mode": "or",
"conditions": [
{
"key": "returnValue1",
"operator": ">",
"value": 60.0,
"repetition": 1,
"inFuture": null,
"adaptiveValues": null
}
]
}
},
"values": {},
"message": null,
"collectorId": 2
}'
Demande :
echo $JOB_BODY_UPDATE | curl -s -k -X PUT -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs/1608?sessionId=$SESSION_ID"
Arrêter/démarrer la tâche avec l'ID 1605 :
curl -ks -X GET -G "https://$HOST/skoor-webservice/jobs/1605?sessionId=$SESSION_ID" | jq -r '.stopped = false' | curl -s -k -X PUT -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs/1605?sessionId=$SESSION_ID"
Requête sur l'historique des valeurs du travail n° 1326 :
Les informations relatives à la date et à l'heure doivent être fournies au format ISO 8601 et au format de durée
curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1326/value-history?timestamp_begin=2018-04-16T08%3A00%3A00Z×tamp_end=2018-04-16T10%3A00%3A00Z&scale=PT10M&key=returnValue1&mode=avg&values=true&sessionId=$SESSION_ID"
SLC
Consulter l'historique de l'état SLC avec l'ID 6 :
curl -k -X GET "https://$HOST/skoor-webservice/slcs/6/state-history?timestamp_begin=2017-10-01T00:00%2B01:00×tamp_end=2017-12-12T23:59%2B01:00&recalc=true&sessionId=$SESSION_ID"
SLO
Requête SLO avec l'ID 116 :
curl -k -X GET "https://$HOST/skoor-webservice/slos/116?sessionId=$SESSION_ID"
Interroger l'historique d'état de SLO id 116 :
curl -k -X GET "https://$HOST/skoor-webservice/slos/116/state-history?timestamp_begin=2018-01-01T00:00%2B01:00×tamp_end=2018-12-12T23:59%2B01:00&recalc=true&sessionId=$SESSION_ID"
Interroger les objets enfants de SLO id 176 :
curl -k -X GET "https://$HOST/skoor-webservice/slos/176/children?sessionId=$SESSION_ID"
Créer un SLO sous l'ID de groupe 296 :
Corps de la requête pour un SLO de sous-type top avec le nom TEST SLO :
SLO_BODY='{
"type": "slo",
"subType": "top",
"name": "TEST SLO",
"deviceId": 0,
"deviceName": "",
"stateOperation": "and",
"pushState": "any",
"sortMode": "link",
"warning": 0,
"minor": 0,
"major": 0,
"minorWarning": 0,
"minorMinor": 0,
"warningWarning": 0,
"isTemplate": false,
"ignoreMaintenance": true,
"isReason": true,
"properties": [],
"parameters": {
"children": 0,
"costsPerMin": 0,
"currency": "",
"riskFactor": 0
},
"permissions": {
"read": true,
"write": true,
"execute": true
},
"instanceType": "none"
}'
Demande :
echo $SLO_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/slos?parentType=group&parentId=296&sessionId=$SESSION_ID"
Créer une instance SLO à partir du modèle SLO avec l'ID 179. Le nom du SLO sera rest-test-slo et l'objet parent sera le SLO avec l'ID 177 :
curl -k -X POST "https://$HOST/skoor-webservice/slos/179/copy?destinationName=rest-test-slo_1&parentType=slo&parentId=177&destinationType=instance&sessionId=$SESSION_ID"
Pannes
Requête sur les interruptions entre 2019-02-21T09:00+01:00 et 2019-03-21T23:59+01:00 (encodage URL). La durée minimale par défaut est de 10 minutes (PT10M) et seul l'état Major est pris en compte :
curl -k -X GET "https://$HOST/skoor-webservice/devices/383/outages?begin=2019-02-21T09:00%2B01:00&end=2019-03-21T23:59%2B01:00&recalc=false&sessionId=$SESSION_ID"
Réévaluations
Rechercher les réévaluations du groupe 207 à partir du 01/04/2019 à 00:00:00Z :
curl -k -X GET "https://$HOST/skoor-webservice/groups/207/revaluations?begin=2019-04-01T00:00:00Z&sessionId=$SESSION_ID"
Ajouter une réévaluation au groupe id 207 :
Les paramètres de début et de fin doivent être définis en UTC, suivis du fuseau horaire Z ou +00:00, ou de l'heure locale suivie du fuseau horaire (par exemple +02:00). Le paramètre de fuseau horaire n'affecte que le tableau des heures
Si l'heure du paramètre de début ne correspond pas à l'heure de début du tableau des heures, la maintenance ne s'affichera qu'en mode édition (Modifier la réévaluation). Veuillez noter que MET distinguera automatiquement l'heure d'été et l'heure d'hiver. Dans ce cas, définissez l'heure de début sur l'heure locale
Corps de la requête pour une revalorisation unique du 13/04/2019 à 07:20:00Z au 13/04/2019 à 08:20:00Z :
REVALUATION_BODY='{
"begin": "2019-04-13T07:20:00Z",
"end": "2019-04-13T08:20:00Z",
"created": null,
"type": "maintenance",
"adjustTo": "undefined",
"inPast": null,
"incident": null,
"name": "Test-Maintenance",
"active": [
{
"type": "one_time",
"name": null,
"timezone": "UTC",
"times": [
{
"begin": "07:20",
"duration": "PT1H",
"date": "2019-04-13"
}
],
"exception": false
}
]
}'
Demande :
echo $REVALUATION_BODY | curl -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/groups/207/revaluations?sessionId=$SESSION_ID"