service.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/python2.7
  2. #-*- coding: utf-8 -*-
  3. #auth: robert_du
  4. from flask import Flask, make_response, jsonify
  5. from flask_restful import Api, Resource, reqparse
  6. from flask_apscheduler import APScheduler
  7. from datetime import datetime,timedelta
  8. from app.logger import logs
  9. import json
  10. app = Flask(__name__)
  11. app.config['JSON_AS_ASCII'] = False
  12. app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
  13. api = Api(app)
  14. from app.zbx_tools import zabbix_api
  15. Flags = {
  16. "novelapi": {"name": "book-api-rs", "key_": "8080"},
  17. "novel-newmedia": {"name": "wejuan-h5", "key_": "8080"},
  18. "esbookweb": {"name": "esbook-webview", "key_": "8080"},
  19. "novelMtouch": {"name": "book-touchrs", "key_": "8080"},
  20. 'promote-server': {"name": "ec-media-tengine", "key_": "8058"},
  21. "wxmsg-sender": {"name": "ec-media-redis","key_": "8058"},
  22. "query-analyzer": {"name": "qd01-tech2-qs", "key_": "9005"},
  23. "novel-hotword": {"name": "hotword-rs", "key_": "net.tcp.port[{HOST.IP},80]"},
  24. "novel_search_front": {"name": "hotword-rs", "key_": "net.tcp.port[{HOST.IP},8080]"},
  25. "novelsuggestion": {"name": "search-rs", "key_": "8081"},
  26. }
  27. parser = reqparse.RequestParser()
  28. parser.add_argument('ident', type=str, required=True, help=u'ident can not be empty!\nfor example ident=novelapi')
  29. parser.add_argument('action', type=str, required=True, help=u'action can not be empty!\nfor example action=item_disable,action=item_enable')
  30. messages = {
  31. 'status':0,
  32. 'message':'',
  33. }
  34. seduler = APScheduler()
  35. seduler.init_app(app)
  36. seduler.start()
  37. logger = logs()
  38. class Index(Resource):
  39. def get(self):
  40. return "hello world!"
  41. def schedule(ident):
  42. name = Flags.get(ident)['name']
  43. search_key = Flags.get(ident)['key_']
  44. zbx = zabbix_api()
  45. zbx.item_enable(name,search_key)
  46. def add_task(ident):
  47. if seduler.get_job(ident):
  48. seduler.remove_job(ident)
  49. else:
  50. dt = datetime.now()+timedelta(minutes=30)
  51. logger.info("定时任务: %s,%s,%s,%s,%s,%s" % (dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second))
  52. seduler.add_job(id=ident,func=schedule,trigger='date',run_date=datetime(dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second),replace_existing = True,args=[ident,])
  53. class ApiInterface(Resource):
  54. def get(self):
  55. data= parser.parse_args()
  56. print data['action'],data['ident']
  57. if not Flags.has_key(data['ident']):
  58. return jsonify({"message": "object whose ident is %s was not found." % data['ident']})
  59. if data['action'] == 'item_disable':
  60. name = Flags.get(data['ident'])['name']
  61. search_key = Flags.get(data['ident'])['key_']
  62. zbx = zabbix_api()
  63. #return zbx.item_disable(name,search_key)
  64. result = zbx.item_disable(name,search_key)
  65. add_task(data['ident'])
  66. return result
  67. elif data['action'] == 'item_enable':
  68. name = Flags.get(data['ident'])['name']
  69. search_key = Flags.get(data['ident'])['key_']
  70. if seduler.get_job(data['ident']):
  71. seduler.remove_job(data['ident'])
  72. zbx = zabbix_api()
  73. return zbx.item_enable(name,search_key)
  74. else:
  75. return {'status': 404, 'message': u'action parameter is invalid!'}
  76. api.add_resource(Index, '/index')
  77. api.add_resource(ApiInterface, '/api/')
  78. if __name__ == '__main__':
  79. app.run(host='0.0.0.0',port=8011,debug=True)