app.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. from gevent import monkey
  2. from gevent.pywsgi import WSGIServer
  3. from gevent import signal as geventsig
  4. import gevent
  5. from flask import Flask
  6. import base64
  7. from io import BytesIO
  8. from matplotlib.figure import Figure
  9. import json
  10. from DataCenter import dataCenter
  11. from MchDataCenter import mchDataCenter
  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. import sys, getopt
  19. app = Flask(__name__)
  20. app.debug = True
  21. curname = __name__
  22. logging.basicConfig(filename='/var/www/html/data/log/flask.log',
  23. format='%(levelname)10s %(asctime)s %(name)10s %(thread)d %(message)s',
  24. level=logging.DEBUG)
  25. logger = logging.getLogger('plot')
  26. @app.route('/plot/ch_ratio')
  27. def ch_ratio():
  28. from refill import ChannelPainter
  29. from refill import filter_chname,filter_cardtype
  30. try:
  31. logger.debug('start chratio')
  32. cur_time = int(time.time())
  33. start_time = request.args.get('start_time')
  34. start_time = cur_time - 7200 if start_time is None else int(start_time.strip())
  35. end_time = request.args.get('end_time')
  36. end_time = cur_time if end_time is None else int(end_time.strip())
  37. stime = lambda t: time.strftime('%d-%H:%M:%S', time.localtime(t))
  38. logger.debug("start_time=%s end_time=%s",stime(start_time) ,stime(end_time))
  39. chnames = request.args.get('chnames')
  40. chnames = filter_chname(chnames)
  41. card_types = request.args.get('card_types')
  42. card_types = filter_cardtype(card_types)
  43. spec = request.args.get('spec')
  44. if spec is not None:
  45. spec = int(spec.strip())
  46. painter = ChannelPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec)
  47. buf = painter.paint()
  48. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  49. return f"<img src='data:image/png;base64,{data}'/>"
  50. except Exception as ex:
  51. logger.error(ex)
  52. return f"<img src='data:image/png;base64,{[]}'/>"
  53. @app.route('/plot/index')
  54. def index():
  55. app.logger.debug('start')
  56. time_stamp = request.args.get('time_stamp')
  57. interval = request.args.get('interval')
  58. chname = request.args.get('chname')
  59. quality = request.args.get('quality')
  60. card_type = request.args.get('card_type')
  61. amount = request.args.get('amount')
  62. app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
  63. time_stamp, interval, chname, quality, card_type, amount)
  64. if time_stamp is None:
  65. time_stamp = time.time()
  66. else:
  67. time_stamp = int(time_stamp)
  68. if interval is None:
  69. interval = 300
  70. else:
  71. interval = int(interval)
  72. buf = dataCenter.draw_plot(time_stamp,
  73. interval=interval,
  74. chname=chname,
  75. quality=quality,
  76. card_type=card_type,
  77. amount=amount)
  78. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  79. return f"<img src='data:image/png;base64,{data}'/>"
  80. @app.route('/plot/days')
  81. def days():
  82. s_time = time.time()
  83. dates = dataCenter.days()
  84. e_time = time.time()
  85. print('time=', e_time - s_time)
  86. dates.reverse()
  87. dates = dates[0:30]
  88. return jsonify(dates)
  89. @app.route('/plot/paths')
  90. def paths():
  91. time_stamp = request.args.get('time_stamp')
  92. time_stamp = int(time_stamp)
  93. paths = dataCenter.paths(time_stamp)
  94. return jsonify(paths)
  95. @app.route('/plot/mchdays')
  96. def mchdays():
  97. dates = mchDataCenter.days()
  98. dates.reverse()
  99. dates = dates[0:30]
  100. return jsonify(dates)
  101. @app.route('/plot/mchpaths')
  102. def mchpaths():
  103. time_stamp = request.args.get('time_stamp')
  104. time_stamp = int(time_stamp)
  105. paths = mchDataCenter.paths(time_stamp)
  106. return jsonify(paths)
  107. @app.route('/plot/mchplot')
  108. def mchplot():
  109. time_stamp = request.args.get('time_stamp')
  110. interval = request.args.get('interval')
  111. mchid = request.args.get('mchid')
  112. quality = request.args.get('quality')
  113. card_type = request.args.get('card_type')
  114. amount = request.args.get('amount')
  115. app.logger.info('time_stamp=%s interval= %s chname=%s quality=%s card_type=%s amount=%s',
  116. time_stamp, interval, mchid, quality, card_type, amount)
  117. if time_stamp is None:
  118. time_stamp = time.time()
  119. else:
  120. time_stamp = int(time_stamp)
  121. if interval is None:
  122. interval = 300
  123. else:
  124. interval = int(interval)
  125. buf = mchDataCenter.draw_plot(time_stamp, interval=interval, mchid=mchid, quality=quality, card_type=card_type,
  126. amount=amount)
  127. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  128. return f"<img src='data:image/png;base64,{data}'/>"
  129. if __name__ == "__main__":
  130. debug_mode = False
  131. if debug_mode:
  132. app.run(debug=True, host='0.0.0.0', port=5000)
  133. else:
  134. from gevent import monkey
  135. from gevent.pywsgi import WSGIServer
  136. from gevent import signal as geventsig
  137. monkey.patch_all()
  138. http_server = WSGIServer(('0.0.0.0', 5000), app)
  139. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  140. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  141. http_server.serve_forever()