Esempi di API REST
La sezione seguente contiene esempi di script bash su come eseguire azioni utilizzando l'API REST SKOOR con l'utilità curl. La maggior parte degli input e degli output è formattata in JSON. Per facilitare la lettura, in alcuni esempi è stato utilizzato il parser JSON jq, che può essere installato dai repository comuni Redhat o CentOS.
Intestazione dello script bash
Parametri comuni da impostare come intestazione dello script bash per gli esempi di script riportati di seguito (USER e PASSWORD devono essere adattati a un utente SKOOR reale):
#!/bin/bash HOST=reltest USER=admin PASSWORD=admin
Esempi di richiesta
Le richieste e i corpi delle richieste negli esempi riportati di seguito possono essere copiati e incollati così come sono, ad eccezione degli ID oggetto che devono essere sostituiti con quelli esistenti nel sistema in cui vengono eseguite le richieste. È necessario fornire parti dei corpi delle richieste anche se non contengono valori significativi per la creazione o l'aggiornamento degli oggetti.
La maggior parte delle informazioni relative alla data e all'ora nelle richieste deve essere fornita nel formato ISO 8601 e nel formato della durata.
Sessione SKOOR
Accedi a SKOOR:
SESSION_ID=$(curl --silent -k "https://$HOST/skoor-webservice/session/login?username=$USER&password=$PASSWORD" | jq -r '.sessionId') >/dev/null
Si prega di effettuare sempre il logout dopo aver completato tutte le richieste. Le sessioni rimangono aperte per 24 ore, altrimenti
Disconnettersi:
curl -k "https://$HOST/skoor-webservice/session/logout?sessionId=$SESSION_ID"
Utenti
Interroga tutti gli utenti SKOOR e analizza nomi e ruoli utilizzando jq:
curl --silent -k "https://$HOST/skoor-webservice/users?sessionId=$SESSION_ID" | jq -r '.[] | "\(.name) \(.role)"'
Gruppi
Interroga un gruppo specifico con id 495:
curl -k -X GET "https://$HOST/skoor-webservice/groups/495?sessionId=$SESSION_ID"
Interroga un gruppo utilizzando un filtro di ricerca codificato con URL. Il risultato dovrebbe contenere tutti i gruppi al di sotto dell'id del gruppo padre 207.
Filtro di ricerca originale: gruppi con id diverso da 207:
{"type":"group","mode": "and","conditions": [{"item":"id","operator": "ne","expression":"207"}]}
Filtro di ricerca codificato URL (la codifica/decodifica può essere eseguita utilizzando un job HTTP SKOOR o uno dei numerosi servizi disponibili su 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
Query:
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"
Dispositivi
Interroga il dispositivo con id 383:
curl -k -X GET "https://$HOST/skoor-webservice/devices/383?sessionId=$SESSION_ID"
Crea un dispositivo sotto il gruppo con id 308:
Corpo della richiesta per un dispositivo di sottotipo server con il nome SKOOR Server. Impostare il collettore predefinito su Id 2, che è il collettore locale:
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
}'
Richiesta:
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"
Creare un'istanza del dispositivo da un modello sotto il gruppo con id 332. A tal fine, verrà utilizzato il metodo di copia dell'API REST. L'id del dispositivo (180 nell'esempio) deve essere impostato sull'id del modello del dispositivo:
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"
Eliminare il dispositivo con id 558:
Gli oggetti eliminati possono essere ripristinati solo dal backup della configurazione!
curl -k -X DELETE "https://localhost/skoor-webservice/devices/558?recursive=true&sessionId=$SESSION_ID"
Lavori
Interrogare il lavoro con ID 1675 con soglie e valori:
curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1675?thresholds=true&values=true&sessionId=$SESSION_ID"
Cerca un lavoro utilizzando un filtro di ricerca.
Filtro di ricerca con codifica URL per cercare i lavori al di sotto del gruppo con id 216 che hanno una proprietà personalizzata con chiave test_property impostata sul valore 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"
Filtro di ricerca in testo semplice per lavori del sottotipo webcollector sotto il gruppo 310 con risultato analizzato utilizzando 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)"'
Creare un lavoro sotto l'ID dispositivo 555:
Corpo della richiesta per un lavoro di sottotipo webcollector con nome TEST generato e tre valori di ritorno. Creare il lavoro sotto il dispositivo con ID 555. L'intervallo di esecuzione sarà impostato su 0 secondi (PT0S: nessun intervallo):
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
}'
Richiesta:
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"
Aggiornamento del lavoro con id 1608:
Corpo della richiesta per il lavoro con id 1608 sul dispositivo con id 555. Imposta le soglie per questo lavoro:
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
}'
Richiesta:
echo $JOB_BODY_UPDATE | curl -s -k -X PUT -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs/1608?sessionId=$SESSION_ID"
Interrompi/avvia il lavoro con 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"
Richiedi cronologia valori del lavoro con ID 1326:
Le informazioni relative a data e ora devono essere fornite nel formato ISO 8601 e nel formato della durata
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
Richiesta della cronologia dello stato SLC con 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
Query SLO con id 116:
curl -k -X GET "https://$HOST/skoor-webservice/slos/116?sessionId=$SESSION_ID"
Richiesta della cronologia dello stato di 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"
Richiesta oggetti secondari di SLO id 176:
curl -k -X GET "https://$HOST/skoor-webservice/slos/176/children?sessionId=$SESSION_ID"
Crea SLO sotto l'id di gruppo 296:
Corpo della richiesta per uno SLO di sottotipo top con il nome 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"
}'
Richiesta:
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"
Crea istanza SLO dal modello SLO con id 179. Il nome SLO sarà rest-test-slo e l'oggetto padre sarà lo slo con 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"
Interruzioni
Richiesta di interruzioni tra 2019-02-21T09:00+01:00 e 2019-03-21T23:59+01:00 (codifica URL). L'impostazione predefinita è una durata minima di 10 minuti (PT10M) e solo lo stato Major:
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"
Rivalutazioni
Interroga le rivalutazioni del gruppo 207 dal 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"
Aggiungi una rivalutazione al gruppo id 207:
I parametri di inizio e fine devono essere impostati in UTC seguiti dal fuso orario Z o +00:00 o dall'ora locale seguita dal fuso orario (ad esempio +02:00). Il parametro del fuso orario influisce solo sull'array dei tempi
Se l'ora del parametro di inizio non corrisponde all'ora di inizio dell'array dei tempi, la manutenzione verrà visualizzata solo in modalità di modifica (Modifica rivalutazione). Si prega di notare che MET distinguerà automaticamente tra ora legale e ora solare. In questo caso, impostare l'ora di inizio sull'ora locale
Corpo della richiesta per una rivalutazione una tantum dalle 07:20:00 del 13/04/2019 alle 08:20:00 del 13/04/2019:
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
}
]
}'
Richiesta:
echo $REVALUATION_BODY | curl -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/groups/207/revaluations?sessionId=$SESSION_ID"