__init__.py 1.72 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
import datetime
import json
import logging

from django.http import HttpResponse

from track.utils import DateTimeJSONEncoder


perflog = logging.getLogger("perflog")


def _get_request_header(request, header_name, default=''):
    """Helper method to get header values from a request's META dict, if present."""
    if request is not None and hasattr(request, 'META') and header_name in request.META:
        return request.META[header_name]
    else:
        return default


def _get_request_value(request, value_name, default=''):
    """Helper method to get header values from a request's REQUEST dict, if present."""
    if request is not None and hasattr(request, 'REQUEST') and value_name in request.REQUEST:
        return request.REQUEST[value_name]
    else:
        return default


def performance_log(request):
    """
    Log when POST call to "performance" URL is made by a user.
    Request should provide "event" and "page" arguments.
    """

    event = {
        "ip": _get_request_header(request, 'REMOTE_ADDR'),
        "referer": _get_request_header(request, 'HTTP_REFERER'),
        "accept_language": _get_request_header(request, 'HTTP_ACCEPT_LANGUAGE'),
        "event_source": "browser",
        "event": _get_request_value(request, 'event'),
        "agent": _get_request_header(request, 'HTTP_USER_AGENT'),
        "page": _get_request_value(request, 'page'),
        "id": _get_request_value(request, 'id'),
        "expgroup": _get_request_value(request, 'expgroup'),
        "value": _get_request_value(request, 'value'),
        "time": datetime.datetime.utcnow(),
        "host": _get_request_header(request, 'SERVER_NAME'),
    }

    perflog.info(json.dumps(event, cls=DateTimeJSONEncoder))

    return HttpResponse(status=204)