62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
import copy
|
|
|
|
__all__ = 'HandlerEvent',
|
|
|
|
|
|
class HandlerEvent:
|
|
tb = 'event'
|
|
|
|
def __init__(self, db_client, db_name, ipsearch):
|
|
self.event = dict()
|
|
self.db_client = db_client
|
|
self.db_name = db_name
|
|
self.ipsearch = ipsearch
|
|
|
|
def set_region(self, data):
|
|
ip = data.get('#ip')
|
|
if ip:
|
|
data['#country'], data['#province'], data['#city'] = self.ipsearch(ip)
|
|
|
|
def merge_update(self, a: dict, b: dict):
|
|
"""
|
|
可更新事件 合并
|
|
:param a:
|
|
:param b:
|
|
:return:
|
|
"""
|
|
if 'properties' not in b or not isinstance(b['properties'], dict):
|
|
return
|
|
for k, v in b['properties'].items():
|
|
a[k] = v
|
|
|
|
def track(self, data):
|
|
self.set_region(data)
|
|
self.event[len(self.event)] = data
|
|
|
|
def track_update(self, data):
|
|
if '#event_id' not in data:
|
|
return
|
|
self.set_region(data)
|
|
old_event = self.db_client.get_one(self.db_name, self.tb, {'#event_id': data['#event_id']})
|
|
old_event['sign'] = -1
|
|
self.event[len(self.event)] = old_event
|
|
|
|
new_event = copy.deepcopy(old_event)
|
|
self.merge_update(new_event, data)
|
|
new_event['sign'] = 1
|
|
self.event[len(self.event)] = new_event
|
|
|
|
def track_overwrite(self, data):
|
|
if '#event_id' not in data:
|
|
return
|
|
self.set_region(data)
|
|
old_event = self.db_client.get_one(self.db_name, self.tb, {'#event_id': data['#event_id']})
|
|
old_event['sign'] = -1
|
|
self.event[len(self.event)] = old_event
|
|
|
|
self.event[len(self.event)] = data
|
|
|
|
@property
|
|
def buffer_pool(self):
|
|
return self.tb, self.event
|