Projet

Général

Profil

0001-make-it-possible-to-send-crashes-to-sentry-3527.patch

Frédéric Péters, 04 septembre 2013 11:41

Télécharger (3,59 ko)

Voir les différences:

Subject: [PATCH] make it possible to send crashes to sentry (#3527)

 wcs/qommon/admin/settings.ptl |  5 ++++-
 wcs/qommon/publisher.py       | 27 +++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)
wcs/qommon/admin/settings.ptl
131 131
                            (str('html'), _('Display as HTML')) ])
132 132
        form.add(CheckboxWidget, 'logger', title = _('Logger'),
133 133
                value = debug_cfg.get('logger', False))
134
        form.add(StringWidget, 'sentry_dsn', title=_('Sentry DSN'),
135
                value=debug_cfg.get('sentry_dsn', ''))
134 136
        form.add(CheckboxWidget, 'debug_mode', title = _('Enable debug mode'),
135 137
                value = debug_cfg.get('debug_mode', False))
136 138
        form.add(StringWidget, 'mail_redirection', title = _('Mail redirection'),
......
149 151
            form.render()
150 152
        else:
151 153
            cfg_submit(form, 'debug', ('error_email', 'display_exceptions',
152
                                       'logger', 'debug_mode', 'mail_redirection'))
154
                                       'logger', 'debug_mode',
155
                                       'mail_redirection', 'sentry_dsn'))
153 156
            redirect('.')
wcs/qommon/publisher.py
46 46
    except ImportError:
47 47
        ET = None
48 48

  
49
try:
50
    import raven
51
except ImportError:
52
    raven = None
53

  
49 54
from quixote.publish import Publisher, get_request, get_response, get_publisher, redirect
50 55
from http_request import HTTPRequest
51 56
from http_response import HTTPResponse, AfterJob
......
235 240
                        exc_type, exc_value,
236 241
                        tb)
237 242

  
243
        self.notify_sentry(exc_tuple, request=self.get_request(),
244
                context=context)
245

  
238 246
        try:
239 247
            self.logger.log_internal_error(error_summary, plain_error_msg)
240 248
        except socket.error:
......
245 253
            # this could happen on file descriptor exhaustion
246 254
            pass
247 255

  
256
    def notify_sentry(self, exc_tuple, request=None, context=None):
257
        debug_cfg = self.cfg.get('debug', {})
258
        sentry_dsn = debug_cfg.get('sentry_dsn')
259
        if not sentry_dsn:
260
            return
261

  
262
        client = raven.Client(sentry_dsn)
263
        extra = {}
264
        tags = {}
265
        if context:
266
            extra['context'] = context
267
        if request:
268
            extra['request'] = request.dump()
269
            tags['url'] = request.get_url()
270

  
271
        client.captureException(exc_tuple, extra=extra, tags=tags)
272

  
248 273
    def finish_successful_request(self):
249 274
        Publisher.finish_successful_request(self)
250 275
        self.statsd.increment('successful-request')
......
260 285

  
261 286
        (exc_type, exc_value, tb) = sys.exc_info()
262 287

  
288
        self.notify_sentry((exc_type, exc_value, tb), request)
289

  
263 290
        if exc_type is NotImplementedError:
264 291
            get_response().set_header('Content-Type', 'text/html') # set back content-type
265 292
            return template.error_page(
266
-