app.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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 MchDataCenter import mchDataCenter
  13. # from plog import initLog
  14. from flask import request, jsonify
  15. import logging
  16. from logging.handlers import RotatingFileHandler
  17. import time
  18. import signal as sig
  19. import sys, getopt
  20. app = Flask(__name__)
  21. app.debug = True
  22. curname = __name__
  23. @app.route('/plot/index')
  24. def index():
  25. time_stamp = request.args.get('time_stamp')
  26. interval = request.args.get('interval')
  27. chname = request.args.get('chname')
  28. quality = request.args.get('quality')
  29. card_type = request.args.get('card_type')
  30. amount = request.args.get('amount')
  31. app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
  32. time_stamp, interval, chname, quality, card_type, amount)
  33. if time_stamp is None:
  34. time_stamp = time.time()
  35. else:
  36. time_stamp = int(time_stamp)
  37. if interval is None:
  38. interval = 300
  39. else:
  40. interval = int(interval)
  41. buf = dataCenter.draw_plot(time_stamp,
  42. interval=interval,
  43. chname=chname,
  44. quality=quality,
  45. card_type=card_type,
  46. amount=amount)
  47. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  48. return f"<img src='data:image/png;base64,{data}'/>"
  49. @app.route('/plot/days')
  50. def days():
  51. s_time = time.time()
  52. dates = dataCenter.days()
  53. e_time = time.time()
  54. print('time=', e_time - s_time)
  55. dates.reverse()
  56. dates = dates[0:30]
  57. return jsonify(dates)
  58. @app.route('/plot/paths')
  59. def paths():
  60. time_stamp = request.args.get('time_stamp')
  61. time_stamp = int(time_stamp)
  62. paths = dataCenter.paths(time_stamp)
  63. return jsonify(paths)
  64. @app.route('/plot/mchdays')
  65. def mchdays():
  66. dates = mchDataCenter.days()
  67. dates.reverse()
  68. dates = dates[0:30]
  69. return jsonify(dates)
  70. @app.route('/plot/mchpaths')
  71. def mchpaths():
  72. time_stamp = request.args.get('time_stamp')
  73. time_stamp = int(time_stamp)
  74. paths = mchDataCenter.paths(time_stamp)
  75. return jsonify(paths)
  76. @app.route('/plot/mchplot')
  77. def mchplot():
  78. time_stamp = request.args.get('time_stamp')
  79. interval = request.args.get('interval')
  80. mchid = request.args.get('mchid')
  81. quality = request.args.get('quality')
  82. card_type = request.args.get('card_type')
  83. amount = request.args.get('amount')
  84. app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
  85. time_stamp, interval, mchid, quality, card_type, amount)
  86. if time_stamp is None:
  87. time_stamp = time.time()
  88. else:
  89. time_stamp = int(time_stamp)
  90. if interval is None:
  91. interval = 300
  92. else:
  93. interval = int(interval)
  94. buf = mchDataCenter.draw_plot(time_stamp, interval=interval, mchid=mchid, quality=quality, card_type=card_type,
  95. amount=amount)
  96. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  97. return f"<img src='data:image/png;base64,{data}'/>"
  98. if __name__ == "__main__":
  99. handler = logging.FileHandler(filename='/var/www/html/data/log/plot.log')
  100. handler.setLevel(logging.DEBUG)
  101. logging_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  102. datefmt='%Y-%m-%d %H:%M:%S')
  103. handler.setFormatter(logging_format)
  104. app.logger.addHandler(handler)
  105. logger = logging.getLogger('app')
  106. logger.info('app')
  107. monkey.patch_all()
  108. http_server = WSGIServer(('0.0.0.0', 5000), app)
  109. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  110. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  111. http_server.serve_forever()