123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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
- import re
- 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')
- def filter_chname(chnames):
- if chnames is not None:
- chnames = chnames.strip()
- if chnames is None or len(chnames) == 0:
- chnames = set()
- else:
- items = re.split(r',', chnames)
- names = [name.strip() for name in items]
- namelist = []
- for name in names:
- if len(name) > 0:
- namelist.append(name)
- chnames = set(namelist)
- return chnames
- def filter_cardtype(card_types):
- if card_types is not None:
- card_types = card_types.strip()
- if card_types is None or len(card_types) == 0:
- result = {4, 5, 6} #默认话费类型
- else:
- items = re.split(r',', card_types)
- stypes = [type.strip() for type in items]
- types = []
- for stype in stypes:
- try:
- type = int(stype)
- types.append(type)
- except Exception as ex:
- logger.error(ex)
- result = set(types)
- return result
- @app.route('/plot/ch_ratio')
- def ch_ratio():
- try:
- logger.debug('start chratio')
- cur_time = int(time.time())
- start_time = int(request.args.get('start_time') or (cur_time - 7200))
- end_time = int(request.args.get('end_time') or cur_time)
- chnames = request.args.get('chnames') or None
- chnames = filter_chname(chnames)
- card_types = request.args.get('card_types') or None
- card_types = filter_cardtype(card_types)
- spec = request.args.get('spec') or None
- 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,{[]}'/>"
- 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()
|