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