Questa storia inizia più o meno così con una innocente telefonata (ndr: i nomi sono stati cambiati perchè volevo una scusa per scrivere che i nomi sono stati cambiati):
> Ciao Angelo, mi serve un UPS con scheda di rete, un 1500VA va bene, cosa mi proponi?
< Uhm fammi vedere, APC come al solito immagino, per quando ti serve?
> Ieri! [...]
< Ok, ok [...], c'è questo disponibile, linea Smart-UPS, prezzo x
> Lo prendo! Fattura a 360 giorni come al solito [:-p] grazie
Ora cosa poteva andare storto con un semplice UPS?
Ecco un’immagine, anzi l’immagine, che vale più di mille parole, più o meno tutte di taglio imprecativo e colorito
Il problema
Il problema, o almeno l’origine del problema, sono senz’altro io…
Se penso ad un UPS con scheda di rete do per scontato che abbia un’interfaccia web e supporti SNMP.
SBAGLIATO!
APC invece ha pensato bene di, diciamo così, dare un’opzione in più ai suoi clienti: una piattaforma Cloud, chiamata SmartConnect, dove il mio nuovo e fiammante UPS si può registrare e notificare eventi con un deploy praticamente automatico a prova di Zia Nuccia.
Ora tutto ciò è senz’altro un plus per Zia Nuccia, per tutti gli altri invece il simbolino nell’immagine sopra dovrebbe un po’ preoccuparvi.
In pratica zero accesso locale in http/ssh/telnet e no supporto SNMP.
Immagino che la scelta sia allora squisitamente commerciale, un modo per vincolarti all’onnipresente (sigh) modello “as a service” (già solo questo meriterebbe un approfondimento a parte) e vado alla ricerca delle integrazioni supportate su SmartConnect: solo notifiche email, Slack e Teams.
Di un semplice ed efficiente servizio di API per ora nessuna traccia.
La soluzione
La soluzione, come spesso accade, è arrangiarsi con quello che sai e quello che hai: un sito web e i DevTools del browser.
Lasciando per il momento da parte il processo di login che mi ha fatto penare non poco, scopro che una volta autenticato il sito usa degli endpoint REST per recuperare ed aggiornare lo stato del mio UPS:
-
I dati di base e stato di tutti i dispositivi registrati
/api/v1/gateways
-
I dati di base e stato del singolo dispositivo
/api/v1/gateways/<gateway_id>
-
Stato dettagliato del singolo dispositivo
/api/v1/gateways/<gateway_id>?collection=input,output,battery,network,main_outlet,switched_outlets
-
Una sorta di dizionario dei possibili stati ed eventi
/api/v1/dictionaries/en
Ognuno di essi restituisce i relativi dati in formato JSON, quindi dai, con la giusta pazienza ed approfittando della calma lavorativa che c’è ad Agosto ce la posso fare!
APC-ScrapConnect
APC-ScrapConnect è il nome che ho dato ad un piccolo script scritto per gestire il login e recuperare i dati.
Il nome mi è venuto spontaneo pensando allo scraping che effettivamente fa per riuscire a fare il login e quanto questo intero processo sia stato una vera “cr*p” da superare.
Dall’URL iniziale all’effettivo login tocca passare attraverso tipo 7 diverse chiamate https ognuna da parsare per cookie e redirect impostati via javascript o per token da usare nella chiamata successiva.
Ma ovviamente questo interessa più me che te, quindi ecco come utilizzarlo direttamente dal manifest
|
|
Ed ecco il link GitHub allo script completo per iniziare ad utilizzarlo
Non finisce qui
Forse avrai visto che è presente anche l’opzione discovery che ben si presta per essere integrata con Zabbix, se ti interessa continua a seguirci, cercherò di pubblicare anche un template apposito.