OSDN Git Service

Add Report Display(#11)
[karesansui/karesansui.git] / karesansui / gadget / hostby1reportby1.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of Karesansui.
4 #
5 # Copyright (C) 2010 HDE, Inc.
6 #
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.
11 #
12
13 import web
14 import re
15
16 import karesansui
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, \
23     get_dom_list
24
25 from karesansui.lib.const import DEFAULT_LANGS, COLLECTD_DF_RRPORT_BY_DEVICE
26
27 class HostBy1ReportBy1(Rest):
28
29     @auth
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
34
35         target = param[1]
36         if target is None: return web.notfound()
37         self.view.target = target
38
39         dev_list = []
40         graph_type = []
41         rrd = RRD()
42         if target == "cpu":
43             for dev in range(0, len(get_proc_cpuinfo())):
44                 if rrd.check_rrd_file_exist("cpu", dev):
45                     dev_list.append(dev)
46             graph_type = ['default']
47         elif target == "memory":
48             dev_list = ['default']
49             graph_type = ['default']
50         elif target == "df":
51             df_list = get_fs_info()
52             for fs in df_list:
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)
57                 else:
58                     dev = fs['Mounted']
59                     if dev == "/":
60                         dev = "root"
61                     else:
62                         dev = re.sub(r'^/', '', dev)
63                         dev = re.sub(r'/', '_', dev)
64                 if rrd.check_rrd_file_exist("df", dev):
65                     dev_list.append(dev)
66             graph_type = ['default']
67
68         elif target == "disk":
69             disk_list = get_hdd_list()
70             for disk in disk_list:
71                 dev = disk
72                 dev = re.sub(r'^/dev/', '', dev)
73                 if rrd.check_rrd_file_exist("disk", dev):
74                     dev_list.append(dev)
75             graph_type = ['merged', 'octets', 'ops', 'time']
76
77         elif target == "interface":
78             if_list = get_ifconfig_info().keys()
79             for dev in if_list:
80                 if rrd.check_rrd_file_exist("interface", dev):
81                     dev_list.append(dev)
82             graph_type = ['packets', 'octets', 'errors']
83
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']
97             virt_list = {}
98             virt_file_exist = {}
99
100             try:
101                 kvc = KaresansuiVirtConnection()
102
103                 for domname in get_dom_list():
104                     virt_list[domname] = {}
105
106                     if rrd.set_rrd_dir_host(domname) is False:
107                         virt_file_exist[domname] = False
108                         continue
109
110                     virt = kvc.search_kvg_guests(domname)[0]
111
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
118
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
123
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
128
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
134                     else:
135                         virt_file_exist[domname] = True
136
137             finally:
138                 kvc.close()
139
140             self.view.virt_list = virt_list
141             self.view.virt_file_exist = virt_file_exist
142
143         self.view.dev_list = dev_list
144         self.view.graph_type = graph_type
145
146         return True
147
148 urls = (
149     '/host/(\d+)/report/([a-zA-Z0-9]+)/?(\.part)$', HostBy1ReportBy1,
150     )
151