def jserror(request): agent = request.META.get('HTTP_USER_AGENT', None) os = browser_name = browser_version = bot = DATADOG_UNKNOWN if agent: parsed_agent = httpagentparser.detect(agent) bot = parsed_agent.get('bot', False) if 'os' in parsed_agent: os = parsed_agent['os'].get('name', DATADOG_UNKNOWN) if 'browser' in parsed_agent: browser_version = parsed_agent['browser'].get( 'version', DATADOG_UNKNOWN) browser_name = parsed_agent['browser'].get('name', DATADOG_UNKNOWN) datadog_counter(JSERROR_COUNT, tags=[ 'os:{}'.format(os), 'browser_version:{}'.format(browser_version), 'browser_name:{}'.format(browser_name), 'url:{}'.format( sanitize_url(request.POST.get('page', None))), 'file:{}'.format(request.POST.get('filename')), 'bot:{}'.format(bot), ]) return HttpResponse('')
def jserror(request): agent = request.META.get('HTTP_USER_AGENT', None) os = browser_name = browser_version = bot = DATADOG_UNKNOWN if agent: parsed_agent = httpagentparser.detect(agent) bot = parsed_agent.get('bot', False) if 'os' in parsed_agent: os = parsed_agent['os'].get('name', DATADOG_UNKNOWN) if 'browser' in parsed_agent: browser_version = parsed_agent['browser'].get( 'version', DATADOG_UNKNOWN) browser_name = parsed_agent['browser'].get('name', DATADOG_UNKNOWN) log_counter( JSERROR_COUNT, { 'os': os, 'browser_version': browser_version, 'browser_name': browser_name, 'url': sanitize_url(request.POST.get('page', None)), 'file': request.POST.get('filename'), 'bot': bot, }) return HttpResponse('')
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 jserror(request): agent = request.META.get('HTTP_USER_AGENT', None) os = browser_name = browser_version = bot = DATADOG_UNKNOWN if agent: parsed_agent = httpagentparser.detect(agent) bot = parsed_agent.get('bot', False) if 'os' in parsed_agent: os = parsed_agent['os'].get('name', DATADOG_UNKNOWN) if 'browser' in parsed_agent: browser_version = parsed_agent['browser'].get('version', DATADOG_UNKNOWN) browser_name = parsed_agent['browser'].get('name', DATADOG_UNKNOWN) log_counter(JSERROR_COUNT, { 'os': os, 'browser_version': browser_version, 'browser_name': browser_name, 'url': sanitize_url(request.POST.get('page', None)), 'file': request.POST.get('filename'), 'bot': bot, }) return HttpResponse('')
def jserror(request): agent = request.META.get('HTTP_USER_AGENT', None) os = browser_name = browser_version = bot = DATADOG_UNKNOWN if agent: parsed_agent = httpagentparser.detect(agent) bot = parsed_agent.get('bot', False) if 'os' in parsed_agent: os = parsed_agent['os'].get('name', DATADOG_UNKNOWN) if 'browser' in parsed_agent: browser_version = parsed_agent['browser'].get('version', DATADOG_UNKNOWN) browser_name = parsed_agent['browser'].get('name', DATADOG_UNKNOWN) datadog_counter(JSERROR_COUNT, tags=[ 'os:{}'.format(os), 'browser_version:{}'.format(browser_version), 'browser_name:{}'.format(browser_name), 'url:{}'.format(sanitize_url(request.POST.get('page', None))), 'file:{}'.format(request.POST.get('filename')), 'bot:{}'.format(bot), ]) return HttpResponse('')
def test_sanitize_url(self, url, sanitized): self.assertEqual(sanitize_url(url), sanitized)