plot_control.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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 ChannelCumPainter,MerchantPainter
  12. from refill import filter_chname, filter_cardtype, filter_mchids, get_channels, get_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 = ChannelCumPainter(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/channels')
  49. def channels():
  50. try:
  51. channels = get_channels()
  52. return jsonify(channels)
  53. except Exception as ex:
  54. logger.error(ex)
  55. return jsonify([])
  56. @app.route('/plot/mchids')
  57. def mchids():
  58. try:
  59. mchids = get_mchids()
  60. return jsonify(mchids)
  61. except Exception as ex:
  62. logger.error(ex)
  63. return jsonify([])
  64. @app.route('/plot/mch_ratio')
  65. def mch_ratio():
  66. try:
  67. logger.debug('start mchratio')
  68. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  69. mchids = request.args.get('mchids')
  70. mchids = filter_mchids(mchids)
  71. painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave)
  72. buf = painter.paint_ratios()
  73. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  74. return f"<img src='data:image/png;base64,{data}'/>"
  75. except Exception as ex:
  76. return onError(ex)
  77. @app.route('/plot/mch_order_send')
  78. def mch_order_send():
  79. try:
  80. logger.debug('start mch_order_send')
  81. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  82. mchids = request.args.get('mchids')
  83. mchids = filter_mchids(mchids)
  84. painter = MerchantPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec, filter_wave=filter_wave)
  85. buf = painter.paint_refilling()
  86. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  87. return f"<img src='data:image/png;base64,{data}'/>"
  88. except Exception as ex:
  89. return onError(ex)
  90. if __name__ == "__main__":
  91. debug_mode = True
  92. if debug_mode:
  93. app.run(debug=True, host='0.0.0.0', port=5000)
  94. else:
  95. from gevent import monkey
  96. from gevent.pywsgi import WSGIServer
  97. from gevent import signal as geventsig
  98. monkey.patch_all()
  99. http_server = WSGIServer(('0.0.0.0', 5000), app)
  100. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  101. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  102. http_server.serve_forever()