Projet

Général

Profil

Development #55414

possibilité de notifier les erreurs (de record_error)

Ajouté par Frédéric Péters il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 juillet 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui on on notify_of_exception qui entraine un enregistrement de l'erreur mais on n'a pas tout le temps une exception sous la main et on se trouve à en créer de fausses juste pour être notifiés, façon :

                try:
                    raise Exception(summary)
                except Exception:
                    exc_info = sys.exc_info()

            if self.notify_on_errors or self.record_on_errors:
                get_publisher().notify_of_exception(
                    exc_info, context='[WSCALL]', notify=self.notify_on_errors, record=self.record_on_errors
                )

Je pense qu'on pourrait avoir un paramètre notify sur la méthode record(), pour permettre d'enregistrer une erreur, la notifier, sans que ça n'ait à être une exception.

Aussi, que le comportement ici soit de faire la notification uniquement sur la première occurence de l'erreur.


Fichiers

Révisions associées

Révision 83146482 (diff)
Ajouté par Lauréline Guérin il y a presque 3 ans

misc: use only record_error to record and notify (#55414)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Description mis à jour (diff)
#2

Mis à jour par Lauréline Guérin il y a presque 3 ans

  • Assigné à mis à Lauréline Guérin
#3

Mis à jour par Lauréline Guérin il y a presque 3 ans

proposition:

notify_of_exception, record_error, log_internal_error => ces 3 méthodes sont mergées, il ne reste plus que record_error, qui peut prendre une exception, ou pas.

au niveau des params: record=True, notify=False => pour que les record_error qui existaient déjà aient le même comportement (ils ne faisaient que créer une LoggedError)

tous les notify_of_exception ont été transformés en record_error (avec notify=True lorsque le param n'était pas précisé)

faire la notification uniquement sur la première occurence de l'erreur

J'ai pris ce comportement tout le temps: si record_error génère un record mais que ce n'est pas la première occurence, alors pas de notif.
(Si pas de record, on fait la notif à chaque appel) - évidemment ça dépend aussi du param notify

J'ai repris les endroits où on fabriquait une Exception pour faire un notify_of_exception avec un message custom.

Pour les cas où on n'a pas d'exception, on génère quand même une traceback pour display dans la LoggedError. Ce n'est exactement le même rendu que lorsqu'il y a une exception: on n'a pas les locals.
Je n'ai pas trouvé comment faire pour avoir une tb comme sys.exc_info la génère, sans exception: sys.exc_info produit un TracebackType, traceback.extract_stack renvoie une StackSummary; StackSummary ne passe pas dans la méthode _generate_plaintext_error
On peut s'en sortir en jetant une Exception, mais le but de ce ticket était d'arrêter cette pratique.

Note: pour le cas où on récupère la traceback (parce que pas d'exception sous la main), j'ai volontairement enlevé le premier élément de la stack qui n'apporte rien:

            stack_summary = traceback.extract_stack()  #  <= premier élément == cette ligne
            stack_summary.reverse()
            traceback.print_list(stack_summary[1:], file=error_file)

#4

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée
#5

Mis à jour par Lauréline Guérin il y a presque 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 831464827821178ecd25684e2e0dbde75dca5c90
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Tue Jul 6 16:57:04 2021 +0200

    misc: use only record_error to record and notify (#55414)
#6

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF