Marco Zeisler f76e4bfdb2 implemented logging to redis;
added api points to show logs;
2021-06-02 20:47:05 +02:00

46 lines
1.4 KiB
Python

import pickle
from redis import StrictRedis
from dse_shared_libs.daf import DAF
from dse_shared_libs.target_velocity import TargetVelocity
from dse_shared_libs.traffic_light_state import TrafficLightState
from dse_shared_libs.message_broker_wrapper import MBWrapper
class EventLogger:
def __init__(self, redis, log_to_redis, verbose):
self.redis = redis
self.log_to_redis = log_to_redis
self.verbose = verbose
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)
def setup_msq_queue(self):
mb = MBWrapper(exchange_name='logger', callback=self.log)
mb.setup_receiver()