Potřebujete někdy analyzovat provoz požadavků ORDA mezi klientem a serverem 4D? Někdy může chvíli trvat, než obdržíte odpověď od serveru, což vás může přivést k zamyšlení, zda je to způsobeno síťovým provozem nebo neoptimalizovaným požadavkem, který jste napsali! Naštěstí 4D v17 R6 umožňuje zjistit pravděpodobný důvod (důvody) tohoto zpoždění pomocí nových metod ORDA, které jsou k dispozici na serveru 4D v17 R6. ds objektu. Nejsou to jen ladicí funkce, ale umožňují také optimalizovat kód ORDA s lepším porozuměním odesílaným požadavkům.
Povolení protokolování požadavků ORDA
Na adrese startRequestLog() member method je velmi flexibilní, protože může zaznamenávat požadavky ORDA buď do souboru, nebo do paměti.
protokolovat do souboru
Chcete-li protokolovat do souboru, stačí zavolat startRequestLog() s File objektem, který udává, kam budou vaše požadavky ORDA protokolovány. V příkladu níže spustíme dotaz na neindexované pole, což může nějakou dobu trvat. Díky této nové funkci můžeme zkontrolovat dobu trvání našich požadavků:
C_OBJECT($employees;$file)
$file :=File("/PACKAGE/Logs/ORDARequests.txt")
$file .delete()
ds .startRequestLog($file)
$employees :=ds.Employee.query("jméno = :1"; "abcd") //firstname is not indexed
ds .
stopRequestLog()
Každý požadavek je zaznamenán jako reprezentace objektu JSON.
Zde je uveden obsah souboru ORDARequests.txt:
[
.
{
..
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
...
}
]
záznam do paměti
Každý požadavek může být zaznamenán jako objekt v kolekci, kterou lze načíst pomocí funkce getRequestLog() metodu member.
Protože vrací kolekci, můžete použít všechny dostupné metody kolekce.
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 ("Nejdelší požadavek trval: "+String($log.max("trvání"))+" ms")
ds .
stopRequestLog()
vypnout protokolování požadavků ORDA
Chcete-li ukončit protokolování požadavků ORDA, stačí zavolat příkaz stopRequestLog() member metodu, jak je uvedeno v příkladech výše.