Использование клиента SUDS Python WSDL и Django Sentry, исключение с атрибутом __sentry__ - PullRequest
2 голосов
/ 15 сентября 2011

При использовании SUDS в приложении Django, наряду с ведением журнала ошибок Sentry, я сталкиваюсь с проблемой, когда SUDS выдает ошибку, и Sentry пытается ее обработать, ужасно дает сбой и вызывает 500 серверов:

[Wed Sep 14 16:06:22 2011] [error] Unable to process log entry: plugin domain (__sentry__), invalid
[Wed Sep 14 16:06:22 2011] [error] Traceback (most recent call last):
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/client/models.py", line 38, in sentry_exception_handler
[Wed Sep 14 16:06:22 2011] [error]     message_id = get_client().create_from_exception(**extra)
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/client/base.py", line 220, in create_from_exception
[Wed Sep 14 16:06:22 2011] [error]     frames = varmap(shorten, reporter.get_traceback_frames())
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var]
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 66, in varmap
[Wed Sep 14 16:06:22 2011] [error]     ret = dict((k, varmap(func, v, context)) for k, v in var.iteritems())
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 66, in <genexpr>
[Wed Sep 14 16:06:22 2011] [error]     ret = dict((k, varmap(func, v, context)) for k, v in var.iteritems())
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var]
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var]
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 70, in varmap
[Wed Sep 14 16:06:22 2011] [error]     ret = func(var)
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 235, in shorten
[Wed Sep 14 16:06:22 2011] [error]     var = transform(var)
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 101, in transform
[Wed Sep 14 16:06:22 2011] [error]     callable(getattr(value, '__sentry__', None)):
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/suds/plugin.py", line 208, in __getattr__
[Wed Sep 14 16:06:22 2011] [error]     raise Exception, 'plugin domain (%s), invalid' % name
[Wed Sep 14 16:06:22 2011] [error] Exception: plugin domain (__sentry__), invalid

Похоже, что Sentry и SUDS плохо играют ...?

1 Ответ

3 голосов
/ 15 сентября 2011

Похоже, что SUDS фактически выбрасывает неверный тип ошибки в свой файл плагина, и поэтому Sentry не может его обработать (Sentry пытается вызвать __sentry__ для объекта, вызвавшего исключение, и я предполагаю, что AttributeError должно быть возвращено. SUDS просто вызывает исключение (в старом стиле) ...

см .: https://fedorahosted.org/suds/browser/trunk/suds/plugin.py#L208

Возможно, исправьте его, чтобы вызвать ошибку AttributeError ... но это может быть не таклучшее решение ... другие?

...