/
Logging via IndexedDB

Logging via IndexedDB

IndexedDB è un database incorporato in un browser, molto più potente di localStorage.

  • Memorizza quasi ogni tipo di valore per chiavi, con tipi di chiavi multipli.

  • Supporta transazioni affidabili.

  • Supporta query utilizzando chiavi primarie ed indici.

  • Può memorizzare volumi di dati molto più grandi rispetto a localStorage.

  • Non è dipendente da politiche di sicurezza legata al filesystem del sistema operativo o da eventuali azioni restrittive di un software antivirus.

Questa potenza è solitamente eccessiva per le applicazioni client-server tradizionali ma nel caso di utilizzo di WebRTC è risultato la scelta ideale per memorizzare tutti i log dell’applicativo AgentDesktop/CTToolbar7.

In AgentDesktop è stata implementata una nuova libreria javascript che consente di loggare su IndexedDB sia i log dell’applicativo toolbar, i log delle integrazioni come i Widget ed infine i log della libreria SIP.js che implementa WebRTC.

E' possibile utilizzare questa libreria per andare ad implementare nella propria applicazione le funzionalità di log. La libreria è liberamente caricabile dal seguente indirizzo:

<script type="text/javascript" src="/AD/js/AD_INDEXED_DB.js"

Creazione di una nuova istanza/Apertura di una istanza già esistente

Viene creata una nuova istanza della classe AD_INDEXED_DB.

let LOGDB = new AD_INDEXED_DB();

Si inizializza correttamente la istanza andando a specificare il nome del datanase e la tabella che si vuole creare.

LOGDB.Init("AD_LOG", "toolbar").then( () => { // DB successfully opened });

Se non esistente verrà creato il database denominato “AD_LOG” contenente la tabella “toolbar”.

Utilizzando il debugger del browser si potrà andare a verificare la corretta creazione e strutturazione del database.

image-20240318-081842.png
Il dabase IndexedDB visto dallo strumento di debugging di Chrome

Strutturazione dei dati

La tabella appena creata avrà il compito di contenere tutte le loggate. Ciascun record rappresenta una singola loggata che non è altro che un oggetto JSON con la seguente strutturazione:

  • ts: il timestamp in formato Epoch, automaticamente generato quando viene invocata la API di logging

  • module: il nome del modulo che ha originato la loggata

  • text: il testo della loggata.

Ai fini di permettere ricerche, cancellazioni ed estrazioni più rapide i campi ts e module vengono automaticamente indicizzati.

API disponibili

addData(<module_name>, <text>)

Viene aggiunta una loggata all’interno della tabella specificata nel metodo “Init”.

getSize()

Viene restituita la dimensione stimata di tutto il database.

getCount()

Viene restituito il numero di record presenti nella tabella.

clearTable()

Viene svuotata completamente la tabella predefinita da tutto il suo contenuto, compresi gli indici. La tabella non verrà rimossa dal database.

readAllData()

Vengono restituiti tutti i record contenuti nella tabella nel formato Array. Ogni item dell’array rappresenta una loggata.

Storicizzazione dei dati

Al fine di limitare la dimensione del database i log verranno storicizzati per un numero massimo di giorni. Il valore predefinito della libreria è 20 giorni.

E' possibile modificare il valore di storicizzazione mediante la API setRetentionDays

Al modificare del valore di retention verrà eseguito un controllo sulla tabella al fine di eliminare i vecchi record. Il controllo è eseguito andando a calcolare in primis la data tra il primo record (più vecchio) e l’ultimo record (più recente). Se la differenza in giorni supera il valore di retention allora verranno progressivamente cancellati i record più vecchi.

API di utilità generale

purgeOldRecords()

Forza il controllo sulla storicizzazione dei log andando eventualmente a cancellare i record con timeStamp più vecchio del numero massimo di giorni impostato.

getFirstRecord()

Restituisce il primo record (loggata più vecchia) della tabella.

getLastRecord()

Restituisce l’ultimo record (loggata più recente) della tabella.

Viewer/Pagina di utilità

In AgentDesktop è stata resa disponibile una single page di supporto che consente di aprire e visualizzare il database dei LOG.

La pagina è liberamente utilizzabile all’indirizzo: /AD/AD_IndexedDB.html

 

image-20240318-100003.png