9. Sanet Rest Api¶
Contenuti
9.1. Introduzione¶
Il modulo rest_api permette di effettuare interrogazioni sullo stato di Sanet una API REST basata su protocollo HTTP.
Important
Questo modulo non e' attivo di default.
9.2. Installazione¶
9.2.1. Abilitazione il modulo¶
Per abilitare il modulo, inserire nel file:
{{SANET_INSTALL_DIR}}/conf/settings.py
la seguente riga:
if 'rest_api' not in INSTALLED_APPS: INSTALLED_APPS.append('rest_api')
9.2.2. Configurazione principale¶
Per utilizzare le REST API e' necessario definire un token di autenticazione che deve essere specificato in tutte le richieste.
Il token e' una stringa di caratteri lunga a piacere.
Per personalizzare il token di autenticazione (il default è una chiave casuale), inserire la seguente riga nel file di configurazione di Sanet:
REST_API_AUTH_COOKIE = " ... "
Esempi:
REST_API_AUTH_COOKIE = "*!@!)@#5dc(*@NJ#$(108123-181@->?]" REST_API_AUTH_COOKIE = "thisismysecrettoken"
Warning
il token di autenticazione deve essere univoco per installazione.
9.3. API REST¶
9.3.1. Formato delle richieste¶
9.3.1.1. URL Base¶
La URL base per le richieste e':
https://....<base url>...../rest_api/ <parte variabile> [ ? <parametri in GET> ]
9.3.1.2. Passaggio parametri (GET)¶
Le richieste possono prevedere un numero variabili di parametri passati in GET nella URL della richiesta.
9.3.1.2.1. Parametri principali¶
Questi sono i parametri GET che sono validi per qualunque URL:
Nome parametro
Obbligatorio
Descrizione
sanet3auth
Si
Stinga contenente il token di sicurezza valido. Deve essere uguale al parametro di configurazione REST_API_AUTH_COOKIE
tenantid
Serve a specificare il tenant sul quale effettuare la ricerca. Se non specificato viene utilizzato il tenant primary.
username
Serve a filtrare la ricerca in base alla visibilità dell'utente specificato.
9.3.1.2.2. Parametri opzionali¶
E' possibile passare in GET un numero arbitrario di parametri opzionali.
https://.........../rest_api/.... ? <param1> & <param2> & <param3> ....
La semantica dei parametri dipende da quale API viene richiamata.
9.3.2. Formato delle risposte¶
9.3.2.1. Risposte con successo¶
In caso di successo, le risposte vengono inviate al cliente con una risposta HTTP con codice 200.
Il contentuto della response HTTP (l'output della richiesta) sono dei dati codificati in formato JSON,
I dati della risposta sono strutturati sempre con questa struttura:
{ "elapsed_time": <tempo di elaborazione>, "operation" : <nome dell'operazione richiesta sulla risorsa>, "result" : <dati veri e propri prodotti dell'interrogazione effettuata> }
In base al tipo di interrogazione effettuata possono essere aggiunti più o meno campi.
9.3.2.2. Risposte di errore¶
In caso di errori o anomalie, le risposte vengono inviate al cliente con una risposta HTTP con codice di errore coerente con il tipo di segnalazione.
Il contentuo della reponse HTTP sara' stringa contente il messaggio di errore in formato intelleggibile.
9.3.3. Parametri per filtrare/ordinare/limitare¶
9.3.3.1. Filtri sul valori dei campi¶
Molte delle API (url) che restituiscono un elenco di elementi possono ricevere in GET un numero arbitrario di filtri.
Esempio:
https://.........../rest_api/.... ?name="ciccio"
Un filtro e' una stringa di caratteri con la seguente sintassi:
<filter def>=<value>
La parte filter def "codifica" il tipo di filtro.
La parte value codifica il/i valore/i su cui filtrare.
Questi sono i tipi di valori ammesi per un filtro:
- null
Il valore verra' considerato come il valore booleano corrispondente.
<filter def>=null
- true | false
Il valore verra' considerato come il valore booleano corrispondente.
<filter def>=true<filter def>=false
- un stringa di numeri interi
Il valore verra' considerato come l'intero corrispente
<filter def>=22
- una stringa di caratteri compatibile con un numero in virgola mobile
Il valore verra' considerato un numero float
<filter def>=3.14
- una stringa alfanumerica racchiusa tra doppi apici (")
Il valore verra' considerato come una stringa di caratteri, doppi apici esclusi.
<filter def>="Hello world"
- una lista di valori
Una sequenza dei tipi precenti racchiusa tra parentisi quadre ([]) e separata da virgola (,)
<filter def>=[10,20,30,40] <filter def>=["UP","DOWN"]
- una stringa alfanumerica senza doppi apici (caso speciale)
Il valore verra' considerato come una stringa di caratteri
Valido solo per filtri semplici il cui valore non contiene spazi
<filter def>=Hello
E' possibile specificare valori speciali per alcuni campi. Si veda Valori speciali per parametri.
9.3.3.1.1. Nome dei campi nei filtri¶
I filtri sui campi hanno la seguente sintassi:
<field>=<value>
Esempio:
cluster=null is_primary=true name="localhost" name=localhost (caso speciale)
9.3.3.1.2. Nome dei custom field nei filtri¶
Se il "campo" su cui si vuole filtrare e' un custom field, il field deve essere indicato cosi'
<custom group>.<custom field>=<value>
Esempio: Supponendo di avere un customfield telephone del customgroup inventory-data, un filtro potrebbe essere:
custom-group inventory-data field telephone type str long-name "Telephone" description "Telephone number" order 0 field serial type num long-name "Serial" description "Serial" order 0 exit
Il filtro da specificare sui campi potrebbe essere:
inventory-data.telephone="0516318342" inventory-data.serial="12345"
9.3.3.1.3. Filtri di confronto¶
Hanno la seguente sintassi:
<field>__<op>=<value>
Dove field e' il nome di un campo (o del customfield) indica il tipo di confronto:
OP
SEMANTICA
gt
>
gte
>=
lt
<
lge
<=
isnull
true|false verifica che il valore non sia "null"
contains
Il campo <field> contiene la stringa specificata
icontains
Il campo <field> contiene la stringa specificata (case insensitive)
in
Il campo <field> rientra tra i valori specificati nella lista <value>
range
Il campo <field> rientra tra i valori compresi nel range specificato della lista di due elementi espressa con <value> (es. [10,30]).
Esempi su campi normali:
status__gte=10 status__lt=33 status__isnull=true status__in=["UP","DN"] timestamp__range=[1582022058,1582194858]
Esempi su customfield:
inventory-data.telephone__contains="0516318342" inventory-data.telephone__isnull=true inventory-data.telephone__isnull=false
9.3.3.1.4. Filtri di join¶
Alcuni oggetti hanno delle relazioni con altri oggeti attraverso foreign key.
E' possibile "seguire" la catena di join specificando il nome delle foreignkey e utilizzano il doppio underscore (__) per filtrare sul campo dell'entita' in join
<foreign_key>__<field> [ __<field> ] [__<op>]=<value>
Esempio:
cluster__isnull=false Filtra tutti gli elementi che hanno la foreign key "cluster" valorizzata. cluster__name=c1 Filtra tutti gli elementi che hanno la foreign key "cluster" che referenzia l'oggetto cluster "c1". elementtemplate__telement__name=server-linux Filtra tutti gli elementi che referenziano un template "server-linux".
Important
Per utilizzare questo tipo di filtri bisogna conoscere lo schema ER del database di Sanet.
9.3.3.2. Limite sui risultati¶
E' possibili limitare il numero di risultati aggiungendo il parametro '_limit'.
Esempio:
https://.........../rest_api/events?_limit=10
9.3.3.3. Ordinamento dei risultati¶
Con il parametro '_order' e' possibile specificare su quale/i campi ordinare i risultati.
La sintassi e':
_order=<nome campo>[,<nome campo, ...]
Esempio:
https://.........../rest_api/events?_order=timestamp https://.........../rest_api/events?_order=timestamp,status
9.3.3.3.1. Ordinamento crescente/decrescente¶
Per default l'ordinamento e' crescente.
Per impostare un ordinamento decrescente bisogna anteporre il carattere '-' al nome del campo su cui si sta effettuando l'ordinamento.
Esempio:
_order=-timestamp _order=condition_path,-timestamp
9.3.4. Valori speciali per parametri¶
Per acluni campi e' possibile specificare sia valori in formato "numerico" che in formato "stringa":
Datasource
status
STRINGA
VALUE
Descrizione
OK
0
Normal value
SV
10
Strange avlue
CA
20
Cascade error
DO
30
Dependson
UN
40
Uncheckable
ER
50
Unknown error
Condition, Event
status
statuslast
STRINGA
VALORE
Descrizione
DN
10
Down
FA
20
Failing
UD
30
Uncheckable Down
UU
40
Uncheckable UP
DD
45
Dependson Down
DU
46
Dependson Up
IN
70
Suspended
UP
100
Up
9.4. ELENCO API DISPONIBILI¶
9.4.1. Nodi¶
9.4.1.1. Lista dei nodi¶
DESCRIZIONE
Per ricevere una lista di tutti i nodi, la url da interrogare è la seguente:
http://<hostname>/sanet/rest_api/nodesEsempio:
http://<hostname>/sanet/rest_api/nodes?sanet3auth=12345
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sui nodi filtrati, nel campo result.
{ 'elapsed_time': 0.005944013595581055, 'operation': u'fetch_all_node', 'result': [ { 'cluster_distinguisher': None, 'cluster_element_id': None, 'cluster_id': None, 'cluster_instance': None, 'cluster_instance_time': None, 'cluster_role': 0, 'cluster_xform': None, 'description': u'', 'dft_timeout': 1, 'dns6_name': None, 'dns_name': None, 'effective_ip': u'127.0.0.1', 'ip4_mgt': None, 'ip6_mgt': None, 'is_abstract': False, 'kind': 1, 'name': u'localhost', 'parent_id': None, 'path': u'localhost', 'snmp_community': u'public', 'snmp_port': 161, 'snmp_v3_authdata': None, 'snmp_version': 2, 'tenant_id': u'16d3c6af68a84588a70d446a4d30d540', 'timezone': u'Europe/Rome', 'use_ipv4': True, 'uuid': u'23ca1860edbd4711822edb319717c616' } ] }
9.4.1.2. Info su un nodo¶
DESCRIZIONE
Per ricevere infomazioni su un nodo specifico, la url da interrogare è una delle seguenti:
https://<url base>/rest_api/node/<uuid o nome del nodo>Esempio:
https://<url base>/rest_api/node/localhost?sanet3auth=12345
INPUT
Nessuno.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con un dizionario, contenente informazioni sul nodo richiesto, nel campo result.
{ 'elapsed_time': 0.010519027709960938, 'operation': 'get_node_info', 'result': { 'cluster_distinguisher': None, 'cluster_element_id': None, 'cluster_id': None, 'cluster_instance': None, 'cluster_instance_time': None, 'cluster_role': 0, 'cluster_xform': None, 'description': u'', 'dft_timeout': 1, 'dns6_name': None, 'dns_name': None, 'effective_ip': u'127.0.0.1', 'ip4_mgt': None, 'ip6_mgt': None, 'is_abstract': False, 'kind': 1, 'name': u'localhost', 'parent_id': None, 'path': u'localhost', 'snmp_community': u'public', 'snmp_port': 161, 'snmp_v3_authdata': None, 'snmp_version': 2, 'tenant_id': u'16d3c6af68a84588a70d446a4d30d540', 'timezone': u'Europe/Rome', 'use_ipv4': True, 'uuid': u'23ca1860edbd4711822edb319717c616' } }
9.4.1.3. Cambiamenti di stato primary condition¶
DESCRIZIONE
Per ricevere la lista dei cambiamenti di stato della condition primary di uno specifico nodo, la url da interrogare è la seguente:
https://<url base>/rest_api/node/<uuid o nome del nodo>/get_primary_condition_status_change[?ts_start=<timestamp>&ts_end=<timestamp>]Esempio
https://<url base>/rest_api/node/localhost/get_primary_condition_status_change?sanet3auth=12345
INPUT
Parametri opzionali da fornire in GET sono ts_start e ts_end. Se non valorizzati, vengono valutati i dati delle ultime otto ore.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con nel campo result una lista di tuple
(ts_start, ts_end, status)Alla risposta vengono aggiunti anche i seguenti campi:
element_name: nome del nodo
element_uuid: uuid del nodo
element_path: path del nodo
condition_path: path della condition
Esempi
Esempi di richieste:
https://<url base>/rest_api/node/localhost/get_primary_condition_status_change?sanet3auth=12345 https://<url base>/rest_api/node/localhost/get_primary_condition_status_change?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936 https://<url base>/rest_api/node/9401493b9e5844e0b0a4baf757fa5404/get_primary_condition_status_change?sanet3auth=12345 https://<url base>/rest_api/node/9401493b9e5844e0b0a4baf757fa5404/get_primary_condition_status_change?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936Output:
{ 'condition_path': u'localhost;;icmp-reachability;reach', 'elapsed_time': 0.020576000213623047, 'element_name': u'localhost', 'element_path': u'localhost', 'element_uuid': u'23ca1860edbd4711822edb319717c616', 'operation': 'get_primary_condition_status_change', 'result': [ (1501132183, 1501160983, 100) ] }
9.4.2. Interfacce¶
9.4.2.1. Lista interfacce¶
DESCRIZIONE
Per ricevere una lista di tutte le interfacce, la url da interrogare è la seguente:
https://<url base>/rest_api/interfacesEsempio:
https://<url base>/rest_api/interfaces?sanet3auth=12345
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sulle interfacce filtrate, nel campo result.
Esempio di risposta:
{ 'elapsed_time': 0.008428812026977539, 'operation': u'fetch_all_interface', 'result': [ { 'backbone': False, 'cluster_distinguisher': None, 'cluster_id': None, 'cluster_instance': None, 'cluster_role': 0, 'cluster_xform': None, 'description': u'', 'distinguisher': u'eth0', 'ifindex': u'2', 'is_abstract': False, 'kind': 2, 'name': u'eth0', 'parent_id': u'23ca1860edbd4711822edb319717c616', 'path': u'localhost:eth0', 'uuid': u'08fec5c2500c47d18e97eee7947a38e7', 'xform': u"byRegexpUnique(1.3.6.1.2.1.2.2.1.2@, '^'+re_escape($distinguisher)+'$')" } ] }
9.4.2.2. Info interfaccia¶
DESCRIZIONE
Per ricevere infomazioni su una interfaccia specifica, la url da interrogare è una delle seguenti:
https://<url base>/rest_api/interface/<uuid o nome dell'interfaccia> https://<url base>/rest_api/interface/<uuid o nome dell'interfaccia/get_interface_infoEsempio:
https://<url base>/rest_api/interface/08fec5c2500c47d18e97eee7947a38e7/get_interface_info
INPUT
Nessuno.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con un dizionario, contenente informazioni sull'interfaccia richiesta, nel campo result.
Esempio di risposta:
{ 'elapsed_time': 0.006204843521118164, 'operation': 'get_interface_info', 'result': { 'backbone': False, 'cluster_distinguisher': None, 'cluster_id': None, 'cluster_instance': None, 'cluster_role': 0, 'cluster_xform': None, 'description': u'', 'distinguisher': u'eth0', 'ifindex': u'2', 'is_abstract': False, 'kind': 2, 'name': u'eth0', 'parent_id': u'23ca1860edbd4711822edb319717c616', 'path': u'localhost:eth0', 'uuid': u'08fec5c2500c47d18e97eee7947a38e7', 'xform': u"byRegexpUnique(1.3.6.1.2.1.2.2.1.2@, '^'+re_escape($distinguisher)+'$')" } }
9.4.2.3. Traffico interfaccia¶
DESCRIZIONE
Per ricevere informazioni sul traffico di un'interfaccia specifica, la url da chiamare è la seguente:
http://<url base>/rest_api/interface/<uuid o nome dell'interfaccia>/get_traffic[?ts_start=&ts_end=]Esempio:
http://<url base>/rest_api/interface/08fec5c2500c47d18e97eee7947a38e7/get_traffic?sanet3auth=12345
INPUT
Parametri opzionali da fornire in GET sono ts_start e ts_end. Se non valorizzati, vengono valutati i dati delle ultime otto ore.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con i seguenti campi aggiuntivi:
element_name: nome dell'interfaccia
element_uuid: uuid dell'interfaccia
element_path: path dell'interfaccia
e un dizionario nel campo result contenente le seguenti chiavi:
out_max: traffico in uscita massimo
out_avg: traffico in uscita medio
in_max: traffico in entrata massimo
in_avg: traffico in entrata medio
Esempi:
https://<url base>/rest_api/interface/foo:eth0/get_traffic?sanet3auth=12345 https://<url base>/rest_api/interface/foo:eth0/get_traffic?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936 https://<url base>/rest_api/interface/1b85b8c803c74d699adcce914af7d0c9/get_traffic?sanet3auth=12345 https://<url base>/rest_api/interface/1b85b8c803c74d699adcce914af7d0c9/get_traffic?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936Esempio di output:
{ 'elapsed_time': 0.011709928512573242, 'element_name': u'eth0', 'element_path': u'localhost:eth0', 'element_uuid': u'08fec5c2500c47d18e97eee7947a38e7', 'operation': 'get_traffic', 'result': { 'in_avg': 221.68289183222956, 'in_max': 15201.112582781458, 'out_avg': 30.25014716703459, 'out_max': 2074.2958057395144 } }
9.4.3. Storage¶
9.4.3.1. Lista storage¶
DESCRIZIONE
Per ricevere una lista di tutti gli storage, la url da interrogare è la seguente:
https://<url base>/rest_api/storages
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sugli storage filtrati, nel campo result.
9.4.4. Servizi¶
9.4.4.1. Lista servizi¶
DESCRIZIONE
Per ricevere una lista di tutti i servizi, la url da interrogare è la seguente:
https://<url base>/rest_api/services
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sui servizi filtrati, nel campo result.
9.4.5. Device¶
9.4.5.1. Lista device¶
DESCRIZIONE
Per ricevere una lista di tutti i device, la url da interrogare è la seguente:
https://<url base>/rest_api/devices
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sui device filtrati, nel campo result.
9.4.6. Condition¶
9.4.6.1. Lista condition¶
DESCRIZIONE
Per ricevere una lista di tutte le condition, la url da interrogare è la seguente:
https://<url base>/rest_api/conditions
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sulle condition filtrate, nel campo result.
{u'elapsed_time': 0.0059909820556640625, u'operation': u'fetch_all_condition', u'result': [{u'datagroup_id': u'a84d8b2b82914a538bc495ce2cdd7d9a', u'dependson_id': None, u'expr': u'$var == 1', u'lastdone': 1500138760, u'max_tries': 1, u'mtime': 1500138438, u'name': u'check', u'path': u'localhost;;dgpassive;check', u'primary': False, u'priority': 0, u'status': 10, u'statuschange_action': None, u'statuslast': 40, u'statuslastchange': 1500138760, u'title': u'Controllo passivo', u'tries': 1, u'uncheckable_fallback': None, u'uuid': u'333095c2f8884b45a1dc0af1e6985bca'}, {u'datagroup_id': u'a43d7d53c36149f09809cc32b31f6771', u'dependson_id': None, u'expr': u"1.3.6.1.2.1.1.6.0@ == 'this is a test'", u'lastdone': 1500139617, u'max_tries': 1, u'mtime': 1500139613, u'name': u'check', u'path': u'localhost;;test-trap-regexp;check', u'primary': False, u'priority': 0, u'status': 10, u'statuschange_action': None, u'statuslast': 10, u'statuslastchange': 1500139617, u'title': u'Simple condition', u'tries': 0, u'uncheckable_fallback': None, u'uuid': u'5ad5e373451d4ea5b31c38a940e78ac2'}, {u'datagroup_id': u'ab43c217e32d49068d4aa55c5c262035', u'dependson_id': None, u'expr': u"1.3.6.1.2.1.1.6.0@ == 'this is a test'", u'lastdone': 1500139617, u'max_tries': 1, u'mtime': 1500139613, u'name': u'check', u'path': u'localhost;;test-trap;check', u'primary': False, u'priority': 0, u'status': 10, u'statuschange_action': None, u'statuslast': 10, u'statuslastchange': 1500139617, u'title': u'Simple condition', u'tries': 0, u'uncheckable_fallback': None, u'uuid': u'97f2f82c827d44868d08794baf5d3e65'}]}
9.4.6.1.1. Esempi¶
Tutte le condition che contengono "localhost" nel path:
https://<url base>/rest_api/conditions ? sanet3auth=.... & path__contains=localhostTutte le condition con status "DOWN" ("DN" o 10)
https://<url base>/rest_api/conditions ? sanet3auth=.... & status=DN https://<url base>/rest_api/conditions ? sanet3auth=.... & status=10Tutte le condition appartenente al nodo localhost
https://<url base>/rest_api/conditions ? sanet3auth=.... & element__name=localhost
9.4.7. Datasource¶
9.4.7.1. Lista datasource¶
DESCRIZIONE
Per ricevere una lista di tutti i datasource, la URL da interrogare è la seguente:
https://<url base>/rest_api/datasources
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con una lista di dizionari, contenenti informazioni sui datasource filtrati, nel campo result.
9.4.7.2. Valore massimo datasource¶
DESCRIZIONE
Per ricevere il valore massimo di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
https://<url base>/rest_api/datasource/<uuid del datasource>/get_max_value
INPUT
Parametri opzionali da fornire in GET sono
ts_start
ts_end
timespec
Se ts_start e ts_end non vengono valorizzati, saranno valutati i dati delle ultime otto ore.
Il parametro timespec permette di specificare, secondo la sintassi usanta in entables (Times), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con i seguenti campi aggiuntivi:
element_name: nome dell'elemento
element_uuid: uuid dell'elemento
datasource_path: path del datasource
datasource_name: nome del datasource
datasource_uuid: uuid del datasource
e il valore richiesto nel campo result.
9.4.7.3. Valore medio datasource¶
DESCRIZIONE
Per ricevere il valore medio di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
https://<url base>/rest_api/datasource/<uuid del datasource>/get_avg_value
INPUT
Parametri opzionali da fornire in GET sono
ts_start
ts_end
timespec
Se ts_start e ts_end non vengono valorizzati, saranno valutati i dati delle ultime otto ore.
Il parametro timespec permette di specificare, secondo la sintassi usanta in entables (Times), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con i seguenti campi aggiuntivi:
element_name: nome dell'elemento
element_uuid: uuid dell'elemento
datasource_path: path del datasource
datasource_name: nome del datasource
datasource_uuid: uuid del datasource
e il valore richiesto nel campo result.
9.4.7.4. Valore minimo datasource¶
DESCRIZIONE
Per ricevere il valore minimo di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
https://<url base>/rest_api/datasource/<uuid del datasource>/get_min_value
INPUT
Parametri opzionali da fornire in GET sono
ts_start
ts_end
timespec
Se ts_start e ts_end non vengono valorizzati, saranno valutati i dati delle ultime otto ore.
Il paraemtro timespec permette di specificare, secondo la sintassi usanta in entables (Times), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con i seguenti campi aggiuntivi:
element_name: nome dell'elemento
element_uuid: uuid dell'elemento
datasource_path: path del datasource
datasource_name: nome del datasource
datasource_uuid: uuid del datasource
e il valore richiesto nel campo result.
9.4.7.5. Somma di datasource¶
DESCRIZIONE
Per ricevere statistiche (minimo, massimo, media) della somma di datasource in un arco temporale, la url da interrogare è la seguente:
https://<url base>/rest_api/datasource/sum
INPUT
Parametri obbligatori da fornire in GET sono
uuids_or_paths : elenco di uuid o path, separati da virgola, dei datasource che si vogliono sommare
Parametri opzionali da fornire in GET sono
ts_start
ts_end
Se ts_start e ts_end non vengono valorizzati, saranno valutati i dati delle ultime otto ore.
OUTPUT
Come risposta si riceverà il json standard Risposte con successo con i seguenti campi aggiuntivi:
datasource_uuids_paths: elenco di uuid o path dei datasource recuperati
e con i seguenti dati nel campo result.
series: la serie completa con la somma dei datasource
max: picco massimo della serie in series
ts_max: timestamp relativo al picco massimo
min: picco minimo della serie in series
ts_min: timestamp relativo al picco massimo
avg: media della serie in series
Nel caso in cui si verificasse un errore, nel campo errors sara' presente una descrizione del problema.
Note
Nel caso in cui uno o piu' datasource, per qualsiasi motivo, non dovessero essere recuperati l'API si comportera' nel seguente modo': * nel campo errors verranno indicati quali sono i datasource non recueprati; * nel campo result verrano riportati i dati degli eventuali datasource rimanenti e correttamente trovati.
9.4.8. Tag¶
9.4.8.1. Elenco dei tagtree¶
DESCRIZIONE
Per avere l'elenco dei tagtree bisogna utilizzare la seguente URL:
https://<url base>/rest_api/tagtreesEsempio:
https://<url base>/rest_api/tagtrees?sanet3auth=12345
INPUT
Nessuno.
OUTPUT
Come risposta si riceverà il JSON standard Risposte con successo.
Il campo result della risposta contiene una lista di dizionari (chiave/valore) con gli attributi di tutti i tagtree selezionati.
Esempio:
{'elapsed_time': 0.002173900604248047, 'operation': u'fetch_all_tagtree', 'result': [{'name': u'geo2', 'path': u'geo2:', 'uuid': u'f364154bab32441094c4208f024f040a'}, {'name': u'111', 'path': u'111:', 'uuid': u'bc54391b09334acea89597d49056ad8a'}, {'name': u'geo', 'path': u'geo:', 'uuid': u'63e7a2b9b243409a97a231b1ae35a73f'}, {'name': u'prova_tagging', 'path': u'prova_tagging:', 'uuid': u'68d3e1a3f2554c02acd2e8247313546f'}, {'name': u'tagtree1', 'path': u'tagtree1:', 'uuid': u'326d13e3c51f41afae2c61f79012e59b'}, {'name': u'tree1', 'path': u'tree1:', 'uuid': u'd201a37ca9db4ca298d3a854f8ca1e78'}, {'name': u'tree12', 'path': u'tree12:', 'uuid': u'865b09a66a804098b003895307a87607'}, {'name': u'tree13', 'path': u'tree13:', 'uuid': u'9c3c3286493643bdb07ae2b1683640d1'}, {'name': u'tree1b', 'path': u'tree1b:', 'uuid': u'7111510021ea46a49823d05e038815c4'}, {'name': u'tree1c', 'path': u'tree1c:', 'uuid': u'0b626627b2744958bea22da7c29bef67'}, {'name': u'xxx', 'path': u'xxx:', 'uuid': u'6ebee2af0d8c4f968fb9f9edd68f76b4'}, {'name': u'yyy', 'path': u'yyy:', 'uuid': u'c4a9ee0c543f4a8894066eb2d61f7ee3'}, {'name': u'zzz', 'path': u'zzz:', 'uuid': u'fc1364a9c73d41059860661f8408f092'}, {'name': u'tag2', 'path': u'tag2:', 'uuid': u'ade885ce11144a419afe6bd1d38cd422'}]}
9.4.8.2. Elenco dei tag¶
DESCRIZIONE
Per avere l'elenco dei tagtree bisogna utilizzare la seguente URL:
https://<url base>/rest_api/tags
INPUT
Nessuno
OUTPUT
Come risposta si riceverà il JSON standard Risposte con successo.
Il campo result della risposta contiene una lista di dizionari (chiave/valore) con gli attributi di tutti i tag selezionati.
Esempio:
{'elapsed_time': 0.00951695442199707, 'operation': u'fetch_all_tag', 'result': [{'icon': None, 'mtime': 1500153752, 'name': u'Geografico', 'parent_id': None, 'path': u'geo:/Geografico', 'tree_id': u'63e7a2b9b243409a97a231b1ae35a73f', 'uuid': u'422ce2179631474eb34a27cff467102a'}]}
9.4.8.3. Ultimo valore dei datasource contenuti in un tag¶
DESCRIZIONE
Elabora tutti i datasource del tag (e sottotag) e restituisce l'ultimo valore registrato.
http://<hostname>/sanet/rest_api/tag/<uuid or path>/datasources/get_last_value?<params>Esempio:
http://<hostname>/sanet/rest_api/tag/422ce2179631474eb34a27cff467102a/datasources/get_last_value?sanet3auth=12345&sum_by=name
INPUT
Questi sono i parametri in Get:
tag (stringa)
UUID o PATH del tag da elaborare.
sum_by (stringa)
Indica se sommare i valori dei datasource elabrorati e in che modo.
I valori ammessi sono:
"by-name" : Somma i valori dei datasource raggruppando per nome del datasource
"no" : Restituisce informazioni sull'ultimo valore per tutti i datasource elaborati.
Facoltativo: Si
OUTPUT
Restituisce un messaggio nel formato:
{ 'elapsed_time': <tempo in secondi> , 'errors' : <numero di anomalie in fase di elaborazione> , 'data' : <dati della richiesta> }Il contentuto/formato del campo data dipende dal valore specificato dai parametri in input.
Quando sum_series valore "no", il campo data contiene un elenco di tuple:
<parent_id, parent_name, element_id, element_name, ds_uuid, ds_name, ds_path, value>Quando sum_series valore "by-name",il campo data contiene un elenco di tuple:
< datasource name , total >
Esempi
Esempio: Chiamata senza parametro sum_by
{'elapsed_time': 0.022342920303344727, 'errors': '9 datasources not loaded', 'operation': 'get_last_value', 'result': [(u'23ca1860edbd4711822edb319717c616', u'localhost', u'82fe0ef593ea46d39f912344868613b5', u'root', u'0a0685b44c154d998d23b4e387f717db', u'used', u'localhost:root;;storage;used', None), (u'23ca1860edbd4711822edb319717c616', u'localhost', u'82fe0ef593ea46d39f912344868613b5', u'root', u'f4d23572b18a446292eee43e240b69fd', u'installed', u'localhost:root;;storage;installed', None), (u'23ca1860edbd4711822edb319717c616', u'localhost', u'08fec5c2500c47d18e97eee7947a38e7', u'eth0', u'48d9aec8ec194cec9813e6c4502eda0a', u'out', u'localhost:eth0;;iface-traffic;out', None)]}Esempio: Chiamata senza parametro sum_by=name
{'elapsed_time': 0.027868032455444336, 'errors': '9 datasources not loaded', 'operation': 'get_last_value', 'result': [ (u'installed', 122341423131), (u'used', 12345345)]}
9.4.8.4. Valori mensili dell'anno precedente dei datasource contenuti in un tag¶
DESCRIZIONE
Elabora tutti i datasource del tag (e sottotag) e restituisce il valore registrato all'inizio di ogni mese dell'anno.
http://<hostname>/sanet/rest_api/tag/<uuid or path>/datasources/get_last_year_values?<params>Esempio:
http://<hostname>/sanet/rest_api/tag/geo:/Geografico/datasources/get_last_year_values?sanet3auth=12345 http://<hostname>/sanet/rest_api/tag/422ce2179631474eb34a27cff467102a/datasources/get_last_year_values?sanet3auth=12345
INPUT
Questi sono i parametri all'interno della URL:
<uuid or path> (stringa)
UUID o PATH del tag da elaborare.
Questi sono i parametri in GET:
valid_time_window (intero)
In presenza di valori nulli registrati, numero di secondi di tolleranza entro il quale cercare il prima volore valido. Se non vengono trovati valori non nulli all'interno del periodo di tolleranza, il valore registrato per quel meso sara' None.
OUTPUT
Restituisce un messaggio nel formato:
{ 'elapsed_time': <tempo in secondi> , 'errors' : <numero di anomalie in fase di elaborazione> , 'result' : <dati della richiesta> }Quando sum_series valore "no", il campo data contiene un elenco di tuple:
<date, parent_id, parent_name, element_id, element_name, ds_uuid, ds_name, value>
Esempi
{'elapsed_time': 0.014796972274780273, 'errors': '0 datasources not loaded', 'operation': 'get_last_year_values', 'result': [('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-01-01', 1451602800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-02-01', 1454281200.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-03-01', 1456786800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-04-01', 1459461600.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-05-01', 1462053600.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-06-01', 1464732000.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-07-01', 1467324000.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-08-01', 1470002400.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-09-01', 1472680800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-10-01', 1475272800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-11-01', 1477954800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'ccd306b551a94e9ca67673d7a96f89fb', 'in', 'localhost:eth0;;iface-traffic;in', '2016-12-01', 1480546800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-01-01', 1451602800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-02-01', 1454281200.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-03-01', 1456786800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-04-01', 1459461600.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-05-01', 1462053600.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-06-01', 1464732000.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-07-01', 1467324000.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-08-01', 1470002400.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-09-01', 1472680800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-10-01', 1475272800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-11-01', 1477954800.0, None), ('79b977c52f6e4c84aa496ba942ba70d8', 'localhost', 'ec6e4cb188b64ebcbce204d14380de4d', 'eth0', 'a66f9268b838471d98d5b579ad4f9c0c', 'out', 'localhost:eth0;;iface-traffic;out', '2016-12-01', 1480546800.0, None)]}
9.4.9. Allarmi¶
9.4.9.1. Allarmi in corso¶
DESCRIZIONE
Per avere l'elenco dei allarmi (corrispondenti a condition down) bisogna utilizzare la seguente URL:
https://<url base>/rest_api/alarm/current
INPUT
Sono previsti i seguenti parametri
priority_level (stringa)
Se specificato, vengono restituiti solo gli allarmi con priority che ricade nel range del priority_level indicato.
OUTPUT
Come risposta si riceverà il JSON standard Risposte con successo.
Il campo result della risposta contiene una lista di dizionari (chiave/valore) con gli attributi di tutti i allarmi selezionati.
{ "elapsed_time": <tempo di elaborazione>, "operation" : <nome dell'operazione richiesta sulla risorsa>, "result" : [ { ... }, { ... }, { ... }, { ... }, { ... }, ] }
- La struttura dati per ogni allarme contiene informazioni su:
elemento associato all'allarme.
la condition associata all'allarme.
la variazione di stato che ha generato l'allarme.
informazioni sui tag associati all'elemento e condition dell'allarme.
Esempo di dati di un singolo allarme:
{ "uuid" : "7eb499dd9fb54f0a87afd351d0c4ce56" *identificativo univoco dell'allarme* "ts" : 1511001368, *timestamp UTC**di generazione dell'allarme* "element": { "uuid" : "e173f52135b845a5bf1792e33ad508ac" *identificativo univoco dell'elemento associato all'allarme* "path" : "dm10lx03:rootfs", *identificativo univoco mnemonico dell'elemento associato all'allarme* "name" : "rootfs", *nome dell'elemento* "description": "Root FS", *descrizione**dell'elemento* "type" : 3, *tipo dell'elemento (1=nodo,2=interfaccia,3=storage,4=service,5=device)* "parent_id" : "a12937d61c874890914182b6d25ebbb8", *identificativo dell'elemento padre (l'uuid del nodo)* "parent_name": "dm10lx03", *identificativo univoco dell'elemento padre (il nome del nodo)* }, "condition": { "uuid" : "050db78a671e48358ca266a92e9c9682" *identificativo univoco della condition che ha generato l'allarme* "path" : "dm10lx03:rootfs;storage;storage;check-storageperc", *identificativo mnemonico* "name" : "check-storageperc", *nome della **condition* "description" : "Check occupazione filesystem root", *descrizione**della condition* "classification" : "system.storage.usage", *classificazione della **condition* "priority" : 60, *importanza/priorita' associata alla **condition* "priority_level" : "medium", *classe di importanza/priorita' associata alla **condition* "statuslastchange": 1511001368, *timestamp ***UTC**della *variazione di stato precedente della **condition* }, "result": { *risultati del check* "status" : 10, *stato della verifica della condition* "laststatus": 20, *stato precedente* }, "info": { *informazioni dell'elemento* "ip4s" : ['10.0.25.201'], }, "mail": { "subject": ".....", "body": "....." } "tags": [ *opt. **classificazioni/tag assegnati alla condizione o all'elemento associati all'allarme* "dmh:/DMH/Sistemi Critici/3.Labs" ], "cluster": { ***opt. *cluster al quale l'elemento e' associato* "name" : ['VMWare-Produzione'], }, "meta": { ****opt. *informazioni addizionali dell'elemento* "referenti" : [ *referenti associati all'elemento* 'Sergio Rizzi <sergio.rizzi@labs.it>', 'Tiziano Fogli <tiziano.fogli@labs.it>' ] }, }
9.4.10. Log¶
9.4.10.1. Elenco dei log¶
DESCRIZIONE
Per avere l'elenco dei tagtree bisogna utilizzare la seguente URL:
https://<url base>/rest_api/eventsEsempio:
https://<url base>/rest_api/events?sanet3auth=12345
INPUT
Accetta in input un numero arbitrario di filtri. Si rimanda alla sezione: Parametri per filtrare/ordinare/limitare.
OUTPUT
Come risposta si riceverà il JSON standard Risposte con successo.
Il campo result della risposta contiene una lista di dizionari (chiave/valore) con gli attributi di tutti gli eventi selezionati.