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, "{}
".format(to_log)) if self.verbose: print(to_log)