1 # -*- coding: utf-8 -*-
3 # This file is part of Karesansui.
5 # Copyright (C) 2010 HDE, Inc.
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
17 from karesansui.lib.rest import Rest, auth
18 from karesansui.lib.virt.virt import KaresansuiVirtConnection
19 from karesansui.lib.rrd.rrd import RRD
20 from karesansui.lib.utils import is_param, is_empty, \
21 str2datetime, create_epochsec, get_proc_cpuinfo, \
22 get_fs_info, get_hdd_list, get_ifconfig_info, \
25 from karesansui.lib.const import DEFAULT_LANGS, COLLECTD_DF_RRPORT_BY_DEVICE
27 class HostBy1ReportBy1(Rest):
30 def _GET(self, *param, **params):
31 host_id = self.chk_hostby1(param)
32 if host_id is None: return web.notfound()
33 self.view.host_id = host_id
36 if target is None: return web.notfound()
37 self.view.target = target
43 for dev in range(0, len(get_proc_cpuinfo())):
44 if rrd.check_rrd_file_exist("cpu", dev):
46 graph_type = ['default']
47 elif target == "memory":
48 dev_list = ['default']
49 graph_type = ['default']
51 df_list = get_fs_info()
53 if COLLECTD_DF_RRPORT_BY_DEVICE is True:
54 dev = fs['Filesystem']
55 dev = re.sub(r'^/dev/', '', dev)
56 dev = re.sub(r'/', '_', dev)
62 dev = re.sub(r'^/', '', dev)
63 dev = re.sub(r'/', '_', dev)
64 if rrd.check_rrd_file_exist("df", dev):
66 graph_type = ['default']
68 elif target == "disk":
69 disk_list = get_hdd_list()
70 for disk in disk_list:
72 dev = re.sub(r'^/dev/', '', dev)
73 if rrd.check_rrd_file_exist("disk", dev):
75 graph_type = ['merged', 'octets', 'ops', 'time']
77 elif target == "interface":
78 if_list = get_ifconfig_info().keys()
80 if rrd.check_rrd_file_exist("interface", dev):
82 graph_type = ['packets', 'octets', 'errors']
84 elif target == "load":
85 dev_list = ['default']
86 graph_type = ['default']
87 elif target == "uptime":
88 dev_list = ['default']
89 graph_type = ['default']
90 elif target == "users":
91 dev_list = ['default']
92 graph_type = ['default']
93 elif target == "libvirt":
94 virt_cpu_type = ['default']
95 virt_disk_type = ['octets', 'ops']
96 virt_interface_type = ['packets', 'octets', 'errors', 'dropped']
101 kvc = KaresansuiVirtConnection()
103 for domname in get_dom_list():
104 virt_list[domname] = {}
106 if rrd.set_rrd_dir_host(domname) is False:
107 virt_file_exist[domname] = False
110 virt = kvc.search_kvg_guests(domname)[0]
112 virt_list[domname]['vcpu'] = {}
113 if rrd.check_rrd_file_exist("libvirt", "total", "vcpu"):
114 virt_list[domname]['vcpu']['total'] = virt_cpu_type
115 for i in range(virt.get_vcpus_info()['max_vcpus']):
116 if rrd.check_rrd_file_exist("libvirt", i, "vcpu"):
117 virt_list[domname]['vcpu'][i] = virt_cpu_type
119 virt_list[domname]['disk'] = {}
120 for disk in virt.get_disk_info():
121 if rrd.check_rrd_file_exist("libvirt", disk['target']['dev'], "disk"):
122 virt_list[domname]['disk'][disk['target']['dev']] = virt_disk_type
124 virt_list[domname]['interface'] = {}
125 for net_dev in virt.get_interface_info():
126 if rrd.check_rrd_file_exist("libvirt", net_dev['target']['dev'], "interface"):
127 virt_list[domname]['interface'][net_dev['target']['dev']] = virt_interface_type
129 if virt_list[domname]['vcpu'] == {} and \
130 virt_list[domname]['disk'] == {} and \
131 virt_list[domname]['interface'] == {}:
132 virt_list[domname] = {}
133 virt_file_exist[domname] = False
135 virt_file_exist[domname] = True
140 self.view.virt_list = virt_list
141 self.view.virt_file_exist = virt_file_exist
143 self.view.dev_list = dev_list
144 self.view.graph_type = graph_type
149 '/host/(\d+)/report/([a-zA-Z0-9]+)/?(\.part)$', HostBy1ReportBy1,