dashboard.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. from flask import Blueprint, render_template, url_for, request
  5. import requests
  6. __author__ = 'James Iter'
  7. __date__ = '2017/8/17'
  8. __contact__ = 'james.iter.cn@gmail.com'
  9. __copyright__ = '(c) 2017 by James Iter.'
  10. blueprint = Blueprint(
  11. 'v_dashboard',
  12. __name__,
  13. url_prefix='/'
  14. )
  15. def show():
  16. resource_path = request.path
  17. host_url = request.host_url.rstrip('/')
  18. hosts_url = host_url + url_for('api_hosts.r_get_by_filter')
  19. guests_distribute_count_url = host_url + url_for('api_guests.r_distribute_count')
  20. disks_distribute_count_url = host_url + url_for('api_disks.r_distribute_count')
  21. guests_current_top_10_url = host_url + url_for('api_performance.r_current_top_10')
  22. hosts_ret = requests.get(url=hosts_url)
  23. hosts_ret = json.loads(hosts_ret.content)
  24. guests_distribute_count_ret = requests.get(url=guests_distribute_count_url)
  25. guests_distribute_count_ret = json.loads(guests_distribute_count_ret.content)
  26. disks_distribute_count_ret = requests.get(url=disks_distribute_count_url)
  27. disks_distribute_count_ret = json.loads(disks_distribute_count_ret.content)
  28. guests_current_top_10_ret = requests.get(url=guests_current_top_10_url)
  29. guests_current_top_10_ret = json.loads(guests_current_top_10_ret.content)
  30. guests_url = host_url + url_for('api_guests.r_get_by_filter')
  31. guests_uuid = list()
  32. for k, v in guests_current_top_10_ret['data'].items():
  33. for item in v:
  34. if 'guest_uuid' not in item:
  35. break
  36. if item['guest_uuid'] not in guests_uuid:
  37. guests_uuid.append(item['guest_uuid'])
  38. guests_url = guests_url + '?filter=uuid:in:' + ','.join(guests_uuid)
  39. guests_ret = requests.get(url=guests_url)
  40. guests_ret = json.loads(guests_ret.content)
  41. # Guest uuid 与 Guest 的映射
  42. guests_mapping_by_uuid = dict()
  43. for guest in guests_ret['data']:
  44. guests_mapping_by_uuid[guest['uuid']] = guest
  45. hosts_sum = {'cpu': 0, 'memory': 0}
  46. for host in hosts_ret['data']:
  47. hosts_sum['cpu'] += host['cpu']
  48. hosts_sum['memory'] += host['memory']
  49. return render_template('dashboard.html', hosts_sum=hosts_sum, resource_path=resource_path,
  50. guests_distribute_count_ret=guests_distribute_count_ret,
  51. disks_distribute_count_ret=disks_distribute_count_ret,
  52. guests_current_top_10_ret=guests_current_top_10_ret,
  53. guests_mapping_by_uuid=guests_mapping_by_uuid)