plot_control.py 3.2 KB

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