46 lines
1.4 KiB
Python
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()
|