from flask import Flask, request, jsonify
app = Flask(__name__)
import base64
from io import BytesIO
from matplotlib.figure import Figure
import json
import logging
import time
import signal as sig
import sys, getopt
from refill import ChannelPainter
from refill import filter_chname,filter_cardtype
logging.basicConfig(filename='/var/www/html/data/log/flask.log',
format='%(levelname)10s %(asctime)s %(name)10s %(thread)d %(message)s',
level=logging.DEBUG)
logger = logging.getLogger('plot')
@app.route('/plot/ch_ratio')
def ch_ratio():
try:
logger.debug('start chratio')
cur_time = int(time.time())
start_time = int(request.args.get('start_time') or (cur_time - 7200))
end_time = int(request.args.get('end_time') or cur_time)
chnames = request.args.get('chnames') or None
chnames = filter_chname(chnames)
card_types = request.args.get('card_types') or None
card_types = filter_cardtype(card_types)
spec = request.args.get('spec') or None
if spec is not None:
spec = int(spec.strip())
painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec)
buf = painter.paint()
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return f"
"
except Exception as ex:
logger.error(ex)
return f"
"
if __name__ == "__main__":
debug_mode = True
if debug_mode:
app.run(debug=True, host='0.0.0.0', port=5000)
else:
from gevent import monkey
from gevent.pywsgi import WSGIServer
from gevent import signal as geventsig
monkey.patch_all()
http_server = WSGIServer(('0.0.0.0', 5000), app)
geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
geventsig.signal(sig.SIGINT, lambda: http_server.stop())
http_server.serve_forever()