Frappe Framework
Profilage et supervision
On enregistre en Administrator, on reproduit le geste, on arrête. La durée globale est gonflée par l’outil. Le temps SQL, lui, reste proche du réel.
Recorder
Recorder capture les requêtes et les tâches de fond, avec les SQL et les piles d’appels. Cas cité : un DocType lent à l’enregistrement.
- Administrator, AwesomeBar, Recorder, Start.
- Choisir les options d’enregistrement. Elles ne sont détaillées que sur une image.
- Faire les actions, de préférence dans un autre onglet.
- Revenir et arrêter.
La liste se trie pour trouver les requêtes lourdes. Une ligne ouvre : path (chemin ou nom de job, par exemple /app), cmd (chemin pointé, vide pour un job), time, duration, nombre de requêtes, temps passé en SQL, en-têtes, Form Dict, table SQL. En-têtes et Form Dict sont vides pour un job. Une requête dépliée montre sa durée, la pile et le EXPLAIN.
La durée globale n’est pas représentative : la capture ajoute un coût. Le temps des requêtes reste proche du réel.
Menu (trois points), Export télécharge un JSON. Import le rouvre sur un autre site.
cProfile, le profileur Python intégré, s’active au démarrage. Il alourdit encore plus. Le couper tout de suite après le diagnostic. On peut aussi filtrer requêtes et jobs pour ne pas gêner la production. Le texte publié écrit « immdiately ».
bench execute
bench --site [sitename] --profile execute profile un chemin pointé, par exemple erpnext.projects.doctype.task.task.set_tasks_as_overdue. Sans --profile, la même commande lance la méthode. L’exemple frappe.db.get_database_size affiche 6784. Le détail de la commande est dans bench execute.
Moniteur
"monitor": 1 dans la config du site. Les données passent par le cache Redis, puis une tâche frappe.monitor.flush les verse dans logs/monitor.json.log.
Une requête d’exemple : duration 807142, GET /api/method/frappe.realtime.get_user_info, status 500, response_length 9687, site frappe.local, transaction_type request. Un job : duration 1364, method frappe.ping, scheduled false, wait 90204, transaction_type job. L’unité de ces nombres n’est pas dite.
Files RQ
RQ exécute les longues tâches. RQ Worker, DocType virtuel, liste les workers du site : nom, temps, réussites, échecs, statut. Le texte publié écrit « contrains ». RQ Job liste les jobs, filtrables par file et statut. Le formulaire montre le détail. Les captures sont sous /private/files/.
Processus bloqué et santé
kill -SIGUSR1 <PID> imprime la pile de tous les fils sur stderr. Fichiers habituels : bench/logs/web.error.log, worker.error.log, schedule.error.log.
System Health Report, dans l’AwesomeBar, couvre au moins tâches de fond, planificateur, base, cache, e-mails, journaux d’erreur, stockage, sauvegardes et utilisateurs.
Point d’attention
La durée Recorder n’est pas celle de la production. cProfile se coupe dès que le diagnostic est fini.
