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 = request.args.get('start_time') start_time = cur_time - 7200 if start_time is None else int(start_time.strip()) end_time = request.args.get('end_time') end_time = cur_time if end_time is None else int(end_time.strip()) stime = lambda t: time.strftime('%d-%H:%M:%S', time.localtime(t)) logger.debug("start_time=%s end_time=%s",stime(start_time) ,stime(end_time)) chnames = request.args.get('chnames') chnames = filter_chname(chnames) card_types = request.args.get('card_types') card_types = filter_cardtype(card_types) spec = request.args.get('spec') 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()