def get_context(self, record): try: request = record.request except Exception: request = None request_repr = get_sanitized_request_repr(request) tb_list = [] code = None if record.exc_info: etype, _value, tb = record.exc_info value = clean_exception(_value) tb_list = ['Traceback (most recent call first):\n'] formatted_exception = traceback.format_exception_only(etype, value) tb_list.extend(formatted_exception) extracted_tb = list(reversed(traceback.extract_tb(tb))) code = self.get_code(extracted_tb) tb_list.extend(traceback.format_list(extracted_tb)) stack_trace = '\n'.join(tb_list) subject = '%s: %s' % (record.levelname, formatted_exception[0].strip() if formatted_exception else record.getMessage()) else: stack_trace = 'No stack trace available' subject = '%s: %s' % (record.levelname, record.getMessage()) context = defaultdict(lambda: '') context.update({ 'subject': self.format_subject(subject), 'message': record.getMessage(), 'details': getattr(record, 'details', None), 'tb_list': tb_list, 'request_repr': request_repr, 'stack_trace': stack_trace, 'code': code, }) if request: sanitized_url = sanitize_url(request.build_absolute_uri()) log_counter( ERROR_COUNT, { 'url': sanitized_url, 'group': get_url_group(sanitized_url), 'domain': getattr(request, 'domain', DATADOG_UNKNOWN), }) context.update({ 'get': request.GET.items(), 'post': SafeExceptionReporterFilter().get_post_parameters(request), 'method': request.method, 'username': request.user.username if getattr(request, 'user', None) else "", 'url': request.build_absolute_uri(), }) return context
def get_context(self, record): from corehq.util.datadog.gauges import datadog_counter try: request = record.request except Exception: request = None request_repr = get_sanitized_request_repr(request) tb_list = [] code = None if record.exc_info: etype, _value, tb = record.exc_info value = clean_exception(_value) tb_list = ['Traceback (most recent call first):\n'] formatted_exception = traceback.format_exception_only(etype, value) tb_list.extend(formatted_exception) extracted_tb = list(reversed(traceback.extract_tb(tb))) code = self.get_code(extracted_tb) tb_list.extend(traceback.format_list(extracted_tb)) stack_trace = '\n'.join(tb_list) subject = '%s: %s' % (record.levelname, formatted_exception[0].strip() if formatted_exception else record.getMessage()) else: stack_trace = 'No stack trace available' subject = '%s: %s' % ( record.levelname, record.getMessage() ) context = defaultdict(lambda: '') context.update({ 'subject': self.format_subject(subject), 'message': record.getMessage(), 'details': getattr(record, 'details', None), 'tb_list': tb_list, 'request_repr': request_repr, 'stack_trace': stack_trace, 'code': code, }) if request: sanitized_url = sanitize_url(request.build_absolute_uri()) datadog_counter(ERROR_COUNT, tags=[ 'url:{}'.format(sanitized_url), 'group:{}'.format(get_url_group(sanitized_url)), 'domain:{}'.format(getattr(request, 'domain', DATADOG_UNKNOWN)), ]) context.update({ 'get': list(request.GET.items()), 'post': SafeExceptionReporterFilter().get_post_parameters(request), 'method': request.method, 'username': request.user.username if getattr(request, 'user', None) else "", 'url': request.build_absolute_uri(), }) return context
def test_url_group(self, url, group): self.assertEqual(get_url_group(url), group)