Projet

Général

Profil

Bug #20979

GRECO: ne pas faire de logger.exception() sur une erreur suds

Ajouté par Thomas Noël il y a environ 6 ans. Mis à jour il y a environ 6 ans.

Statut:
Nouveau
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
04 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:

Description

On reçoit ce genre de mail en cas de panne SOAP :

Date: Thu, 04 Jan 2018 02:00:33 -0000
From: admin+gnm.recette.passerelle@entrouvert.com
To: admin+gnm.recette@entrouvert.com
Subject: [passerelle] ERROR (EXTERNAL IP): Error occurred while processing request

Error occurred while processing request
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/passerelle/utils/jsonresponse.py", line 117, in api
    resp = f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/passerelle/views.py", line 276, in perform
    return self.endpoint(request, **self.get_params(request, *args, **kwargs))
  File "/usr/lib/python2.7/dist-packages/passerelle/contrib/greco/models.py", line 220, in status
    'iddemande': iddemande,
  File "/usr/lib/python2.7/dist-packages/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "/usr/lib/python2.7/dist-packages/suds/client.py", line 602, in invoke
    result = self.send(soapenv)
  File "/usr/lib/python2.7/dist-packages/suds/client.py", line 647, in send
    result = self.succeeded(binding, reply.message)
  File "/usr/lib/python2.7/dist-packages/suds/client.py", line 684, in succeeded
    reply, result = binding.get_reply(self.method, reply)
  File "/usr/lib/python2.7/dist-packages/suds/bindings/binding.py", line 151, in get_reply
    self.detect_fault(soapbody)
  File "/usr/lib/python2.7/dist-packages/suds/bindings/binding.py", line 182, in detect_fault
    raise WebFault(p, fault)
WebFault: Server raised fault: 'Currently , Address endpoint : [ Name : grandlyon--greco-rec_APIproductionEndpoint_0 ] [
State : SUSPENDED ]'

parce que l'exception suds WebFault passe par :

            if (not isinstance(e, (Http404, PermissionDenied, ObjectDoesNotExist))
                    and getattr(e, 'log_error', True)):
                logger.exception("Error occurred while processing request", extra=extras)

dans passerelle/utils/jsonresponse.py

Bien que je sois peu à l'aise avec ce mécanisme, on pourrait peut-être monkeypatcher suds pour ajouter un WebFault.log_error = False ? Dans ce cas, l'exception sera quand même logguée comme un simple warning par passerelle, et c'est qui nous intéresse ici.

(à noter que ça a l'air totalement différent dans suds 0.7 dispo dans les backports...)

Historique

#1

Mis à jour par Thomas Noël il y a environ 6 ans

et je découvre #19536 à cette occasion :/

Formats disponibles : Atom PDF