implemented logging to redis;
added api points to show logs;
This commit is contained in:
parent
dc007980cf
commit
f76e4bfdb2
@ -1,21 +1,44 @@
|
||||
import pickle
|
||||
|
||||
from flask_redis import Redis
|
||||
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:
|
||||
redis: Redis
|
||||
|
||||
def __init__(self, redis):
|
||||
def __init__(self, redis, log_to_redis, verbose):
|
||||
self.redis = redis
|
||||
self.log_to_redis = log_to_redis
|
||||
self.verbose = verbose
|
||||
|
||||
@staticmethod
|
||||
def log(msg):
|
||||
def log(self, msg):
|
||||
try:
|
||||
print("{}".format(pickle.loads(msg)))
|
||||
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)
|
||||
|
||||
@ -1,8 +1,14 @@
|
||||
import json
|
||||
import threading
|
||||
|
||||
from event_logger import EventLogger
|
||||
from flask import Flask
|
||||
from flask_redis import Redis
|
||||
from redis import StrictRedis
|
||||
|
||||
from event_logger import EventLogger
|
||||
|
||||
LOG_TO_REDIS = True
|
||||
VERBOSE = True
|
||||
|
||||
# make sure redis (container) is running and accessible
|
||||
|
||||
@ -12,19 +18,32 @@ from flask_redis import Redis
|
||||
app = Flask(__name__)
|
||||
app.config["REDIS_HOST"] = "redis"
|
||||
app.config["REDIS_PORT"] = 6379
|
||||
redis = Redis(app)
|
||||
redis: StrictRedis = Redis(app)
|
||||
|
||||
|
||||
@app.route("/api/keys")
|
||||
def api_get_keys():
|
||||
return json.dumps([key.decode() for key in redis.keys()])
|
||||
|
||||
|
||||
@app.route("/api/keys/<key>/")
|
||||
def api_get_of_key(key):
|
||||
key = redis.get(key)
|
||||
return key.decode() if key else json.dumps("")
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def home_page():
|
||||
redis.set('tl1', 'sending change red -> green <br>')
|
||||
redis.append('tl1', 'sending change green -> red <br>')
|
||||
redis.set('v1', 'receiving vel 100 km/h <br>')
|
||||
|
||||
return redis.get('tl1') + redis.get('v1')
|
||||
def get_keys():
|
||||
keys = redis.keys()
|
||||
keys.sort()
|
||||
return 'Existing keys:<br><br>{}'.format(
|
||||
['<a href="/api/keys/{0}/">{0}</a>'.format(key.decode()) for key in keys]) + \
|
||||
'<br><br>Access Api via <br><br>' \
|
||||
'GET /api/keys<br>' \
|
||||
'GET /api/keys/<key><br>'
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
el = EventLogger(redis)
|
||||
el = EventLogger(redis, LOG_TO_REDIS, VERBOSE)
|
||||
threading.Thread(target=el.setup_msq_queue).start()
|
||||
threading.Thread(target=app.run, args=('0.0.0.0', 5001)).start()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user