host.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. from flask import Blueprint, request, g
  5. import jimit as ji
  6. from models import Database as db
  7. from models import Utils, Rules
  8. from models.initialize import app
  9. __author__ = 'James Iter'
  10. __date__ = '2017/5/30'
  11. __contact__ = 'james.iter.cn@gmail.com'
  12. __copyright__ = '(c) 2017 by James Iter.'
  13. blueprint = Blueprint(
  14. 'api_host',
  15. __name__,
  16. url_prefix='/api/host'
  17. )
  18. blueprints = Blueprint(
  19. 'api_hosts',
  20. __name__,
  21. url_prefix='/api/hosts'
  22. )
  23. def alive_check(v):
  24. """
  25. JimV-C 2 秒更新一次宿主机信息,这里以 5 秒内没收到更新,作为判断宿主机是否在线的标准
  26. """
  27. if 'timestamp' not in v:
  28. return v
  29. v['alive'] = False
  30. if v['timestamp'] + 5 >= g.ts:
  31. v['alive'] = True
  32. return v
  33. @Utils.dumps2response
  34. def r_get(ids):
  35. args_rules = [
  36. Rules.IDS.value
  37. ]
  38. try:
  39. ji.Check.previewing(args_rules, {args_rules[0][1]: ids})
  40. ret = dict()
  41. ret['state'] = ji.Common.exchange_state(20000)
  42. ret['data'] = list()
  43. if -1 == ids.find(','):
  44. _id = ids
  45. if db.r.hexists(app.config['hosts_info'], _id):
  46. v = json.loads(db.r.hget(app.config['hosts_info'], _id))
  47. v = alive_check(v)
  48. ret['data'] = {_id: v}
  49. else:
  50. for _id in ids.split(','):
  51. if db.r.hexists(app.config['hosts_info'], _id):
  52. v = json.loads(db.r.hget(app.config['hosts_info'], _id))
  53. v = alive_check(v)
  54. ret['data'].append({_id: v})
  55. return ret
  56. except ji.PreviewingError, e:
  57. return json.loads(e.message)
  58. @Utils.dumps2response
  59. def r_get_by_filter():
  60. try:
  61. ret = dict()
  62. ret['state'] = ji.Common.exchange_state(20000)
  63. ret['data'] = list()
  64. for k, v in db.r.hgetall(app.config['hosts_info']).items():
  65. v = json.loads(v)
  66. v = alive_check(v)
  67. ret['data'].append({k: v})
  68. return ret
  69. except ji.PreviewingError, e:
  70. return json.loads(e.message)
  71. @Utils.dumps2response
  72. def r_content_search():
  73. keyword = request.args.get('keyword', '')
  74. args_rules = [
  75. Rules.KEYWORD.value
  76. ]
  77. try:
  78. ji.Check.previewing(args_rules, {'keyword': keyword})
  79. ret = dict()
  80. ret['state'] = ji.Common.exchange_state(20000)
  81. ret['data'] = list()
  82. for k, v in db.r.hgetall(app.config['hosts_info']).items():
  83. v = json.loads(v)
  84. if -1 != v['hostname'].find(keyword):
  85. v = alive_check(v)
  86. ret['data'].append({k: v})
  87. return ret
  88. except ji.PreviewingError, e:
  89. return json.loads(e.message)