plot_control.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from flask import Flask, request, jsonify
  2. app = Flask(__name__)
  3. import base64
  4. from io import BytesIO
  5. from matplotlib.figure import Figure
  6. import json
  7. import logging
  8. import time
  9. import signal as sig
  10. import sys, getopt
  11. from refill import ChannelPainter,MerchantPainter
  12. from refill import filter_chname,filter_cardtype,filter_mchids
  13. logging.basicConfig(filename='/var/www/html/data/log/flask.log',
  14. format='%(levelname)10s %(asctime)s %(name)10s %(thread)d %(message)s',
  15. level=logging.DEBUG)
  16. logger = logging.getLogger('plot')
  17. def parse_parmeter():
  18. cur_time = int(time.time())
  19. start_time = request.args.get('start_time')
  20. start_time = cur_time - 7200 if start_time is None else int(start_time.strip())
  21. end_time = request.args.get('end_time')
  22. end_time = cur_time if end_time is None else int(end_time.strip())
  23. stime = lambda t: time.strftime('%d-%H:%M:%S', time.localtime(t))
  24. logger.debug("start_time=%s end_time=%s",stime(start_time) ,stime(end_time))
  25. card_types = request.args.get('card_types')
  26. card_types = filter_cardtype(card_types)
  27. spec = request.args.get('spec')
  28. if spec is not None:
  29. spec = int(spec.strip())
  30. filter_wave = request.args.get('filter_wave')
  31. if filter_wave is not None:
  32. filter_wave = int(filter_wave.strip())
  33. return start_time,end_time,card_types,spec,filter_wave
  34. def onError(ex):
  35. logger.error(ex)
  36. data = base64.b64encode(b'').decode("ascii")
  37. return f"<img src='data:image/png;base64,{data}'/>"
  38. @app.route('/plot/ch_ratio')
  39. def ch_ratio():
  40. try:
  41. logger.debug('start chratio')
  42. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  43. chnames = request.args.get('chnames')
  44. chnames = filter_chname(chnames)
  45. painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec, filter_wave=filter_wave)
  46. buf = painter.paint()
  47. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  48. return f"<img src='data:image/png;base64,{data}'/>"
  49. except Exception as ex:
  50. return onError(ex)
  51. @app.route('/plot/mch_ratio')
  52. def mch_ratio():
  53. try:
  54. logger.debug('start mchratio')
  55. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  56. mchids = request.args.get('mchids')
  57. mchids = filter_mchids(mchids)
  58. painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave)
  59. buf = painter.paint()
  60. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  61. return f"<img src='data:image/png;base64,{data}'/>"
  62. except Exception as ex:
  63. return onError(ex)
  64. if __name__ == "__main__":
  65. debug_mode = True
  66. if debug_mode:
  67. app.run(debug=True, host='0.0.0.0', port=5000)
  68. else:
  69. from gevent import monkey
  70. from gevent.pywsgi import WSGIServer
  71. from gevent import signal as geventsig
  72. monkey.patch_all()
  73. http_server = WSGIServer(('0.0.0.0', 5000), app)
  74. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  75. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  76. http_server.serve_forever()