from gevent import monkey
from gevent.pywsgi import WSGIServer
from gevent import signal as geventsig
import gevent
from flask import Flask
import base64
from io import BytesIO
from matplotlib.figure import Figure
import json
from DataCenter import dataCenter
from MchDataCenter import mchDataCenter
# from plog import initLog
from flask import request, jsonify
import logging
from logging.handlers import RotatingFileHandler
import time
import signal as sig
import sys, getopt
app = Flask(__name__)
app.debug = True
curname = __name__
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():
from refill import ChannelPainter
from refill import filter_chname,filter_cardtype
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"
"
@app.route('/plot/index')
def index():
app.logger.debug('start')
time_stamp = request.args.get('time_stamp')
interval = request.args.get('interval')
chname = request.args.get('chname')
quality = request.args.get('quality')
card_type = request.args.get('card_type')
amount = request.args.get('amount')
app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
time_stamp, interval, chname, quality, card_type, amount)
if time_stamp is None:
time_stamp = time.time()
else:
time_stamp = int(time_stamp)
if interval is None:
interval = 300
else:
interval = int(interval)
buf = dataCenter.draw_plot(time_stamp,
interval=interval,
chname=chname,
quality=quality,
card_type=card_type,
amount=amount)
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return f"
"
@app.route('/plot/days')
def days():
s_time = time.time()
dates = dataCenter.days()
e_time = time.time()
print('time=', e_time - s_time)
dates.reverse()
dates = dates[0:30]
return jsonify(dates)
@app.route('/plot/paths')
def paths():
time_stamp = request.args.get('time_stamp')
time_stamp = int(time_stamp)
paths = dataCenter.paths(time_stamp)
return jsonify(paths)
@app.route('/plot/mchdays')
def mchdays():
dates = mchDataCenter.days()
dates.reverse()
dates = dates[0:30]
return jsonify(dates)
@app.route('/plot/mchpaths')
def mchpaths():
time_stamp = request.args.get('time_stamp')
time_stamp = int(time_stamp)
paths = mchDataCenter.paths(time_stamp)
return jsonify(paths)
@app.route('/plot/mchplot')
def mchplot():
time_stamp = request.args.get('time_stamp')
interval = request.args.get('interval')
mchid = request.args.get('mchid')
quality = request.args.get('quality')
card_type = request.args.get('card_type')
amount = request.args.get('amount')
app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
time_stamp, interval, mchid, quality, card_type, amount)
if time_stamp is None:
time_stamp = time.time()
else:
time_stamp = int(time_stamp)
if interval is None:
interval = 300
else:
interval = int(interval)
buf = mchDataCenter.draw_plot(time_stamp, interval=interval, mchid=mchid, quality=quality, card_type=card_type,
amount=amount)
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return f"
"
if __name__ == "__main__":
debug_mode = False
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()