plot_control.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 = int(request.args.get('start_time') or (cur_time - 7200))
  23. end_time = int(request.args.get('end_time') or cur_time)
  24. chnames = request.args.get('chnames') or None
  25. chnames = filter_chname(chnames)
  26. card_types = request.args.get('card_types') or None
  27. card_types = filter_cardtype(card_types)
  28. spec = request.args.get('spec') or None
  29. if spec is not None:
  30. spec = int(spec.strip())
  31. painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec)
  32. buf = painter.paint()
  33. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  34. return f"<img src='data:image/png;base64,{data}'/>"
  35. except Exception as ex:
  36. logger.error(ex)
  37. return f"<img src='data:image/png;base64,{[]}'/>"
  38. if __name__ == "__main__":
  39. debug_mode = True
  40. if debug_mode:
  41. app.run(debug=True, host='0.0.0.0', port=5000)
  42. else:
  43. from gevent import monkey
  44. from gevent.pywsgi import WSGIServer
  45. from gevent import signal as geventsig
  46. monkey.patch_all()
  47. http_server = WSGIServer(('0.0.0.0', 5000), app)
  48. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  49. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  50. http_server.serve_forever()