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 day_stamp,time_border 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()) interval = request.args.get('interval') or 300 start_time = request.args.get('start_time') or (cur_time - 7200) end_time = request.args.get('end_time') or cur_time start_time = time_border(start_time,interval,True) end_time = time_border(cur_time,interval,False) chnames = request.args.get('chnames') or list() card_type = request.args.get('card_type') or None spec = request.args.get('spec') or None painter = ChannelPainter(start_time=start_time, end_time=end_time, interval=interval, chnames=chnames, card_type=card_type, spec=spec) data = painter.paint() logger.debug('start_time=%s end_time=%s interval= %s chnames=%s quality=%s card_type=%s amount=%s', start_time, interval, chnames, card_type, spec) except Exception as ex: logger.error(ex) return None 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()