host.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. v['node_id'] = _id
  49. ret['data'] = v
  50. else:
  51. for _id in ids.split(','):
  52. if db.r.hexists(app.config['hosts_info'], _id):
  53. v = json.loads(db.r.hget(app.config['hosts_info'], _id))
  54. v = alive_check(v)
  55. v['node_id'] = _id
  56. ret['data'].append(v)
  57. return ret
  58. except ji.PreviewingError, e:
  59. return json.loads(e.message)
  60. @Utils.dumps2response
  61. def r_get_by_filter():
  62. try:
  63. ret = dict()
  64. ret['state'] = ji.Common.exchange_state(20000)
  65. ret['data'] = list()
  66. for k, v in db.r.hgetall(app.config['hosts_info']).items():
  67. v = json.loads(v)
  68. v = alive_check(v)
  69. v['node_id'] = k
  70. ret['data'].append(v)
  71. return ret
  72. except ji.PreviewingError, e:
  73. return json.loads(e.message)
  74. @Utils.dumps2response
  75. def r_content_search():
  76. keyword = request.args.get('keyword', '')
  77. args_rules = [
  78. Rules.KEYWORD.value
  79. ]
  80. try:
  81. ji.Check.previewing(args_rules, {'keyword': keyword})
  82. ret = dict()
  83. ret['state'] = ji.Common.exchange_state(20000)
  84. ret['data'] = list()
  85. for k, v in db.r.hgetall(app.config['hosts_info']).items():
  86. v = json.loads(v)
  87. if -1 != v['hostname'].find(keyword):
  88. v = alive_check(v)
  89. v['node_id'] = k
  90. ret['data'].append(v)
  91. return ret
  92. except ji.PreviewingError, e:
  93. return json.loads(e.message)