Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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 per l'affidabilità.

  • Supporta query dell'intervallo delle chiavi, 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 AD_LOGDB = new AD_INDEXED_DB();

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

AD_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

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>)
AD_LOGDB.addData("SINGLE SIGN ON", "User logged in successfully");

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

getSize()
AD_LOGDB.getSize().then( (size) => { } );

Viene restituita la dimensione stimata di tutto il database.

getCount()
AD_LOGDB.getCount().then( (count) => { } );

Viene restituito il numero di record presenti nella tabella.

clearTable()
 AD_LOGDB.clearTable().then( () => {
  // Table successfully cleared
 });

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

readAllData()
AD_LOGDB.readAllData().then( (data) => { } );

Vengono restituiti tutti i record contenuti nella tabella nel formato Array. Ogni record 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

AD_LOGDB.setRetentionDays(5);

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 verranno progressivamente cancellati i record più vecchi.

API di utilità generale

purgeOldRecords()

AD_LOGDB.purgeOldRecords();

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

getFirstRecord()

AD_LOGDB.getFirstRecord().then( (first) => { } );

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

getLastRecord()

AD_LOGDB.getLastRecord().then( (last) => { } );

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

  • No labels