Optimisez votre code ORDA grâce à la journalisation des requêtes

Traduit automatiquement de Deepl

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.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.