app.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import os
  2. from gevent import monkey
  3. from gevent.pywsgi import WSGIServer
  4. from gevent import signal as geventsig
  5. import gevent
  6. from flask import Flask
  7. import base64
  8. from io import BytesIO
  9. from matplotlib.figure import Figure
  10. import json
  11. from DataCenter import dataCenter
  12. # from plog import initLog
  13. from flask import request, jsonify
  14. import logging
  15. from logging.handlers import RotatingFileHandler
  16. import time
  17. import signal as sig
  18. app = Flask(__name__)
  19. app.debug = True
  20. curname = __name__
  21. @app.route('/plot/index')
  22. def index():
  23. time_stamp = request.args.get('time_stamp')
  24. interval = request.args.get('interval')
  25. chname = request.args.get('chname')
  26. quality = request.args.get('quality')
  27. card_type = request.args.get('card_type')
  28. amount = request.args.get('amount')
  29. app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
  30. time_stamp, interval, chname, quality, card_type, amount)
  31. if time_stamp is None:
  32. time_stamp = time.time()
  33. else:
  34. time_stamp = int(time_stamp)
  35. if interval is None:
  36. interval = 300
  37. else:
  38. interval = int(interval)
  39. # buf = dataCenter.draw_plot(1618243200, chname=chname)
  40. # , quality=quality, card_type=card_type, interval=interval,
  41. # amount=amount)1618502478
  42. buf = dataCenter.draw_plot(time_stamp, interval=interval, chname=chname, quality=quality, card_type=card_type,
  43. amount=amount)
  44. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  45. return f"<img src='data:image/png;base64,{data}'/>"
  46. @app.route('/plot/days')
  47. def days():
  48. datas = dataCenter.days()
  49. return jsonify(datas)
  50. @app.route('/plot/paths')
  51. def paths():
  52. time_stamp = request.args.get('time_stamp')
  53. time_stamp = int(time_stamp)
  54. paths = dataCenter.paths(time_stamp)
  55. return jsonify(paths)
  56. if __name__ == "__main__":
  57. handler = logging.FileHandler(filename='/var/www/html/data/log/plot.log')
  58. handler.setLevel(logging.DEBUG)
  59. logging_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  60. datefmt='%Y-%m-%d %H:%M:%S')
  61. handler.setFormatter(logging_format)
  62. app.logger.addHandler(handler)
  63. logger = logging.getLogger('app')
  64. logger.info('app')
  65. monkey.patch_all()
  66. http_server = WSGIServer(('0.0.0.0', 5000), app)
  67. def shutdown():
  68. print('Shutting down ...')
  69. http_server.stop()
  70. exit(sig.SIGTERM)
  71. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  72. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  73. http_server.serve_forever()