Avete mai avuto bisogno di analizzare il traffico delle vostre richieste ORDA tra un client e il server 4D? A volte ci vuole un po’ di tempo per ricevere una risposta dal server, il che può farvi chiedere se è dovuto al traffico di rete o a una richiesta non ottimizzata che avete scritto! Fortunatamente, 4D v17 R6 consente di determinare la probabile ragione di questa latenza con i nuovi metodi ORDA disponibili sull’oggetto ds dell’oggetto. Non sono solo funzioni di debug, ma consentono anche di ottimizzare il codice ORDA con una migliore comprensione delle richieste inviate.
Abilitare la registrazione delle richieste ORDA
Il metodo startRequestLog() è un metodo membro molto flessibile, in quanto può registrare le richieste ORDA su un file o in memoria.
registrare in un file
Per registrare in un file, è sufficiente chiamare startRequestLog() con un oggetto File che indica dove verranno registrate le richieste ORDA. Nell’esempio che segue, viene eseguita una query su un campo non indicizzato, che potrebbe richiedere del tempo. Grazie a questa nuova funzionalità, possiamo controllare la durata delle nostre richieste:
C_OBJECT($employees;$file)
$file :=File("/PACKAGE/Logs/ORDARequests.txt")
$file .delete()
ds .startRequestLog($file)
$employees :=ds.Employee.query("firstname = :1"; "abcd") //firstname is not indexed
ds .
stopRequestLog()
Ogni richiesta viene registrata come rappresentazione JSON di un oggetto.
Ecco il contenuto del file ORDARequests.txt:
[
..
{
...
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
.
}
]
log in memoria
Ogni richiesta può essere registrata come oggetto in un insieme che può essere recuperato con il metodo getRequestLog() membro.
Poiché restituisce un insieme, è possibile utilizzare tutti i metodi di raccolta disponibili.
C_OBJECT($first;$e)
C_COLLECTION ($log)
ds .
startRequestLog(10) // Only the last 10 requests will be kept in memory
$first :=ds.Persons.all().first()
$e :=ds.Persons.query("name=:1"; "Brown")
$log :=ds.getRequestLog()
ALERT ("La richiesta più lunga è durata: "+String($log.max("durata"))+" ms")
ds .
stopRequestLog()
disabilitare la registrazione delle richieste ORDA
Per interrompere la registrazione delle richieste ORDA, è sufficiente richiamare il metodo stopRequestLog() come mostrato negli esempi precedenti.