When event-tracking was fully integrated into the platform, some data was replicated in the context in the middleware and then later extracted and moved the old location by event-tracking. The legacy code path was not updated to remove this transient shim data from the context resulting in duplication of the information. This patch ensures that the transient information is removed from the context before emitting the event. Fixes: AN-2369
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""Map new event context values to old top-level field values. Ensures events can be parsed by legacy parsers."""
|
|
|
|
CONTEXT_FIELDS_TO_INCLUDE = [
|
|
'username',
|
|
'session',
|
|
'ip',
|
|
'agent',
|
|
'host'
|
|
]
|
|
|
|
|
|
class LegacyFieldMappingProcessor(object):
|
|
"""Ensures all required fields are included in emitted events"""
|
|
|
|
def __call__(self, event):
|
|
if 'context' in event:
|
|
context = event['context']
|
|
for field in CONTEXT_FIELDS_TO_INCLUDE:
|
|
if field in context:
|
|
event[field] = context[field]
|
|
else:
|
|
event[field] = ''
|
|
remove_shim_context(event)
|
|
|
|
if 'event_type' in event.get('context', {}):
|
|
event['event_type'] = event['context']['event_type']
|
|
del event['context']['event_type']
|
|
else:
|
|
event['event_type'] = event.get('name', '')
|
|
|
|
if 'data' in event:
|
|
event['event'] = event['data']
|
|
del event['data']
|
|
else:
|
|
event['event'] = {}
|
|
|
|
if 'timestamp' in event:
|
|
event['time'] = event['timestamp']
|
|
del event['timestamp']
|
|
|
|
event['event_source'] = 'server'
|
|
event['page'] = None
|
|
|
|
|
|
def remove_shim_context(event):
|
|
if 'context' in event:
|
|
context = event['context']
|
|
for field in CONTEXT_FIELDS_TO_INCLUDE:
|
|
if field in context:
|
|
del context[field]
|