Möchten Sie den Datenverkehr Ihrer ORDA-Anfragen zwischen einem Client und dem 4D Server analysieren? Manchmal kann es eine Weile dauern, bis Sie eine Antwort vom Server erhalten, und Sie fragen sich, ob das am Netzwerkverkehr liegt oder an einer nicht optimierten Anfrage, die Sie geschrieben haben! Glücklicherweise ermöglicht es 4D v17 R6, die wahrscheinlichen Gründe für diese Latenz mit den neuen ORDA Methoden zu ermitteln, die für das ds Objekt. Es handelt sich dabei nicht nur um Debugging-Funktionen, sondern Sie können auch Ihren ORDA-Code mit einem besseren Verständnis der gesendeten Anfragen optimieren.
Aktivieren Sie die Protokollierung von ORDA-Anfragen
Die startRequestLog() Member-Methode ist sehr flexibel, da sie ORDA-Anfragen entweder in einer Datei oder im Speicher protokollieren kann.
Protokollierung in einer Datei
Um in eine Datei zu protokollieren, rufen Sie einfach startRequestLog() mit einem File Objekt auf, das angibt, wo Ihre ORDA-Anfragen protokolliert werden sollen. Im folgenden Beispiel führen wir eine Abfrage über ein nicht indiziertes Feld durch, was einige Zeit dauern kann. Dank dieser neuen Funktion können wir die Dauer unserer Abfragen überprüfen:
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()
Jede Anfrage wird als JSON-Darstellung eines Objekts protokolliert.
Hier ist der Inhalt der Datei ORDARequests.txt:
[
.
{
..
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
...
}
]
log to memory
Jede Anfrage kann als Objekt in einer Sammlung protokolliert werden, die mit der getRequestLog() member-Methode abgerufen werden kann.
Da diese Funktion eine Sammlung zurückgibt, können Sie alle verfügbaren Sammlungsmethoden verwenden.
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 ("Die längste Anfrage dauerte: "+String($log.max("Dauer"))+" ms")
ds .
stopRequestLog()
Deaktivieren der Protokollierung von ORDA-Anfragen
Um die Protokollierung von ORDA-Anfragen zu beenden, rufen Sie einfach die stopRequestLog() member-Methode auf, wie in den obigen Beispielen gezeigt.