plot_control.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. end_time = request.args.get('end_time')
  19. end_time = None if end_time is None else int(end_time.strip())
  20. start_time = request.args.get('start_time')
  21. start_time = None if start_time is None else int(start_time.strip())
  22. card_types = request.args.get('card_types')
  23. card_types = filter_cardtype(card_types)
  24. spec = request.args.get('spec')
  25. if spec is not None:
  26. spec = int(spec.strip())
  27. filter_wave = request.args.get('filter_wave')
  28. if filter_wave is not None:
  29. filter_wave = int(filter_wave.strip())
  30. return start_time,end_time,card_types,spec,filter_wave
  31. def onError(ex):
  32. logger.error(ex)
  33. data = base64.b64encode(b'').decode("ascii")
  34. return f"<img src='data:image/png;base64,{data}'/>"
  35. @app.route('/plot/ch_ratio')
  36. def ch_ratio():
  37. try:
  38. logger.debug('start chratio')
  39. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  40. chnames = request.args.get('chnames')
  41. chnames = filter_chname(chnames)
  42. painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec, filter_wave=filter_wave)
  43. buf = painter.paint()
  44. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  45. return f"<img src='data:image/png;base64,{data}'/>"
  46. except Exception as ex:
  47. return onError(ex)
  48. @app.route('/plot/mch_ratio')
  49. def mch_ratio():
  50. try:
  51. logger.debug('start mchratio')
  52. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  53. mchids = request.args.get('mchids')
  54. mchids = filter_mchids(mchids)
  55. painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave)
  56. buf = painter.paint_ratios()
  57. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  58. return f"<img src='data:image/png;base64,{data}'/>"
  59. except Exception as ex:
  60. return onError(ex)
  61. @app.route('/plot/mch_order_send')
  62. def mch_order_send():
  63. try:
  64. logger.debug('start mch_order_send')
  65. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  66. mchids = request.args.get('mchids')
  67. mchids = filter_mchids(mchids)
  68. painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave)
  69. buf = painter.paint_refilling()
  70. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  71. return f"<img src='data:image/png;base64,{data}'/>"
  72. except Exception as ex:
  73. return onError(ex)
  74. if __name__ == "__main__":
  75. debug_mode = True
  76. if debug_mode:
  77. app.run(debug=True, host='0.0.0.0', port=5000)
  78. else:
  79. from gevent import monkey
  80. from gevent.pywsgi import WSGIServer
  81. from gevent import signal as geventsig
  82. monkey.patch_all()
  83. http_server = WSGIServer(('0.0.0.0', 5000), app)
  84. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  85. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  86. http_server.serve_forever()