def group_message_details(request, group_id, message_id): group = get_object_or_404(GroupedMessage, pk=group_id) message = get_object_or_404(group.message_set, pk=message_id) if "__sentry__" in message.data: module, args, frames = message.data["__sentry__"]["exc"] message.class_name = str(message.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(message.class_name, (Exception,), {}) exc_value = exc_type(message.message) exc_value.args = args reporter = ImprovedExceptionReporter( message.request, exc_type, exc_value, frames, message.data["__sentry__"].get("template") ) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe("<pre>%s</pre>" % (group.traceback,)) def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith("_") or k in ["url"]: continue yield k, v json_data = iter_data(message) page = "messages" return locals()
def group_message_details(request, group_id, message_id): group = get_object_or_404(GroupedMessage, pk=group_id) message = get_object_or_404(group.message_set, pk=message_id) if '__sentry__' in message.data and 'exc' in message.data['__sentry__']: module, args, frames = message.data['__sentry__']['exc'] message.class_name = str(message.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(message.class_name, (Exception,), {}) exc_value = exc_type(message.message) exc_value.args = args reporter = ImprovedExceptionReporter(message.request, exc_type, exc_value, frames, message.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback,)) def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(message) page = 'messages' return render_to_response('sentry/group/message.html', locals(), context_instance=RequestContext(request))
def group(request, group_id): group = get_object_or_404(GroupedMessage, pk=group_id) message_list = group.message_set.all() obj = message_list.order_by('-id')[0] if '__sentry__' in obj.data: module, args, frames = obj.data['__sentry__']['exc'] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception,), {}) exc_value = exc_type(obj.message) exc_value.args = args reporter = ImprovedExceptionReporter(obj.request, exc_type, exc_value, frames, obj.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback,)) def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(obj) return render_to_response('sentry/group/details.html', locals())
def group_message_details(request, group_id, message_id): group = get_object_or_404(GroupedMessage, pk=group_id) message_list = group.message_set.all() message = get_object_or_404(group.message_set, pk=message_id) if '__sentry__' in message.data: module, args, frames = message.data['__sentry__']['exc'] message.class_name = str(message.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(message.class_name, (Exception, ), {}) exc_value = exc_type(message.message) exc_value.args = args reporter = ImprovedExceptionReporter( message.request, exc_type, exc_value, frames, message.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback, )) def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(message) page = 'messages' return render_to_response('sentry/group/message.html', locals())
def group(request, group_id): group = get_object_or_404(GroupedMessage, pk=group_id) message_list = group.message_set.all() obj = message_list.order_by('-id')[0] if '__sentry__' in obj.data: module, args, frames = obj.data['__sentry__']['exc'] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception,), {}) exc_value = exc_type(obj.message) exc_value.args = args reporter = ImprovedExceptionReporter(obj.request, exc_type, exc_value, frames, obj.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback,)) unique_urls = message_list.filter(url__isnull=False).values_list('url', 'logger', 'view', 'checksum').annotate(times_seen=Count('url')).values('url', 'times_seen').order_by('-times_seen') unique_servers = message_list.filter(server_name__isnull=False).values_list('server_name', 'logger', 'view', 'checksum').annotate(times_seen=Count('server_name')).values('server_name', 'times_seen').order_by('-times_seen') def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(obj) # TODO: this should be a template tag engine = get_db_engine() if SimpleLineChart and not engine.startswith('sqlite'): today = datetime.datetime.now() chart_qs = message_list\ .filter(datetime__gte=today - datetime.timedelta(hours=24))\ .extra(select={'hour': 'extract(hour from datetime)'}).values('hour')\ .annotate(num=Count('id')).values_list('hour', 'num') rows = dict(chart_qs) if rows: max_y = max(rows.values()) else: max_y = 1 chart = SimpleLineChart(300, 80, y_range=[0, max_y]) chart.add_data([max_y]*30) chart.add_data([rows.get((today-datetime.timedelta(hours=d)).hour, 0) for d in range(0, 24)][::-1]) chart.add_data([0]*30) chart.fill_solid(chart.BACKGROUND, 'eeeeee') chart.add_fill_range('eeeeee', 0, 1) chart.add_fill_range('e0ebff', 1, 2) chart.set_colours(['eeeeee', '999999', 'eeeeee']) chart.set_line_style(1, 1) chart_url = chart.get_url() return render_to_response('sentry/group/details.html', locals())
def group(request, group_id): group = get_object_or_404(GroupedMessage, pk=group_id) try: obj = group.message_set.all().order_by("-id")[0] except IndexError: # It's possible that a message would not be created under certain circumstances # (such as a post_save signal failing) obj = Message(group=group, data=group.data) if "__sentry__" in obj.data and "exc" in obj.data["__sentry__"]: module, args, frames = obj.data["__sentry__"]["exc"] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception,), {}) exc_value = exc_type(obj.message) exc_value.args = args reporter = ImprovedExceptionReporter( obj.request, exc_type, exc_value, frames, obj.data["__sentry__"].get("template") ) traceback = mark_safe(reporter.get_traceback_html()) version_data = obj.data["__sentry__"].get("versions", {}).iteritems() elif group.traceback: traceback = mark_safe("<pre>%s</pre>" % (group.traceback,)) version_data = None def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith("_") or k in ["url"]: continue yield k, v json_data = iter_data(obj) page = "details" return render_to_response("sentry/group/details.html", locals())
def group(request, group_id): group = get_object_or_404(GroupedMessage, pk=group_id) try: obj = group.message_set.all().order_by('-id')[0] except IndexError: # It's possible that a message would not be created under certain circumstances # (such as a post_save signal failing) obj = Message(group=group, data=group.data) if '__sentry__' in obj.data and 'exc' in obj.data['__sentry__']: module, args, frames = obj.data['__sentry__']['exc'] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception, ), {}) exc_value = exc_type(obj.message) exc_value.args = args reporter = ImprovedExceptionReporter( obj.request, exc_type, exc_value, frames, obj.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) version_data = obj.data['__sentry__'].get('versions', {}).iteritems() elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback, )) version_data = None def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(obj) page = 'details' return render_to_response('sentry/group/details.html', locals())
def group(request, group_id): group = get_object_or_404(GroupedMessage, pk=group_id) try: obj = group.message_set.all().order_by('-id')[0] except IndexError: # It's possible that a message would not be created under certain circumstances # (such as a post_save signal failing) obj = Message(group=group, data=group.data) if '__sentry__' in obj.data and 'exc' in obj.data['__sentry__']: module, args, frames = obj.data['__sentry__']['exc'] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception,), {}) exc_value = exc_type(obj.message) exc_value.args = args reporter = ImprovedExceptionReporter(obj.request, exc_type, exc_value, frames, obj.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) version_data = obj.data['__sentry__'].get('versions', {}).iteritems() elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback,)) version_data = None def iter_data(obj): for k, v in obj.data.iteritems(): if k.startswith('_') or k in ['url']: continue yield k, v json_data = iter_data(obj) page = 'details' return render_to_response('sentry/group/details.html', locals(), context_instance=RequestContext(request))
def group(request, group_id): group = GroupedMessage.objects.get(pk=group_id) message_list = group.message_set.all() obj = message_list[0] if '__sentry__' in obj.data: module, args, frames = obj.data['__sentry__']['exc'] obj.class_name = str(obj.class_name) # We fake the exception class due to many issues with imports/builtins/etc exc_type = type(obj.class_name, (Exception,), {}) exc_value = exc_type(obj.message) exc_value.args = args fake_request = FakeRequest() fake_request.META = obj.data.get('META', {}) fake_request.GET = obj.data.get('GET', {}) fake_request.POST = obj.data.get('POST', {}) fake_request.FILES = obj.data.get('FILES', {}) fake_request.COOKIES = obj.data.get('COOKIES', {}) fake_request.url = obj.url if obj.url: fake_request.path_info = '/' + obj.url.split('/', 3)[-1] else: fake_request.path_info = '' reporter = ImprovedExceptionReporter(fake_request, exc_type, exc_value, frames, obj.data['__sentry__'].get('template')) traceback = mark_safe(reporter.get_traceback_html()) elif group.traceback: traceback = mark_safe('<pre>%s</pre>' % (group.traceback,)) unique_urls = message_list.filter(url__isnull=False).values_list('url', 'logger', 'view', 'checksum').annotate(times_seen=Count('url')).values('url', 'times_seen').order_by('-times_seen') unique_servers = message_list.filter(server_name__isnull=False).values_list('server_name', 'logger', 'view', 'checksum').annotate(times_seen=Count('server_name')).values('server_name', 'times_seen').order_by('-times_seen') if SimpleLineChart: today = datetime.datetime.now() chart_qs = message_list\ .filter(datetime__gte=today - datetime.timedelta(hours=24))\ .extra(select={'hour': 'extract(hour from datetime)'}).values('hour')\ .annotate(num=Count('id')).values_list('hour', 'num') rows = dict(chart_qs) if rows: max_y = max(rows.values()) else: max_y = 1 chart = SimpleLineChart(300, 80, y_range=[0, max_y]) chart.add_data([max_y]*30) chart.add_data([rows.get((today-datetime.timedelta(hours=d)).hour, 0) for d in range(0, 24)][::-1]) chart.add_data([0]*30) chart.fill_solid(chart.BACKGROUND, 'eeeeee') chart.add_fill_range('eeeeee', 0, 1) chart.add_fill_range('e0ebff', 1, 2) chart.set_colours(['eeeeee', '999999', 'eeeeee']) chart.set_line_style(1, 1) chart_url = chart.get_url() return render_to_response('sentry/group.html', locals())