Example #1
0
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('')
Example #2
0
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('')
Example #3
0
    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
Example #4
0
    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
Example #5
0
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('')
Example #6
0
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)
def test_sanitize_url(self, url, sanitized):
    self.assertEqual(sanitize_url(url), sanitized)