app.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. from flask import Flask
  2. import base64
  3. from io import BytesIO
  4. from matplotlib.figure import Figure
  5. import json
  6. from flask import request, jsonify
  7. import logging
  8. from logging.handlers import RotatingFileHandler
  9. import time
  10. import signal as sig
  11. import sys, getopt
  12. app = Flask(__name__)
  13. curname = __name__
  14. logging.basicConfig(filename='/var/www/html/data/log/flask.log',
  15. format='%(levelname)10s %(asctime)s %(name)10s %(thread)d %(message)s',
  16. level=logging.DEBUG)
  17. logger = logging.getLogger('plot')
  18. from refill import ChannelCumPainter, ChannelCovPainter, ChannelCovSuccPainter
  19. from refill import MerchantCumRatioPainter, MerchantAmountPainter, MerchantCovRatioPainter,ChannelSpeedAnalyzePainter
  20. from refill import filter_chname, filter_cardtype, filter_mchids, get_channels, get_mchids
  21. from refill import NetcheckCovPainter, get_net_channels
  22. def parse_parmeter():
  23. end_time = request.args.get('end_time')
  24. end_time = None if end_time is None else int(end_time.strip())
  25. start_time = request.args.get('start_time')
  26. start_time = None if start_time is None else int(start_time.strip())
  27. card_types = request.args.get('card_types')
  28. card_types = filter_cardtype(card_types)
  29. spec = request.args.get('spec')
  30. if spec is not None:
  31. spec = int(spec.strip())
  32. filter_wave = request.args.get('filter_wave')
  33. if filter_wave is not None:
  34. filter_wave = int(filter_wave.strip())
  35. return start_time, end_time, card_types, spec, filter_wave
  36. def onError(ex):
  37. logger.error(ex)
  38. return jsonify({'state': 'fail'})
  39. @app.route('/plot/ch_ratio')
  40. def ch_ratio():
  41. try:
  42. logger.debug('start chratio')
  43. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  44. chnames = request.args.get('chnames')
  45. chnames = filter_chname(chnames)
  46. painter = ChannelCumPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec,
  47. filter_wave=filter_wave)
  48. buf, ratios = painter.paint()
  49. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  50. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  51. except Exception as ex:
  52. return onError(ex)
  53. @app.route('/plot/ch_speed_ratio')
  54. def ch_speed_ratio():
  55. try:
  56. logger.debug('start ch_speed_ratio')
  57. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  58. chnames = request.args.get('chnames')
  59. chnames = filter_chname(chnames)
  60. period = request.args.get('period')
  61. period = 60 if period is None else int(period.strip())
  62. painter = ChannelSpeedAnalyzePainter(start_time=start_time, end_time=end_time,
  63. chnames=chnames, card_types=card_types, spec=spec,
  64. period=period)
  65. buf , ratios = painter.paint()
  66. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  67. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  68. except Exception as ex:
  69. return onError(ex)
  70. @app.route('/plot/ch_covratio')
  71. def ch_covratio():
  72. try:
  73. logger.debug('start ch_covratio')
  74. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  75. chnames = request.args.get('chnames')
  76. chnames = filter_chname(chnames)
  77. painter = ChannelCovPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec,
  78. filter_wave=filter_wave)
  79. buf, ratios = painter.paint()
  80. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  81. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  82. except Exception as ex:
  83. return onError(ex)
  84. @app.route('/plot/ch_covsuccs')
  85. def ch_covsuccs():
  86. try:
  87. logger.debug('start ch_covratio')
  88. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  89. chnames = request.args.get('chnames')
  90. chnames = filter_chname(chnames)
  91. painter = ChannelCovSuccPainter(start_time=start_time, end_time=end_time, chnames=chnames, card_types=card_types, spec=spec,
  92. filter_wave=filter_wave)
  93. buf, ratios = painter.paint()
  94. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  95. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  96. except Exception as ex:
  97. return onError(ex)
  98. @app.route('/plot/net_check')
  99. def net_check():
  100. try:
  101. logger.debug('start net_check')
  102. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  103. chnames = request.args.get('chnames')
  104. chnames = filter_chname(chnames)
  105. painter = NetcheckCovPainter(start_time=start_time, end_time=end_time, chnames=chnames, filter_wave=filter_wave)
  106. buf, ratios = painter.paint()
  107. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  108. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  109. except Exception as ex:
  110. return onError(ex)
  111. @app.route('/plot/net_channels')
  112. def net_channels():
  113. try:
  114. channels = get_net_channels()
  115. return jsonify(channels)
  116. except Exception as ex:
  117. logger.error(ex)
  118. return jsonify([])
  119. @app.route('/plot/mchids')
  120. def mchids():
  121. try:
  122. mchids = get_mchids()
  123. return jsonify(mchids)
  124. except Exception as ex:
  125. logger.error(ex)
  126. return jsonify([])
  127. @app.route('/plot/mch_ratio')
  128. def mch_ratio():
  129. try:
  130. logger.debug('start mchratio')
  131. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  132. mchids = request.args.get('mchids')
  133. mchids = filter_mchids(mchids)
  134. painter = MerchantCumRatioPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec,
  135. filter_wave=filter_wave)
  136. buf, ratios = painter.paint()
  137. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  138. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  139. except Exception as ex:
  140. return onError(ex)
  141. @app.route('/plot/mch_covratio')
  142. def mch_covratio():
  143. try:
  144. logger.debug('start mchratio')
  145. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  146. mchids = request.args.get('mchids')
  147. mchids = filter_mchids(mchids)
  148. painter = MerchantCovRatioPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec,
  149. filter_wave=filter_wave)
  150. buf, ratios = painter.paint()
  151. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  152. return jsonify({'img': data, 'ratios': ratios, 'state': 'success'})
  153. except Exception as ex:
  154. return onError(ex)
  155. @app.route('/plot/mch_order_send')
  156. def mch_order_send():
  157. try:
  158. logger.debug('start mch_order_send')
  159. start_time, end_time, card_types, spec, filter_wave = parse_parmeter()
  160. mchids = request.args.get('mchids')
  161. mchids = filter_mchids(mchids)
  162. painter = MerchantAmountPainter(start_time=start_time, end_time=end_time, mchids=mchids, card_types=card_types, spec=spec,
  163. filter_wave=filter_wave)
  164. buf, mchids = painter.paint()
  165. data = base64.b64encode(buf.getbuffer()).decode("ascii")
  166. return jsonify({'img': data, 'mchids': mchids, 'state': 'success'})
  167. except Exception as ex:
  168. return onError(ex)
  169. if __name__ == "__main__":
  170. debug_mode = False
  171. if debug_mode:
  172. app.run(debug=True, host='0.0.0.0', port=5000)
  173. else:
  174. from gevent import monkey
  175. from gevent.pywsgi import WSGIServer
  176. from gevent import signal as geventsig
  177. app.debug = False
  178. monkey.patch_all()
  179. http_server = WSGIServer(('0.0.0.0', 5000), app)
  180. geventsig.signal(sig.SIGTERM, lambda: http_server.stop())
  181. geventsig.signal(sig.SIGINT, lambda: http_server.stop())
  182. http_server.serve_forever()