2017-08-24 07:25:13 +02:00
|
|
|
#!/usr/bin/env python3.5
|
2017-08-24 11:43:23 +02:00
|
|
|
from flask import Flask, render_template, Response
|
|
|
|
import json
|
2017-08-24 11:47:54 +02:00
|
|
|
from time import gmtime as now
|
|
|
|
from time import sleep, strftime
|
2017-08-24 11:43:23 +02:00
|
|
|
|
2017-08-24 07:25:13 +02:00
|
|
|
app = Flask(__name__)
|
|
|
|
|
2017-08-24 11:43:23 +02:00
|
|
|
FIELDNAME = {
|
|
|
|
'time': 'Time',
|
|
|
|
'level': 'Level',
|
|
|
|
'source': 'Source',
|
|
|
|
'name': 'Name',
|
|
|
|
'message': 'Message'
|
|
|
|
}
|
|
|
|
|
|
|
|
FIELDNAME_ORDER = [ 'time', 'level', 'source', 'name', 'message' ]
|
|
|
|
|
|
|
|
class LogRow():
|
|
|
|
def __init__(self, feed='', time='', level='level', src='source', name='name', message='wonderful meesage'):
|
|
|
|
# Parse feed message
|
|
|
|
|
|
|
|
# Assign potential supplied values
|
2017-08-24 11:47:54 +02:00
|
|
|
self.time = time if time != '' else strftime("%H:%M:%S", now())
|
2017-08-24 11:43:23 +02:00
|
|
|
self.level = level
|
|
|
|
self.source = src
|
|
|
|
self.name = name
|
|
|
|
self.message = message
|
|
|
|
|
|
|
|
def get_head_row(self):
|
|
|
|
to_ret = []
|
|
|
|
for fn in FIELDNAME_ORDER:
|
|
|
|
to_ret.append(FIELDNAME[fn])
|
|
|
|
return to_ret
|
|
|
|
|
|
|
|
def get_row(self):
|
|
|
|
to_ret = {}
|
|
|
|
#Number to keep them sorted (jsonify sort keys)
|
|
|
|
to_ret[1] = self.time
|
|
|
|
to_ret[2] = self.level
|
|
|
|
to_ret[3] = self.source
|
|
|
|
to_ret[4] = self.name
|
|
|
|
to_ret[5] = self.message
|
|
|
|
return to_ret
|
|
|
|
|
|
|
|
|
|
|
|
class EventMessage():
|
|
|
|
def __init__(self, msg):
|
|
|
|
self.feed = None
|
|
|
|
self.isLog = EventMessage.is_log(msg)
|
|
|
|
|
|
|
|
#get type of message: log or feed, then create
|
|
|
|
if self.isLog:
|
|
|
|
self.feed = msg
|
|
|
|
#FIXME do parser
|
|
|
|
self.feed = LogRow(feed=msg).get_row()
|
|
|
|
else:
|
|
|
|
self.feed = {feed.name: feed.data}
|
|
|
|
|
|
|
|
def is_log(msg):
|
|
|
|
return True
|
|
|
|
|
|
|
|
def to_json(self):
|
|
|
|
if self.isLog:
|
|
|
|
to_ret = { 'log': self.feed, 'chart': "" }
|
|
|
|
else:
|
|
|
|
to_ret = { 'log': "", 'chart': self.feed }
|
|
|
|
return 'data: {}\n\n'.format(json.dumps(to_ret))
|
|
|
|
|
2017-08-24 07:25:13 +02:00
|
|
|
@app.route("/")
|
|
|
|
def index():
|
|
|
|
return render_template('index.html')
|
|
|
|
|
2017-08-24 11:43:23 +02:00
|
|
|
@app.route("/_logs")
|
|
|
|
def logs():
|
|
|
|
return Response(event_stream(), mimetype="text/event-stream")
|
|
|
|
|
|
|
|
@app.route("/_get_log_head")
|
|
|
|
def getLogHead():
|
|
|
|
return json.dumps(LogRow().get_head_row())
|
|
|
|
|
|
|
|
def event_stream():
|
|
|
|
#for msg in pubsub:
|
|
|
|
for i in range(3):
|
|
|
|
msg = now()
|
|
|
|
sleep(0.3)
|
|
|
|
print('sending', EventMessage(msg).to_json())
|
|
|
|
yield EventMessage(msg).to_json()
|
|
|
|
|
2017-08-24 07:25:13 +02:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
app.run(host='localhost', port=8000, debug=True)
|