Projet

Général

Profil

Development #10299

logger tous les input/output de python-requests

Ajouté par Josué Kouka il y a environ 8 ans. Mis à jour il y a presque 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Version cible:
-
Début:
15 mars 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers

0001-add-logger-for-every-requests-call-10299.patch (1,5 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 15 mars 2016 12:09
0001-add-logger-for-every-requests-call-10299.patch (16,3 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 16 mars 2016 14:36
0001-add-logger-for-every-requests-call-10299.patch (28,2 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 16 mars 2016 15:34
0001-add-logger-for-every-requests-call-10299.patch (30,3 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 25 mars 2016 18:05
0001-add-logger-for-every-requests-call-10299.patch (30,3 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 25 mars 2016 18:10
0001-add-logger-for-every-requests-call-10299.patch (30,4 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 29 mars 2016 11:25
0001-add-logger-for-every-requests-call-10299.patch (30,4 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 30 mars 2016 09:44
0001-add-logger-for-every-requests-call-10299.patch (32,5 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 01 avril 2016 17:44
0001-add-logger-for-every-requests-call-10299.patch (33 ko) 0001-add-logger-for-every-requests-call-10299.patch Josué Kouka, 01 avril 2016 18:53
0001-logging-add-missing-migrations-for-log_level-attribu.patch (10,5 ko) 0001-logging-add-missing-migrations-for-log_level-attribu.patch Serghei Mihai (congés, retour 15/05), 06 avril 2016 19:09

Révisions associées

Révision fd498cb6 (diff)
Ajouté par Josué Kouka il y a environ 8 ans

add logger to every requests call (#10299)

Révision cf64834e (diff)
Ajouté par Serghei Mihai (congés, retour 15/05) il y a environ 8 ans

logging: add missing migrations for 'log_level' attribute (#10299)

Historique

#1

Mis à jour par Josué Kouka il y a environ 8 ans

  • Statut changé de Nouveau à En cours
#2

Mis à jour par Josué Kouka il y a environ 8 ans

#3

Mis à jour par Josué Kouka il y a environ 8 ans

Pouvoir choisir de logger ou pas un connecteur ( checkbox infterface connecteur )

if connector.log == True:
  connector.requests = passerelle.utils.RequestSessionWrapper(connector.log)
else
   connector.requests = requests

#4

Mis à jour par Frédéric Péters il y a environ 8 ans

Dans mon idée, dans une classe de base des connecteurs,

    @property
    def requests(self):
        if self.debug_enabled:
             return passerelle.utils.LoggedRequests()
        else:
             return requests # le module
#5

Mis à jour par Josué Kouka il y a environ 8 ans

#7

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

  • le log_level = getattr(... dans requests() ne sert à rien
  • j'aurai nommé le logger passerelle.resource.%s.%s' % (slugify(self.__clas__.__name__), self.slug)
  • dans LoggedRequest.request() il faut aussi tronquer response.content quand il est passé dans le dico extra
PEP8:
  • un espace après % quand on formate une chaîne
  • pas de parenthèse autour des arguments à % quand il n'y en a qu'un
  • pas d'espace autour de = dans les keyword arguments d'une fonction (install pyflake et cherche le module emacs qui va bien :) )

Il manque les changements au packaging et aux settings par défaut (sinon tout ça ne sert à rien), genre

'loggers': {
   'passerelle.resource': {
      'level': 'DEBUG',
      'propagate': False,
      'handlers': ...,
   },
   ...
}

On met par défaut au niveau DEBUG puisque le vrai niveau se définit maintenant au niveau de chaque ressource.

Par défaut on envoie sur la console et dans les settings debian il faut reprendre la liste des handlers du logger racine venant de debian_config_common.py.

#8

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 8 ans

Benjamin Dauvergne a écrit :

  • pas d'espace autour de = dans les keyword arguments d'une fonction (install pyflake et cherche le module emacs qui va bien :) )

Il suffit de taper C-x-m-e-c

#10

Mis à jour par Josué Kouka il y a environ 8 ans

Voici ce que ça donne

Mar 25 18:01:33 debian DEBUG passerelle.resource.parispocgru.wso2.request: Content-Length:38 Accept-Encoding:gzip, deflate Accept:*/* User-Agent:python-requests/2.7.0 CPython/2.7.11+ Linux/4.3.0-1-amd64 Connection:keep-alive Content-Type:application/x-www-form-urlencoded
Mar 25 18:01:33 debian DEBUG passerelle.resource.parispocgru.wso2.request: content-length:485 server:nginx connection:keep-alive access-control-allow-credentials:true date:Fri, 25 Mar 2016 17:01:33 GMT access-control-allow-origin:* content-type:application/json
Mar 25 18:01:33 debian DEBUG passerelle.resource.parispocgru.wso2.request: '{\n  "args": {}, \n  "data": "", \n  "files": {}, \n  "form": {\n    "stuff": "that is a simple thing", \n    "user": "josh"\n  }, \n  "headers": {\n    "Accept": "*/*", \n    "Accept-Encoding": "gzip, deflate", \n    "Content-Length": "38", \n    "Content-Type": "application/x-www-form-urlencoded", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.7.0 CPython/2.7.11+ Linux/4.3.0-1-amd64"\n  }, \n  "json": null, \n  "origin": "80.12.92.47", \n  "url": "https://httpbin.org/post"\n}\n'

#12

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Tu ne reprends pas la liste des handlers du logger racine, le logger racine c'est celui nommé ''.

Ton exemple de sorti de log c'est avec quel configuration des logs ? Ça ne ressemble pas à ce qu'il y a dans hobo et dans passerelle il n'y a rien non plus on dirait. Surtout je ne comprend pas d'où vient le .request après le passerelle.resource.parispocgru.wso2.

Pour les logs de debug il faudrait peut-être ajouter un texte introductif, genre 'Request headers, ' , 'Response headers, ', 'Response payload', et remplacer 'Payload' par 'Request payload, ' sinon on ne sait pas trop ce qu'on regarde.

En l'état les logs sur les headers sont très difficiles à lire, j'ajouterai un espace après le ':' et peut-être que je séparerai par des pipes juste pour voir (' | ').

#13

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

Josué Kouka a écrit :

Voici ce que ça donne

Y'a pas l'URL ?

Il faudrait donc l'URL, avec devant le verbe (GET/POST/...) ; mais aussi des indications "Request Headers:", "Request Payload:", "Response Headers:", "Response Payload:" sur les lignes qui suivent...

#14

Mis à jour par Josué Kouka il y a environ 8 ans

Benjamin Dauvergne a écrit :

Tu ne reprends pas la liste des handlers du logger racine, le logger racine c'est celui nommé ''.

Normalement le 'handlers': LOGGING['handlers'] le fait. Ah oui t'as raison, faut juste les lister pas, les redefinir

Ton exemple de sorti de log c'est avec quel configuration des logs ? Ça ne ressemble pas à ce qu'il y a dans hobo et dans passerelle il n'y a rien non plus on dirait. Surtout je ne comprend pas d'où vient le .request après le passerelle.resource.parispocgru.wso2.

C'est le resultat de log d'un passerelle en standalone. Le .request vient du fait que le logger est appelé dans la méthod request de @LoggedRequest

Pour les logs de debug il faudrait peut-être ajouter un texte introductif, genre 'Request headers, ' , 'Response headers, ', 'Response payload', et remplacer 'Payload' par 'Request payload, ' sinon on ne sait pas trop ce qu'on regarde.

En l'état les logs sur les headers sont très difficiles à lire, j'ajouterai un espace après le ':' et peut-être que je séparerai par des pipes juste pour voir (' | ').

#15

Mis à jour par Josué Kouka il y a environ 8 ans

Thomas Noël a écrit :

Josué Kouka a écrit :

Voici ce que ça donne

Y'a pas l'URL ?

Il faudrait donc l'URL, avec devant le verbe (GET/POST/...) ; mais aussi des indications "Request Headers:", "Request Payload:", "Response Headers:", "Response Payload:" sur les lignes qui suivent...

J'avais juste pas coller les méthodes

#17

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

request_reponse ?

La méthode n'est pas passé dans le dico extra.

Concernant les logs précédents je ne vois pas quelle chaîne de formatage fait que la fonction est ajoutée au domaine des log, tu pourrais regarder ?

#18

Mis à jour par Josué Kouka il y a environ 8 ans

Benjamin Dauvergne a écrit :

Concernant les logs précédents je ne vois pas quelle chaîne de formatage fait que la fonction est ajoutée au domaine des log, tu pourrais regarder ?

Oui j'ai trouvé pourquoi, j'avais le bloc suivant dans mes settings

'formatters': {
        'syslog': {
            'format': '%(levelname)s %(name)s.%(funcName)s: %(message)s',
        },
    },

#19

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Ack.

#20

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Euh non pas ack, je veux bien des tests utilisant pytest-capturelog, merci.

#22

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Ton test dépend d'un appel à httpbin, regarde du coté de https://pypi.python.org/pypi/httmock/ pour éviter ça.

from httmock import urlmatch, HTTMock

@urlmatch(netloc=r'httpbin\.org$')
def httpbin_mock(url, request):
    return 'Feeling lucky, punk?'

with HTTMock(httpbin_mock):
    response = requests.post(url, json={'name':'josh'})

Il faut ajouter httmock aux dépendance tox aussi.

#24

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Ack.

#25

Mis à jour par Josué Kouka il y a environ 8 ans

J'attends la fin du POC Paris pour pouvoir pouser (Normalement demain dans l'après midi)

#26

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

https://jenkins.entrouvert.org/job/passerelle/1291/changes

self = <django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x35308a0>
query = 'SELECT "fake_family_fakefamily"."id", "fake_family_fakefamily"."title", "fake_family_fakefamily"."slug", "fake_family...vel", "fake_family_fakefamily"."jsondatabase" FROM "fake_family_fakefamily" ORDER BY "fake_family_fakefamily"."id" ASC'
params = ()

    def execute(self, query, params=None):
        if params is None:
            return Database.Cursor.execute(self, query)
        query = self.convert_query(query)
>       return Database.Cursor.execute(self, query, params)
E       OperationalError: no such column: fake_family_fakefamily.log_level

.tox/coverage-django18/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:485: OperationalError

Tu aurais du le voir en lançant les tests il me semble.

#28

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 8 ans

Patch poussé: build back to normal

commit cf64834eab3690aa74206ae3e4f25750dee9ab68
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Wed Apr 6 19:08:10 2016 +0200

    logging: add missing migrations for 'log_level' attribute (#10299)

#29

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 8 ans

  • Statut changé de En cours à Résolu (à déployer)
#30

Mis à jour par Josué Kouka il y a environ 8 ans

Benjamin Dauvergne a écrit :

https://jenkins.entrouvert.org/job/passerelle/1291/changes

[...]

Tu aurais du le voir en lançant les tests il me semble.

Désolé, j'avais des apps non activé malheureusement. Je serai plus prudent les prochaines fois

#31

Mis à jour par Josué Kouka il y a environ 8 ans

Serghei Mihai a écrit :

Patch poussé: build back to normal
[...]

Merci

#32

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF