Development #93410
Améliorer les traces d'exécution
0%
Description
C'est assez pénible de faire des tests sur son instance locale car les traces d'exécution ne sont pas affichées dans le navigateur en cas de 500, il faut aller voir dans la console et ce qu'on y trouve est très long avec les lignes triées par « most recent call first », ce qui fait qu'il faut scroller longtemps et souvent on rate le début de la trace si plusieurs se sont enchaînées.
Le code qui se charge du rendu de la trace date de 2009 (méthode _format_traceback
dans wcs/qommon/publisher.py).
Je pense qu'on pourrait essayer de déléguer tout le rendu à Django, ça ferait moins de code à maintenir, un rendu homogène avec les autres briques, et les personnalisations jugées utiles pourraient être conservées (https://docs.djangoproject.com/en/5.0/howto/error-reporting/#django.views.debug.ExceptionReporter).
Sans présumer de ce qui est jugé utile dans le rendu actuel, je note déjà qu'avec le rendu Django de base on perdrait le détail des variables dans le rendu texte (cette partie est présente seulement dans le rendu HTML), et que le « most recent call last » qu'il est important d'avoir en console est à l'inverse moins pratique par mail.
En tout cas, l'idée est lancée (peut-être un bon point de discussion à avoir à l'EO camp ?)
Files
History
Updated by Frédéric Péters 3 months ago
C'est assez pénible de faire des tests sur son instance locale car les traces d'exécution ne sont pas affichées dans le navigateur en cas de 500
→ /backoffice/settings/debug_options et cocher "Activer le mode de debug" et ça donne des traces affichées dans le navigateur.
Updated by Frédéric Péters 3 months ago
- File Capture d’écran du 2024-07-23 07-24-46.png Capture d’écran du 2024-07-23 07-24-46.png added
- File Capture d’écran du 2024-07-23 07-24-35.png Capture d’écran du 2024-07-23 07-24-35.png added
À titre personnel je trouve bien plus pratique le rendu actuel dans w.c.s., qui me fournit directement l'information utile, vs le rendu django, qui commence par un écran de contexte pas utile, puis une trace "most recent call last" qui oblige à scroller de manière précise pour arriver en bas de celle-ci (puisqu'ensuite la page continue avec la partie "request information"), et où ensuite il faut cliquer pour voir les variables locales.
Sans doute si on arrivait à quelque chose de plus utile (à mes yeux) côté django je trouverais une utilité à avoir pareil.
Sur "ça ferait moins de code à maintenir" le code de mise en forme des traces est exploité pour les "logged errors", serait de toute façon à conserver.
Je serais pour fermer ce ticket et plutôt améliorer les choses ailleurs. (surtout que les améliorations générales réalisées bénéficieront aussi aux vues "pure django" dans wcs)
Mais, si certaines personnes veulent les pages django, je peux faire ce patch :
--- a/wcs/compat.py +++ b/wcs/compat.py @@ -78,6 +78,8 @@ class TemplateWithFallbackView(TemplateView): # so it can be caught/stopped at when running tests. if settings.DEBUG_PROPAGATE_EXCEPTIONS: raise + if settings.USE_DJANGO_EXCEPTION_PAGES: + raise context = {'body': get_publisher().finish_failed_request()} self.quixote_response = get_request().response @@ -215,6 +217,8 @@ class CompatWcsPublisher(WcsPublisher): # so it can be caught/stopped at when running tests. if settings.DEBUG_PROPAGATE_EXCEPTIONS: raise + if settings.USE_DJANGO_EXCEPTION_PAGES: + raise output = self.finish_failed_request() response = request.response
Updated by Valentin Deniaud 3 months ago
- Status changed from Nouveau to Rejeté
Frédéric Péters a écrit :
→ /backoffice/settings/debug_options et cocher "Activer le mode de debug" et ça donne des traces affichées dans le navigateur.
Super je ne connaissais pas, ça résout pas mal le problème effectivement (idéalement ça serait posé par devinst, ou alors se trouver activé automatiquement dès lors que DEBUG=True (j'ai créé ce ticket après avoir convenu avec Manu du constat de pénibilité, on est sûrement une majorité à ne pas connaître l'option)).
Frédéric Péters a écrit :
À titre personnel je trouve bien plus pratique le rendu actuel dans w.c.s., qui me fournit directement l'information utile, vs le rendu django, qui commence par un écran de contexte pas utile, puis une trace "most recent call last" qui oblige à scroller de manière précise pour arriver en bas de celle-ci (puisqu'ensuite la page continue avec la partie "request information"), et où ensuite il faut cliquer pour voir les variables locales.
Oui ce qui est gênant dans un terminal est inversement pratique par mail/dans un navigateur.
Sans doute si on arrivait à quelque chose de plus utile (à mes yeux) côté django je trouverais une utilité à avoir pareil.
Oui on pourrait certainement avoir un rendu custom dans hobo et l'utiliser partout, mais il y a sûrement beaucoup de travail plus urgent qui passerait avant ça.
Sur "ça ferait moins de code à maintenir" le code de mise en forme des traces est exploité pour les "logged errors", serait de toute façon à conserver.
(rien n'empêcherait d'appeler le rendu Django à cet endroit là aussi)
Je serais pour fermer ce ticket
Yep
Mais, si certaines personnes veulent les pages django, je peux faire ce patch :
Pas la peine puisque tu donnes déjà la solution, mettre DEBUG_PROPAGATE_EXCEPTIONS = True
dans ses settings.
Updated by Gael Pasgrimaud 3 months ago
Frédéric Péters a écrit :
À titre personnel je trouve bien plus pratique le rendu actuel dans w.c.s., qui me fournit directement l'information utile, vs le rendu django, qui commence par un écran de contexte pas utile, puis une trace "most recent call last" qui oblige à scroller de manière précise pour arriver en bas de celle-ci (puisqu'ensuite la page continue avec la partie "request information"), et où ensuite il faut cliquer pour voir les variables locales.
Sans doute si on arrivait à quelque chose de plus utile (à mes yeux) côté django je trouverais une utilité à avoir pareil.
Il y a moins moche (mais avec moins d'infos) dans django_extensions: https://django-extensions.readthedocs.io/en/latest/runserver_plus.html
La doc vends du rêve avec un debuger ajax etc. mais après avoir testé rapidement je n'ai pas vu les boutons dont il est question