Avez-vous déjà eu besoin d’analyser le trafic de vos requêtes ORDA entre un client et le serveur 4D ? Parfois, il peut s’écouler un certain temps avant de recevoir une réponse du serveur, ce qui peut vous amener à vous demander si c’est dû au trafic réseau ou à une requête non optimisée que vous avez écrite ! Heureusement, 4D v17 R6 permet de déterminer la ou les raisons probables de cette latence avec les nouvelles méthodes ORDA disponibles sur l’objet ds objet. Ce ne sont pas seulement des fonctions de débogage, elles vous permettent aussi d’optimiser votre code ORDA avec une meilleure compréhension des requêtes envoyées.
Activer la journalisation des demandes ORDA
La méthode membre startRequestLog() est très flexible puisqu’elle peut enregistrer les requêtes ORDA soit dans un fichier, soit en mémoire.
journalisation vers un fichier
Pour enregistrer dans un fichier, il suffit d’appeler startRequestLog() avec un objet File indiquant où vos requêtes ORDA seront enregistrées. Dans l’exemple ci-dessous, nous exécutons une requête sur un champ non-indexé qui peut prendre un certain temps. Grâce à cette nouvelle fonctionnalité, nous pouvons vérifier la durée de nos requêtes :
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()
Chaque requête est enregistrée sous la forme d’une représentation JSON d’un objet.
Voici le contenu du fichier ORDARequests.txt:
[
.
{
..
..
"startTime" : "2019-07-02T12:33:25.922Z",
"endTime" : "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
.
}
]
journal en mémoire
Chaque requête peut être enregistrée comme un objet dans une collection qui peut être récupérée en utilisant la méthode getRequestLog() membre.
Puisqu’elle renvoie une collection, vous pouvez utiliser toutes les méthodes de collection disponibles.
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 demande la plus longue a duré : "+String($log.max("duration"))+" ms")
ds .
stopRequestLog()
désactiver la journalisation des requêtes ORDA
Pour arrêter l’enregistrement des demandes ORDA, il suffit d’appeler la méthode membre stopRequestLog() comme indiqué dans les exemples ci-dessus.