.. _sanet_rest_api:
####################################################################################
Sanet Rest Api
####################################################################################
.. contents:: Contenuti
:depth: 4
************************************************************************
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**.
************************************************************************
Installazione
************************************************************************
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')
.. _rest-api-settings:
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.
************************************************************************
API REST
************************************************************************
Formato delle richieste
========================================================================
URL Base
------------------------------------------------------------------------
La URL base per le richieste e':
::
https://........./rest_api/ [ ? ]
Passaggio parametri (GET)
------------------------------------------------------------------------
Le richieste possono prevedere un numero variabili di parametri passati in GET nella URL della richiesta.
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 |
+------------------+--------------+----------------------------------------------------------------------------------------------------------------------------+
| tenant | | 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. |
+------------------+--------------+----------------------------------------------------------------------------------------------------------------------------+
Formato delle risposte
========================================================================
.. _json_standard:
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": ,
"operation" : ,
"result" :
}
In base al tipo di interrogazione effettuata possono essere aggiunti più o meno campi.
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.
************************************************************************
ELENCO API DISPONIBILI
************************************************************************
Nodi
========================================================================
Lista dei nodi
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutti i nodi, la url da interrogare è la seguente:
::
http:///sanet/rest_api/nodes
Esempio:
::
http:///sanet/rest_api/nodes?sanet3auth=12345
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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'}]}
Info su un nodo
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere infomazioni su un nodo specifico, la url da interrogare è una delle seguenti:
::
https:///rest_api/node/
Esempio:
::
https:///rest_api/node/localhost?sanet3auth=12345
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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'}}
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:///rest_api/node//get_primary_condition_status_change[?ts_start=&ts_end=]
Esempio
::
https:///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 :ref:`json_standard` 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:///rest_api/node/localhost/get_primary_condition_status_change?sanet3auth=12345
https:///rest_api/node/localhost/get_primary_condition_status_change?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936
https:///rest_api/node/9401493b9e5844e0b0a4baf757fa5404/get_primary_condition_status_change?sanet3auth=12345
https:///rest_api/node/9401493b9e5844e0b0a4baf757fa5404/get_primary_condition_status_change?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936
Output:
::
{'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)]}
Interfacce
========================================================================
Lista interfacce
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutte le interfacce, la url da interrogare è la seguente:
::
https:///rest_api/interfaces
Esempio:
::
https:///rest_api/interfaces?sanet3auth=12345
**INPUT**
TODO
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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)+'$')"}]}
Info interfaccia
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere infomazioni su una interfaccia specifica, la url da interrogare è una delle seguenti:
::
https:///rest_api/interface/
https:///rest_api/interface//rest_api/interface/08fec5c2500c47d18e97eee7947a38e7/get_interface_info
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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)+'$')"}}
Traffico interfaccia
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere informazioni sul traffico di un'interfaccia specifica, la url da chiamare è la seguente:
::
http:///rest_api/interface//get_traffic[?ts_start=&ts_end=]
Esempio:
::
http:///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 :ref:`json_standard` 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:///rest_api/interface/foo:eth0/get_traffic?sanet3auth=12345
https:///rest_api/interface/foo:eth0/get_traffic?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936
https:///rest_api/interface/1b85b8c803c74d699adcce914af7d0c9/get_traffic?sanet3auth=12345
https:///rest_api/interface/1b85b8c803c74d699adcce914af7d0c9/get_traffic?sanet3auth=12345&ts_start=1473142136&ts_end=1473170936
Esempio 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}}
Storage
========================================================================
Lista storage
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutti gli storage, la url da interrogare è la seguente:
::
https:///rest_api/storages
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` con una lista di dizionari, contenenti informazioni sugli storage filtrati, nel campo **result**.
Servizi
========================================================================
Lista servizi
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutti i servizi, la url da interrogare è la seguente:
::
https:///rest_api/services
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` con una lista di dizionari, contenenti informazioni sui servizi filtrati, nel campo **result**.
Device
========================================================================
Lista device
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutti i device, la url da interrogare è la seguente:
::
https:///rest_api/devices
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` con una lista di dizionari, contenenti informazioni sui device filtrati, nel campo **result**.
Condition
========================================================================
Lista condition
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere una lista di tutte le condition, la url da interrogare è la seguente:
::
https:///rest_api/conditions
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` con una lista di dizionari, contenenti informazioni sulle condition filtrate, nel campo **result**.
::
{"elapsed_time": 0.0059909820556640625, "operation": "fetch_all_condition", "result": [{"statuschange_action": null, "status": 10, "uuid": "333095c2f8884b45a1dc0af1e6985bca", "title": "Controllo passivo", "uncheckable_fallback": null, "expr": "$var == 1", "datagroup_id": "a84d8b2b82914a538bc495ce2cdd7d9a", "primary": false, "max_tries": 1, "priority": 0, "statuslast": 40, "tries": 1, "statuslastchange": 1500138760, "mtime": 1500138438, "lastdone": 1500138760, "path": "localhost;;dgpassive;check", "dependson_id": null, "name": "check"}, {"statuschange_action": null, "status": 10, "uuid": "5ad5e373451d4ea5b31c38a940e78ac2", "title": "Simple condition", "uncheckable_fallback": null, "expr": "1.3.6.1.2.1.1.6.0@ == 'this is a test'", "datagroup_id": "a43d7d53c36149f09809cc32b31f6771", "primary": false, "max_tries": 1, "priority": 0, "statuslast": 10, "tries": 0, "statuslastchange": 1500139617, "mtime": 1500139613, "lastdone": 1500139617, "path": "localhost;;test-trap-regexp;check", "dependson_id": null, "name": "check"}, {"statuschange_action": null, "status": 10, "uuid": "97f2f82c827d44868d08794baf5d3e65", "title": "Simple condition", "uncheckable_fallback": null, "expr": "1.3.6.1.2.1.1.6.0@ == 'this is a test'", "datagroup_id": "ab43c217e32d49068d4aa55c5c262035", "primary": false, "max_tries": 1, "priority": 0, "statuslast": 10, "tries": 0, "statuslastchange": 1500139617, "mtime": 1500139613, "lastdone": 1500139617, "path": "localhost;;test-trap;check", "dependson_id": null, "name": "check"}]}
Datasource
========================================================================
Valore massimo datasource
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere il valore massimo di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
::
https:///rest_api/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 (:ref:`entables-matches-times`), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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*.
Valore medio datasource
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere il valore medio di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
::
https:///rest_api/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 (:ref:`entables-matches-times`), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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*.
Valore minimo datasource
------------------------------------------------------------------------
**DESCRIZIONE**
Per ricevere il valore minimo di uno specifico datasource in un arco temporale, la url da interrogare è la seguente:
::
https:///rest_api/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 (:ref:`entables-matches-times`), fasce temporali all'interno dell'intervallo [ts_start, ts_end].
**OUTPUT**
Come risposta si riceverà il json standard :ref:`json_standard` 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*.
Tag
========================================================================
Elenco dei tagtree
------------------------------------------------------------------------
**DESCRIZIONE**
Per avere l'elenco dei *tagtree* bisogna utilizzare la seguente URL:
::
https:///rest_api/tagtrees
Esempio:
::
https:///rest_api/tagtrees?sanet3auth=12345
**INPUT**
Nessuno.
**OUTPUT**
Come risposta si riceverà il JSON standard :ref:`json_standard`.
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'}]}
Elenco dei tag
------------------------------------------------------------------------
**DESCRIZIONE**
Per avere l'elenco dei *tagtree* bisogna utilizzare la seguente URL:
::
https:///rest_api/tags
**INPUT**
Nessuno
**OUTPUT**
Come risposta si riceverà il JSON standard :ref:`json_standard`.
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'}]}
Ultimo valore dei datasource contenuti in un tag
------------------------------------------------------------------------
**DESCRIZIONE**
Elabora tutti i datasource del tag (e sottotag) e restituisce l'ultimo valore registrato.
::
http:///sanet/rest_api/tag//datasources/get_last_value?
Esempio:
::
http:///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':
,
'errors' :
,
'data' :
}
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:
::
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)]}
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:///sanet/rest_api/tag//datasources/get_last_year_values?
Esempio:
::
http:///sanet/rest_api/tag/geo:/Geografico/datasources/get_last_year_values?sanet3auth=12345
http:///sanet/rest_api/tag/422ce2179631474eb34a27cff467102a/datasources/get_last_year_values?sanet3auth=12345
**INPUT**
Questi sono i parametri all'interno della URL:
* (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':
,
'errors' :
,
'result' :
}
Quando *sum_series* valore *"no"*, il campo *data* contiene un elenco di tuple:
::
**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)]}
Allarmi
========================================================================
Allarmi in corso
------------------------------------------------------------------------
**DESCRIZIONE**
Per avere l'elenco dei allarmi (corrispondenti a condition down) bisogna utilizzare la seguente URL:
::
https:///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 :ref:`json_standard`.
Il campo *result* della risposta contiene una lista di dizionari (chiave/valore) con gli attributi di tutti i *allarmi* selezionati.
::
{
"elapsed_time": ,
"operation" : ,
"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 ',
'Tiziano Fogli '
]
},
}