2021-06-02 20:50:40 +02:00

54 lines
1.6 KiB
Python

import json
import pickle
from dse_shared_libs.daf import DAF
from dse_shared_libs.message_broker_wrapper import MBWrapper
from dse_shared_libs.target_velocity import TargetVelocity
from dse_shared_libs.traffic_light_state import TrafficLightState
from redis import StrictRedis
class EventLogger:
def __init__(self, redis, log_to_redis, verbose):
self.redis = redis
self.log_to_redis = log_to_redis
self.verbose = verbose
def setup_msq_queue(self):
mb = MBWrapper(exchange_name='logger', callback=self.log)
mb.setup_receiver()
def get_keys(self):
return json.dumps([key.decode() for key in self.redis.keys()])
def get_value_of(self, key):
key = self.redis.get(key)
return key.decode() if key else json.dumps("")
def log(self, msg):
try:
msg = pickle.loads(msg)
except Exception as e:
print("Could not unpickle [{}]: {}", msg, e)
self.redis: StrictRedis
self.redis.append('ERRORS', str(e))
key: str
if type(msg) == DAF:
msg: DAF
key = 'DAF:{}'.format(msg.vehicle_identification_number)
elif type(msg) == TrafficLightState:
msg: TrafficLightState
key = 'TL:{}'.format(msg.tlid)
elif type(msg) == TargetVelocity:
msg: TargetVelocity
key = 'TV:{}'.format(msg.vin)
else:
key = 'UNKNOWN'
to_log = str(msg)
if self.log_to_redis:
self.redis.append(key, "{}<br>".format(to_log))
if self.verbose:
print(to_log)