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,MerchantPainter from refill import filter_chname,filter_cardtype,filter_mchids 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') def parse_parmeter(): end_time = request.args.get('end_time') end_time = None if end_time is None else int(end_time.strip()) start_time = request.args.get('start_time') start_time = None if start_time is None else int(start_time.strip()) 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()) filter_wave = request.args.get('filter_wave') if filter_wave is not None: filter_wave = int(filter_wave.strip()) return start_time,end_time,card_types,spec,filter_wave def onError(ex): logger.error(ex) data = base64.b64encode(b'').decode("ascii") return f"" @app.route('/plot/ch_ratio') def ch_ratio(): try: logger.debug('start chratio') start_time, end_time, card_types, spec, filter_wave = parse_parmeter() chnames = request.args.get('chnames') chnames = filter_chname(chnames) painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec, filter_wave=filter_wave) buf = painter.paint() data = base64.b64encode(buf.getbuffer()).decode("ascii") return f"" except Exception as ex: return onError(ex) @app.route('/plot/mch_ratio') def mch_ratio(): try: logger.debug('start mchratio') start_time, end_time, card_types, spec, filter_wave = parse_parmeter() mchids = request.args.get('mchids') mchids = filter_mchids(mchids) painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave) buf = painter.paint_ratios() data = base64.b64encode(buf.getbuffer()).decode("ascii") return f"" except Exception as ex: return onError(ex) @app.route('/plot/mch_order_send') def mch_order_send(): try: logger.debug('start mch_order_send') start_time, end_time, card_types, spec, filter_wave = parse_parmeter() mchids = request.args.get('mchids') mchids = filter_mchids(mchids) painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave) buf = painter.paint_refilling() data = base64.b64encode(buf.getbuffer()).decode("ascii") return f"" except Exception as ex: return onError(ex) 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()