plot_control.py 2.2 KB

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