move logger logic to formatter

This commit is contained in:
Chris Meyers 2017-02-20 14:30:17 -05:00
parent 0dada82b4b
commit 31a79c331d
2 changed files with 35 additions and 31 deletions

View File

@ -119,36 +119,7 @@ class APIView(views.APIView):
response['X-API-Query-Count'] = len(q_times)
response['X-API-Query-Time'] = '%0.3fs' % sum(q_times)
def copy_items_try_to_numberify(d, keys):
new_d = {}
for k in keys:
val = d[k]
if val.endswith('s'):
val = val[:-1]
try:
new_d[k] = int(val)
except ValueError:
try:
new_d[k] = float(val)
except ValueError:
new_d[k] = val
return new_d
log = copy_items_try_to_numberify(response, ['X-API-Time', 'X-API-Query-Count', 'X-API-Query-Time', 'X-API-Node',])
req = {
'method': request.method,
'path': request.path,
'path_info': request.path_info,
'query_string': request.META['QUERY_STRING'],
}
if request.method == "POST":
req['post_data'] = request.POST
elif request.method == "GET":
req['get_data'] = request.GET
analytics_logger.info("api response", extra=dict(request=req, x_api=log))
analytics_logger.info("api response", extra=dict(python_objects=dict(request=request, response=response)))
return response
def get_authenticate_header(self, request):

View File

@ -56,6 +56,21 @@ class LogstashFormatter(LogstashFormatterVersion1):
adict[name] = subdict
return adict
def convert_to_type(t, val):
if t is float:
val = val[:-1] if val.endswith('s') else val
try:
return float(val)
except ValueError:
return val
elif t is int:
try:
return int(val)
except ValueError:
return val
elif t is str:
return val
if kind == 'job_events':
data.update(data.get('event_data', {}))
for fd in data:
@ -82,7 +97,25 @@ class LogstashFormatter(LogstashFormatterVersion1):
data_for_log['facts'] = data
data_for_log['module_name'] = module_name
elif kind == 'performance':
return raw_data
request = raw_data['python_objects']['request']
response = raw_data['python_objects']['response']
headers = [
(float, 'X-API-Time'), # may end with an 's' "0.33s"
(int, 'X-API-Query-Count'),
(float, 'X-API-Query-Time'), # may also end with an 's'
(str, 'X-API-Node'),
]
data_for_log['x_api'] = { k: convert_to_type(t, response[k]) for (t, k) in headers }
data_for_log['request'] = {
'method': request.method,
'path': request.path,
'path_info': request.path_info,
'query_string': request.META['QUERY_STRING'],
'data': request.data,
}
return data_for_log
def get_extra_fields(self, record):