Exemples d'API REST
La section suivante contient des exemples de scripts bash sur la manière d'effectuer des actions en utilisant l'API REST de SKOOR avec l'utilitaire curl. La plupart des entrées et sorties sont formatées en JSON. Pour des raisons de lisibilité, l'analyseur JSON jq a été utilisé dans certains des exemples. Il peut être installé à partir des dépôts communs Redhat ou CentOS.
En-tête de 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 véritable utilisateur SKOOR) :
#!/bin/bash HOST=reltest USER=admin PASSWORD=admin
Exemples de requêtes
Les requêtes et les corps de requête des exemples ci-dessous peuvent être copiés et collés tels quels, à l'exception des identifiants d'objets qui doivent être remplacés par des identifiants existants sur le système où les requêtes sont exécutées. Certaines parties du corps de la demande 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 relatives à la date et à l'heure contenues dans les demandes doivent être fournies au format ISO 8601 et au format de durée.
Session SKOOR
Connectez-vous à 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 après avoir répondu à toutes les demandes. Les sessions restent ouvertes pendant 24 heures dans le cas contraire
Déconnexion :
curl -k "https://$HOST/skoor-webservice/session/logout?sessionId=$SESSION_ID"
Utilisateurs
Interroger tous les utilisateurs de SKOOR et analyser 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
Interroger un groupe spécifique avec l'identifiant 495 :
curl -k -X GET "https://$HOST/skoor-webservice/groups/495?sessionId=$SESSION_ID"
Interroger un groupe à l'aide d'un filtre de recherche codé en URL. Le résultat doit contenir tous les groupes inférieurs au groupe parent (id 207) .
Filtre de recherche original : groupes dont l'identifiant n'est pas égal à 207 :
{"type":"group","mode": "and","conditions": [{"item":"id","operator": "ne","expression":"207"}]}
Filtre de recherche codé par URL (le codage/décodage peut être effectué à l'aide d'une tâche HTTP SKOOR ou d'un des nombreux services disponibles sur l'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
Interroger le dispositif avec l'identifiant 383 :
curl -k -X GET "https://$HOST/skoor-webservice/devices/383?sessionId=$SESSION_ID"
Création d' un dispositif sous le groupe avec l'identifiant 308:
Corps de la requête pour un dispositif de sous-type server avec le nom SKOOR Server. Définir le collecteur par défaut à 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 }'
Request :
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 dispositif à partir d'un modèle situé sous le groupe dont l'identifiant est 332. Pour ce faire, la méthode de copie de l'API REST sera utilisée. L'identifiant de l'appareil (180 dans l'exemple) doit correspondre à l'identifiant du modèle d'appareil :
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'identifiant 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"
Jobs
Interroger le job id 1675 avec les seuils et les valeurs :
curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1675?thresholds=true&values=true&sessionId=$SESSION_ID"
Recherche d'un travail à l'aide d'un filtre de recherche.
Filtre de recherche encodé en URL pour rechercher des travaux sous le groupe avec l'identifiant 216 ayant une propriété personnalisée avec la clé test_property fixée à 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 clair pour les emplois du sous-type webcollector en dessous du groupe 310 avec un 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éation d' un travail sous l'identifiant 555:
Corps de la requête pour un travail de sous-type webcollector avec le nom TEST généré et trois valeurs de retour. Créer le job sous le dispositif avec l'Id 555. L'intervalle d'exécution sera fixé à 0 seconde (PT0S : pas d'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"
Update job with id 1608:
Demande de corps pour le travail avec l'identifiant 1608 sur l'appareil 555. Définir les seuils pour ce travail :
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 }'
Request :
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'identifiant 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"
Interroger l'historique des valeurs de la tâche 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"
CSL
Interrogation de l'historique de l'état du SLC avec l'identifiant 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
Interroger le SLO avec l'identifiant 116 :
curl -k -X GET "https://$HOST/skoor-webservice/slos/116?sessionId=$SESSION_ID"
Interrogation de l'historique d'état du SLO avec l'identifiant 116 : SLO
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"
Query child objects of SLO id 176 :Interroger les objets enfants de l'OLS :
curl -k -X GET "https://$HOST/skoor-webservice/slos/176/children?sessionId=$SESSION_ID"
Create SLO below group id 296 :Créer un SLO sous le groupe id 296 :
Request body for an SLO of subtype top with the name 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" }'
Request :
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 instanceSLO à partir du modèle SLO avec l'identifiant 179. Le nom du SLO sera rest-test-slo et l'objet parent sera le slo avec l'identifiant 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"
Interruptions
Interrogation des interruptions entre 2019-02-21T09:00+01:00 et 2019-03-21T23:59+01:00 (URL encodée). Par défaut, la durée minimale est de 10 minutes (PT10M) et l'état majeur uniquement :
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"
Revalorisations
Demande les revalorisations du groupe 207 à partir de 2019-04-01T00:00:00Z :
curl -k -X GET "https://$HOST/skoor-webservice/groups/207/revaluations?begin=2019-04-01T00:00:00Z&sessionId=$SESSION_ID"
Ajouter une revalorisation au groupe 207:
Les paramètres de début et de fin doivent être définis en UTC suivi 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 de début du paramètre ne correspond pas à l'heure de début du tableau des heures, la maintenance ne sera affichée qu'en mode d'édition (Réévaluation de l'édition). Veuillez noter que MET fait automatiquement la distinction entre l'heure d'été et l'heure d'hiver. Dans ce cas, réglez l'heure de début à l'heure locale.
Corps de la demande pour une revalorisation unique de 2019-04-13T07:20:00Z à 2019-04-13T08: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"