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()