dashboard.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import requests
  4. import json
  5. import copy
  6. import jimit as ji
  7. from flask import url_for, request, Blueprint
  8. from models import Utils
  9. __author__ = 'James Iter'
  10. __date__ = '2018/9/9'
  11. __contact__ = 'james.iter.cn@gmail.com'
  12. __copyright__ = '(c) 2018 by James Iter.'
  13. blueprint = Blueprint(
  14. 'api_dashboard',
  15. __name__,
  16. url_prefix='/api/dashboard'
  17. )
  18. blueprints = Blueprint(
  19. 'api_dashboards',
  20. __name__,
  21. url_prefix='/api/dashboards'
  22. )
  23. @Utils.dumps2response
  24. def r_show():
  25. ret = dict()
  26. ret['state'] = ji.Common.exchange_state(20000)
  27. # alive 的布尔值 True,在 url 中传输前,会自动转换为字符串 'True'
  28. hosts_url = url_for('api_hosts.r_get_by_filter', _external=True, alive=True)
  29. guests_distribute_count_url = url_for('api_guests.r_distribute_count', _external=True)
  30. disks_distribute_count_url = url_for('api_disks.r_distribute_count', _external=True)
  31. guests_current_top_10_url = url_for('api_guest_performance.r_current_top_10', _external=True)
  32. hosts_current_top_10_url = url_for('api_host_performance.r_current_top_10', _external=True)
  33. hosts_ret = requests.get(url=hosts_url, cookies=request.cookies)
  34. hosts_ret = json.loads(hosts_ret.content)
  35. # Host node_id 与 Host 的映射
  36. hosts_mapping_by_node_id = dict()
  37. for host in hosts_ret['data']:
  38. hosts_mapping_by_node_id[int(host['node_id'])] = host
  39. guests_distribute_count_ret = requests.get(url=guests_distribute_count_url, cookies=request.cookies)
  40. guests_distribute_count_ret = json.loads(guests_distribute_count_ret.content)
  41. disks_distribute_count_ret = requests.get(url=disks_distribute_count_url, cookies=request.cookies)
  42. disks_distribute_count_ret = json.loads(disks_distribute_count_ret.content)
  43. guests_current_top_10_ret = requests.get(url=guests_current_top_10_url, cookies=request.cookies)
  44. guests_current_top_10_ret = json.loads(guests_current_top_10_ret.content)
  45. guests_uuid = list()
  46. for k, v in guests_current_top_10_ret['data'].items():
  47. for item in v:
  48. if 'guest_uuid' not in item:
  49. break
  50. if item['guest_uuid'] not in guests_uuid:
  51. guests_uuid.append(item['guest_uuid'])
  52. guests_url = url_for('api_guests.r_get_by_filter', _external=True, filter='uuid:in:' + ','.join(guests_uuid))
  53. guests_ret = requests.get(url=guests_url, cookies=request.cookies)
  54. guests_ret = json.loads(guests_ret.content)
  55. # Guest uuid 与 Guest 的映射
  56. guests_mapping_by_uuid = dict()
  57. for guest in guests_ret['data']:
  58. guests_mapping_by_uuid[guest['uuid']] = guest
  59. disks_uuid = list()
  60. for k, v in guests_current_top_10_ret['data'].items():
  61. for item in v:
  62. if 'disk_uuid' not in item:
  63. break
  64. if item['disk_uuid'] not in disks_uuid:
  65. disks_uuid.append(item['disk_uuid'])
  66. disks_url = url_for('api_disks.r_get_by_filter', _external=True, filter='uuid:in:' + ','.join(disks_uuid))
  67. disks_ret = requests.get(url=disks_url, cookies=request.cookies)
  68. disks_ret = json.loads(disks_ret.content)
  69. # Disk uuid 与 Disk 的映射
  70. disks_mapping_by_uuid = dict()
  71. for disk in disks_ret['data']:
  72. disks_mapping_by_uuid[disk['uuid']] = disk
  73. hosts_current_top_10_ret = requests.get(url=hosts_current_top_10_url, cookies=request.cookies)
  74. hosts_current_top_10_ret = json.loads(hosts_current_top_10_ret.content)
  75. hosts_current_top_10_ret['data']['memory_rate'] = copy.copy(hosts_current_top_10_ret['data']['cpu_load'])
  76. for i in range(hosts_current_top_10_ret['data']['memory_rate'].__len__()):
  77. memory_total = hosts_mapping_by_node_id[hosts_current_top_10_ret['data']['memory_rate'][i]['node_id']]['memory']
  78. memory_available = hosts_current_top_10_ret['data']['memory_rate'][i]['memory_available']
  79. memory_used = memory_total - memory_available
  80. hosts_current_top_10_ret['data']['memory_rate'][i]['memory_rate'] = int(memory_used / float(memory_total) * 100)
  81. hosts_current_top_10_ret['data']['memory_rate'].sort(key=lambda _k: _k['memory_rate'], reverse=True)
  82. hosts_sum = {'cpu': 0, 'memory': 0}
  83. for host in hosts_ret['data']:
  84. hosts_sum['cpu'] += host['cpu']
  85. hosts_sum['memory'] += host['memory']
  86. ret['data'] = {
  87. 'hosts_sum': hosts_sum,
  88. 'guests_distribute_count_ret': guests_distribute_count_ret,
  89. 'disks_distribute_count_ret': disks_distribute_count_ret,
  90. 'guests_current_top_10_ret': guests_current_top_10_ret,
  91. 'guests_mapping_by_uuid': guests_mapping_by_uuid,
  92. 'disks_mapping_by_uuid': disks_mapping_by_uuid,
  93. 'hosts_current_top_10_ret': hosts_current_top_10_ret,
  94. 'hosts_mapping_by_node_id': hosts_mapping_by_node_id
  95. }
  96. return ret