123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- 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"<img src='data:image/png;base64,{data}'/>"
- except Exception as ex:
- logger.error(ex)
- return f"<img src='data:image/png;base64,{[]}'/>"
- @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"<img src='data:image/png;base64,{data}'/>"
- @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"<img src='data:image/png;base64,{data}'/>"
- 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()
|