Calculate block and net device statistics
display them in the overview as well as in the vm details
This commit is contained in:
parent
9890303af7
commit
655a846ac3
|
@ -73,8 +73,8 @@
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
|
|
||||||
<locale name="C">
|
<locale name="C">
|
||||||
<short>Show disk usage in summary</short>
|
<short>Show disk I/O in summary</short>
|
||||||
<long>Show the disk usage field in the domain list summary view</long>
|
<long>Show the disk I/O field in the domain list summary view</long>
|
||||||
</locale>
|
</locale>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
|
@ -86,8 +86,8 @@
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
|
|
||||||
<locale name="C">
|
<locale name="C">
|
||||||
<short>Show network traffic in summary</short>
|
<short>Show network I/O in summary</short>
|
||||||
<long>Show the network traffic field in the domain list summary view</long>
|
<long>Show the network I/O field in the domain list summary view</long>
|
||||||
</locale>
|
</locale>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ class vmmConfig:
|
||||||
def is_vmlist_memory_usage_visible(self):
|
def is_vmlist_memory_usage_visible(self):
|
||||||
return self.conf.get_bool(self.conf_dir + "/vmlist-fields/memory_usage")
|
return self.conf.get_bool(self.conf_dir + "/vmlist-fields/memory_usage")
|
||||||
|
|
||||||
def is_vmlist_disk_usage_visible(self):
|
def is_vmlist_disk_io_visible(self):
|
||||||
return self.conf.get_bool(self.conf_dir + "/vmlist-fields/disk_usage")
|
return self.conf.get_bool(self.conf_dir + "/vmlist-fields/disk_usage")
|
||||||
|
|
||||||
def is_vmlist_network_traffic_visible(self):
|
def is_vmlist_network_traffic_visible(self):
|
||||||
|
@ -132,7 +132,7 @@ class vmmConfig:
|
||||||
def set_vmlist_memory_usage_visible(self, state):
|
def set_vmlist_memory_usage_visible(self, state):
|
||||||
self.conf.set_bool(self.conf_dir + "/vmlist-fields/memory_usage", state)
|
self.conf.set_bool(self.conf_dir + "/vmlist-fields/memory_usage", state)
|
||||||
|
|
||||||
def set_vmlist_disk_usage_visible(self, state):
|
def set_vmlist_disk_io_visible(self, state):
|
||||||
self.conf.set_bool(self.conf_dir + "/vmlist-fields/disk_usage", state)
|
self.conf.set_bool(self.conf_dir + "/vmlist-fields/disk_usage", state)
|
||||||
|
|
||||||
def set_vmlist_network_traffic_visible(self, state):
|
def set_vmlist_network_traffic_visible(self, state):
|
||||||
|
@ -155,7 +155,7 @@ class vmmConfig:
|
||||||
def on_vmlist_memory_usage_visible_changed(self, callback):
|
def on_vmlist_memory_usage_visible_changed(self, callback):
|
||||||
self.conf.notify_add(self.conf_dir + "/vmlist-fields/memory_usage", callback)
|
self.conf.notify_add(self.conf_dir + "/vmlist-fields/memory_usage", callback)
|
||||||
|
|
||||||
def on_vmlist_disk_usage_visible_changed(self, callback):
|
def on_vmlist_disk_io_visible_changed(self, callback):
|
||||||
self.conf.notify_add(self.conf_dir + "/vmlist-fields/disk_usage", callback)
|
self.conf.notify_add(self.conf_dir + "/vmlist-fields/disk_usage", callback)
|
||||||
|
|
||||||
def on_vmlist_network_traffic_visible_changed(self, callback):
|
def on_vmlist_network_traffic_visible_changed(self, callback):
|
||||||
|
|
|
@ -934,13 +934,20 @@ class vmmConnection(gobject.GObject):
|
||||||
|
|
||||||
mem = 0
|
mem = 0
|
||||||
cpuTime = 0
|
cpuTime = 0
|
||||||
|
rdRate = 0
|
||||||
|
wrRate = 0
|
||||||
|
rxRate = 0
|
||||||
|
txRate = 0
|
||||||
|
|
||||||
for uuid in self.vms:
|
for uuid in self.vms:
|
||||||
vm = self.vms[uuid]
|
vm = self.vms[uuid]
|
||||||
if vm.get_id() != -1:
|
if vm.get_id() != -1:
|
||||||
cpuTime = cpuTime + vm.get_cputime()
|
cpuTime = cpuTime + vm.get_cputime()
|
||||||
mem = mem + vm.get_memory()
|
mem = mem + vm.get_memory()
|
||||||
|
rdRate += vm.disk_read_rate()
|
||||||
|
wrRate += vm.disk_write_rate()
|
||||||
|
rxRate += vm.network_rx_rate()
|
||||||
|
txRate += vm.network_tx_rate()
|
||||||
|
|
||||||
pcentCpuTime = 0
|
pcentCpuTime = 0
|
||||||
if len(self.record) > 0:
|
if len(self.record) > 0:
|
||||||
|
@ -964,7 +971,11 @@ class vmmConnection(gobject.GObject):
|
||||||
"memory": mem,
|
"memory": mem,
|
||||||
"memoryPercent": pcentMem,
|
"memoryPercent": pcentMem,
|
||||||
"cpuTime": cpuTime,
|
"cpuTime": cpuTime,
|
||||||
"cpuTimePercent": pcentCpuTime
|
"cpuTimePercent": pcentCpuTime,
|
||||||
|
"diskRdRate" : rdRate,
|
||||||
|
"diskWrRate" : wrRate,
|
||||||
|
"netRxRate" : rxRate,
|
||||||
|
"netTxRate" : txRate,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.record.insert(0, newStats)
|
self.record.insert(0, newStats)
|
||||||
|
@ -1018,6 +1029,32 @@ class vmmConnection(gobject.GObject):
|
||||||
vector.append(0)
|
vector.append(0)
|
||||||
return vector
|
return vector
|
||||||
|
|
||||||
|
def network_rx_rate(self):
|
||||||
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["netRxRate"]
|
||||||
|
|
||||||
|
def network_tx_rate(self):
|
||||||
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["netTxRate"]
|
||||||
|
|
||||||
|
def network_traffic_rate(self):
|
||||||
|
return self.network_tx_rate() + self.network_rx_rate()
|
||||||
|
|
||||||
|
def disk_read_rate(self):
|
||||||
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["diskRdRate"]
|
||||||
|
|
||||||
|
def disk_write_rate(self):
|
||||||
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["diskWrRate"]
|
||||||
|
|
||||||
|
def disk_io_rate(self):
|
||||||
|
return self.disk_read_rate() + self.disk_write_rate()
|
||||||
|
|
||||||
def uuidstr(self, rawuuid):
|
def uuidstr(self, rawuuid):
|
||||||
hex = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
|
hex = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
|
||||||
uuid = []
|
uuid = []
|
||||||
|
|
|
@ -189,11 +189,14 @@ class vmmDetails(gobject.GObject):
|
||||||
self.memory_usage_graph.set_property("reversed", True)
|
self.memory_usage_graph.set_property("reversed", True)
|
||||||
self.window.get_widget("graph-table").attach(self.memory_usage_graph, 1, 2, 1, 2)
|
self.window.get_widget("graph-table").attach(self.memory_usage_graph, 1, 2, 1, 2)
|
||||||
|
|
||||||
|
self.disk_io_graph = sparkline.Sparkline()
|
||||||
|
self.disk_io_graph.set_property("reversed", True)
|
||||||
|
self.window.get_widget("graph-table").attach(self.disk_io_graph, 1, 2, 2, 3)
|
||||||
|
|
||||||
self.network_traffic_graph = sparkline.Sparkline()
|
self.network_traffic_graph = sparkline.Sparkline()
|
||||||
self.network_traffic_graph.set_property("reversed", True)
|
self.network_traffic_graph.set_property("reversed", True)
|
||||||
self.window.get_widget("graph-table").attach(self.network_traffic_graph, 1, 2, 3, 4)
|
self.window.get_widget("graph-table").attach(self.network_traffic_graph, 1, 2, 3, 4)
|
||||||
|
|
||||||
|
|
||||||
self.accel_groups = gtk.accel_groups_from_object(topwin)
|
self.accel_groups = gtk.accel_groups_from_object(topwin)
|
||||||
self.gtk_settings_accel = None
|
self.gtk_settings_accel = None
|
||||||
|
|
||||||
|
@ -499,12 +502,6 @@ class vmmDetails(gobject.GObject):
|
||||||
dialog.present()
|
dialog.present()
|
||||||
return
|
return
|
||||||
dialog.show_all()
|
dialog.show_all()
|
||||||
self.window.get_widget("overview-network-traffic-text").hide()
|
|
||||||
self.window.get_widget("overview-network-traffic-label").hide()
|
|
||||||
self.window.get_widget("overview-disk-usage-bar").hide()
|
|
||||||
self.window.get_widget("overview-disk-usage-text").hide()
|
|
||||||
self.window.get_widget("overview-disk-usage-label").hide()
|
|
||||||
self.network_traffic_graph.hide()
|
|
||||||
dialog.present()
|
dialog.present()
|
||||||
self.engine.increment_window_counter()
|
self.engine.increment_window_counter()
|
||||||
self.update_widget_states(self.vm, self.vm.status())
|
self.update_widget_states(self.vm, self.vm.status())
|
||||||
|
@ -806,16 +803,16 @@ class vmmDetails(gobject.GObject):
|
||||||
self.window.get_widget("overview-memory-usage-text").set_text("%d MB of %d MB" % \
|
self.window.get_widget("overview-memory-usage-text").set_text("%d MB of %d MB" % \
|
||||||
(int(round(vm_memory/1024.0)), \
|
(int(round(vm_memory/1024.0)), \
|
||||||
int(round(host_memory/1024.0))))
|
int(round(host_memory/1024.0))))
|
||||||
|
self.window.get_widget("overview-network-traffic-text").set_text("%d KBytes/s in\n%d KBytes/s out" %
|
||||||
|
(self.vm.network_rx_rate(), self.vm.network_tx_rate()))
|
||||||
|
self.window.get_widget("overview-disk-usage-text").set_text("%d KBytes/s in\n%d KBytes/s out" %
|
||||||
|
(self.vm.disk_read_rate(), self.vm.disk_write_rate()))
|
||||||
|
|
||||||
history_len = self.config.get_stats_history_length()
|
history_len = self.config.get_stats_history_length()
|
||||||
cpu_vector = self.vm.cpu_time_vector()
|
self.cpu_usage_graph.set_property("data_array", self.vm.cpu_time_vector())
|
||||||
self.cpu_usage_graph.set_property("data_array", cpu_vector)
|
self.memory_usage_graph.set_property("data_array", self.vm.current_memory_vector())
|
||||||
|
self.network_traffic_graph.set_property("data_array", self.vm.network_traffic_vector())
|
||||||
memory_vector = self.vm.current_memory_vector()
|
self.disk_io_graph.set_property("data_array", self.vm.disk_io_vector())
|
||||||
self.memory_usage_graph.set_property("data_array", memory_vector)
|
|
||||||
|
|
||||||
network_vector = self.vm.network_traffic_vector()
|
|
||||||
self.network_traffic_graph.set_property("data_array", network_vector)
|
|
||||||
|
|
||||||
def refresh_config_cpu(self):
|
def refresh_config_cpu(self):
|
||||||
self.window.get_widget("state-host-cpus").set_text("%d" % self.vm.get_connection().host_active_processor_count())
|
self.window.get_widget("state-host-cpus").set_text("%d" % self.vm.get_connection().host_active_processor_count())
|
||||||
|
|
|
@ -45,6 +45,12 @@ class vmmDomain(gobject.GObject):
|
||||||
self.uuid = uuid
|
self.uuid = uuid
|
||||||
self.lastStatus = None
|
self.lastStatus = None
|
||||||
self.record = []
|
self.record = []
|
||||||
|
self.maxRecord = { "diskRdRate" : 10.0,
|
||||||
|
"diskWrRate" : 10.0,
|
||||||
|
"netTxRate" : 10.0,
|
||||||
|
"netRxRate" : 10.0,
|
||||||
|
}
|
||||||
|
|
||||||
self._update_status()
|
self._update_status()
|
||||||
self.xml = None
|
self.xml = None
|
||||||
|
|
||||||
|
@ -149,6 +155,44 @@ class vmmDomain(gobject.GObject):
|
||||||
self.lastStatus = status
|
self.lastStatus = status
|
||||||
self.emit("status-changed", status)
|
self.emit("status-changed", status)
|
||||||
|
|
||||||
|
def _network_traffic(self):
|
||||||
|
rx = 0
|
||||||
|
tx = 0
|
||||||
|
for netdev in self.get_network_devices():
|
||||||
|
try:
|
||||||
|
io = self.vm.interfaceStats(netdev[2])
|
||||||
|
if io:
|
||||||
|
rx += io[0]
|
||||||
|
tx += io[4]
|
||||||
|
except libvirt.libvirtError, err:
|
||||||
|
logging.error("Error reading interface stats %s" % err)
|
||||||
|
return rx, tx
|
||||||
|
|
||||||
|
def _disk_io(self):
|
||||||
|
rd = 0
|
||||||
|
wr = 0
|
||||||
|
for disk in self.get_disk_devices():
|
||||||
|
try:
|
||||||
|
io = self.vm.blockStats(disk[3])
|
||||||
|
if io:
|
||||||
|
rd += io[1]
|
||||||
|
wr += io[3]
|
||||||
|
except libvirt.libvirtError, err:
|
||||||
|
logging.error("Error reading block stats %s" % err)
|
||||||
|
return rd, wr
|
||||||
|
|
||||||
|
def _get_cur_rate(self, what):
|
||||||
|
if len(self.record) > 1:
|
||||||
|
ret = float(self.record[0][what] - self.record[1][what]) / \
|
||||||
|
float(self.record[0]["timestamp"] - self.record[1]["timestamp"])
|
||||||
|
else:
|
||||||
|
ret = 0.0
|
||||||
|
return max(ret, 0,0) # avoid negative values at poweroff
|
||||||
|
|
||||||
|
def _set_max_rate(self, what):
|
||||||
|
if self.record[0][what] > self.maxRecord[what]:
|
||||||
|
self.maxRecord[what] = self.record[0][what]
|
||||||
|
|
||||||
def tick(self, now):
|
def tick(self, now):
|
||||||
if self.connection.get_state() != self.connection.STATE_ACTIVE:
|
if self.connection.get_state() != self.connection.STATE_ACTIVE:
|
||||||
return
|
return
|
||||||
|
@ -196,6 +240,9 @@ class vmmDomain(gobject.GObject):
|
||||||
pcentCurrMem = info[2] * 100.0 / self.connection.host_memory_size()
|
pcentCurrMem = info[2] * 100.0 / self.connection.host_memory_size()
|
||||||
pcentMaxMem = info[1] * 100.0 / self.connection.host_memory_size()
|
pcentMaxMem = info[1] * 100.0 / self.connection.host_memory_size()
|
||||||
|
|
||||||
|
rdBytes, wrBytes = self._disk_io()
|
||||||
|
rxBytes, txBytes = self._network_traffic()
|
||||||
|
|
||||||
newStats = { "timestamp": now,
|
newStats = { "timestamp": now,
|
||||||
"cpuTime": cpuTime,
|
"cpuTime": cpuTime,
|
||||||
"cpuTimeAbs": cpuTimeAbs,
|
"cpuTimeAbs": cpuTimeAbs,
|
||||||
|
@ -205,6 +252,10 @@ class vmmDomain(gobject.GObject):
|
||||||
"vcpuCount": info[3],
|
"vcpuCount": info[3],
|
||||||
"maxMem": info[1],
|
"maxMem": info[1],
|
||||||
"maxMemPercent": pcentMaxMem,
|
"maxMemPercent": pcentMaxMem,
|
||||||
|
"diskRdKB": rdBytes / 1024,
|
||||||
|
"diskWrKB": wrBytes / 1024,
|
||||||
|
"netRxKB": rxBytes / 1024,
|
||||||
|
"netTxKB": txBytes / 1024,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.record.insert(0, newStats)
|
self.record.insert(0, newStats)
|
||||||
|
@ -223,6 +274,10 @@ class vmmDomain(gobject.GObject):
|
||||||
self.record[0]["cpuTimeMovingAvg"] = (self.record[0]["cpuTimeAbs"]-startCpuTime) / nSamples
|
self.record[0]["cpuTimeMovingAvg"] = (self.record[0]["cpuTimeAbs"]-startCpuTime) / nSamples
|
||||||
self.record[0]["cpuTimeMovingAvgPercent"] = (self.record[0]["cpuTimeAbs"]-startCpuTime) * 100.0 / ((now-startTimestamp)*1000.0*1000.0*1000.0 * self.connection.host_active_processor_count())
|
self.record[0]["cpuTimeMovingAvgPercent"] = (self.record[0]["cpuTimeAbs"]-startCpuTime) * 100.0 / ((now-startTimestamp)*1000.0*1000.0*1000.0 * self.connection.host_active_processor_count())
|
||||||
|
|
||||||
|
for r in [ "diskRd", "diskWr", "netRx", "netTx" ]:
|
||||||
|
self.record[0][r + "Rate"] = self._get_cur_rate(r + "KB")
|
||||||
|
self._set_max_rate(r + "Rate")
|
||||||
|
|
||||||
self._update_status(info[0])
|
self._update_status(info[0])
|
||||||
self.emit("resources-sampled")
|
self.emit("resources-sampled")
|
||||||
|
|
||||||
|
@ -297,17 +352,31 @@ class vmmDomain(gobject.GObject):
|
||||||
def cpu_time_pretty(self):
|
def cpu_time_pretty(self):
|
||||||
return "%2.2f %%" % self.cpu_time_percentage()
|
return "%2.2f %%" % self.cpu_time_percentage()
|
||||||
|
|
||||||
def network_traffic(self):
|
def network_rx_rate(self):
|
||||||
return 1
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["netRxRate"]
|
||||||
|
|
||||||
def network_traffic_percentage(self):
|
def network_tx_rate(self):
|
||||||
return 1
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["netTxRate"]
|
||||||
|
|
||||||
def disk_usage(self):
|
def network_traffic_rate(self):
|
||||||
return 1
|
return self.network_tx_rate() + self.network_rx_rate()
|
||||||
|
|
||||||
def disk_usage_percentage(self):
|
def disk_read_rate(self):
|
||||||
return 1
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["diskRdRate"]
|
||||||
|
|
||||||
|
def disk_write_rate(self):
|
||||||
|
if len(self.record) == 0:
|
||||||
|
return 0
|
||||||
|
return self.record[0]["diskWrRate"]
|
||||||
|
|
||||||
|
def disk_io_rate(self):
|
||||||
|
return self.disk_read_rate() + self.disk_write_rate()
|
||||||
|
|
||||||
def vcpu_count(self):
|
def vcpu_count(self):
|
||||||
if len(self.record) == 0:
|
if len(self.record) == 0:
|
||||||
|
@ -358,14 +427,22 @@ class vmmDomain(gobject.GObject):
|
||||||
vector = []
|
vector = []
|
||||||
stats = self.record
|
stats = self.record
|
||||||
for i in range(self.config.get_stats_history_length()+1):
|
for i in range(self.config.get_stats_history_length()+1):
|
||||||
vector.append(0)
|
if i < len(stats):
|
||||||
|
vector.append(float(stats[i]["netRxRate"])/
|
||||||
|
float(self.maxRecord["netRxRate"]))
|
||||||
|
else:
|
||||||
|
vector.append(0.0)
|
||||||
return vector
|
return vector
|
||||||
|
|
||||||
def disk_usage_vector(self):
|
def disk_io_vector(self):
|
||||||
vector = []
|
vector = []
|
||||||
stats = self.record
|
stats = self.record
|
||||||
for i in range(self.config.get_stats_history_length()+1):
|
for i in range(self.config.get_stats_history_length()+1):
|
||||||
vector.append(0)
|
if i < len(stats):
|
||||||
|
vector.append(float(stats[i]["diskRdRate"])/
|
||||||
|
float(self.maxRecord["diskRdRate"]))
|
||||||
|
else:
|
||||||
|
vector.append(0.0)
|
||||||
return vector
|
return vector
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
|
|
|
@ -37,7 +37,7 @@ VMLIST_SORT_ID = 1
|
||||||
VMLIST_SORT_NAME = 2
|
VMLIST_SORT_NAME = 2
|
||||||
VMLIST_SORT_CPU_USAGE = 3
|
VMLIST_SORT_CPU_USAGE = 3
|
||||||
VMLIST_SORT_MEMORY_USAGE = 4
|
VMLIST_SORT_MEMORY_USAGE = 4
|
||||||
VMLIST_SORT_DISK_USAGE = 5
|
VMLIST_SORT_DISK_IO = 5
|
||||||
VMLIST_SORT_NETWORK_USAGE = 6
|
VMLIST_SORT_NETWORK_USAGE = 6
|
||||||
|
|
||||||
# fields in the tree model data set
|
# fields in the tree model data set
|
||||||
|
@ -52,6 +52,10 @@ ROW_MEM = 7
|
||||||
ROW_MEM_USAGE = 8
|
ROW_MEM_USAGE = 8
|
||||||
ROW_KEY = 9
|
ROW_KEY = 9
|
||||||
ROW_HINT = 10
|
ROW_HINT = 10
|
||||||
|
ROW_DISK_RD = 11
|
||||||
|
ROW_DISK_WR = 12
|
||||||
|
ROW_NET_RX = 13
|
||||||
|
ROW_NET_TX = 14
|
||||||
|
|
||||||
# Columns in the tree view
|
# Columns in the tree view
|
||||||
COL_NAME = 0
|
COL_NAME = 0
|
||||||
|
@ -121,7 +125,7 @@ class vmmManager(gobject.GObject):
|
||||||
self.config.on_vmlist_cpu_usage_visible_changed(self.toggle_cpu_usage_visible_widget)
|
self.config.on_vmlist_cpu_usage_visible_changed(self.toggle_cpu_usage_visible_widget)
|
||||||
self.config.on_vmlist_virtual_cpus_visible_changed(self.toggle_virtual_cpus_visible_widget)
|
self.config.on_vmlist_virtual_cpus_visible_changed(self.toggle_virtual_cpus_visible_widget)
|
||||||
self.config.on_vmlist_memory_usage_visible_changed(self.toggle_memory_usage_visible_widget)
|
self.config.on_vmlist_memory_usage_visible_changed(self.toggle_memory_usage_visible_widget)
|
||||||
self.config.on_vmlist_disk_usage_visible_changed(self.toggle_disk_usage_visible_widget)
|
self.config.on_vmlist_disk_io_visible_changed(self.toggle_disk_io_visible_widget)
|
||||||
self.config.on_vmlist_network_traffic_visible_changed(self.toggle_network_traffic_visible_widget)
|
self.config.on_vmlist_network_traffic_visible_changed(self.toggle_network_traffic_visible_widget)
|
||||||
|
|
||||||
self.window.get_widget("menu_view_domain_id").set_active(self.config.is_vmlist_domain_id_visible())
|
self.window.get_widget("menu_view_domain_id").set_active(self.config.is_vmlist_domain_id_visible())
|
||||||
|
@ -129,10 +133,8 @@ class vmmManager(gobject.GObject):
|
||||||
self.window.get_widget("menu_view_cpu_usage").set_active(self.config.is_vmlist_cpu_usage_visible())
|
self.window.get_widget("menu_view_cpu_usage").set_active(self.config.is_vmlist_cpu_usage_visible())
|
||||||
self.window.get_widget("menu_view_virtual_cpus").set_active(self.config.is_vmlist_virtual_cpus_visible())
|
self.window.get_widget("menu_view_virtual_cpus").set_active(self.config.is_vmlist_virtual_cpus_visible())
|
||||||
self.window.get_widget("menu_view_memory_usage").set_active(self.config.is_vmlist_memory_usage_visible())
|
self.window.get_widget("menu_view_memory_usage").set_active(self.config.is_vmlist_memory_usage_visible())
|
||||||
self.window.get_widget("menu_view_disk_usage").set_active(self.config.is_vmlist_disk_usage_visible())
|
self.window.get_widget("menu_view_disk_io").set_active(self.config.is_vmlist_disk_io_visible())
|
||||||
self.window.get_widget("menu_view_network_traffic").set_active(self.config.is_vmlist_network_traffic_visible())
|
self.window.get_widget("menu_view_network_traffic").set_active(self.config.is_vmlist_network_traffic_visible())
|
||||||
self.window.get_widget("menu_view_disk_usage").set_sensitive(False)
|
|
||||||
self.window.get_widget("menu_view_network_traffic").set_sensitive(False)
|
|
||||||
|
|
||||||
self.window.get_widget("vm-view").set_active(0)
|
self.window.get_widget("vm-view").set_active(0)
|
||||||
|
|
||||||
|
@ -248,7 +250,7 @@ class vmmManager(gobject.GObject):
|
||||||
"on_menu_view_cpu_usage_activate" : self.toggle_cpu_usage_visible_conf,
|
"on_menu_view_cpu_usage_activate" : self.toggle_cpu_usage_visible_conf,
|
||||||
"on_menu_view_virtual_cpus_activate" : self.toggle_virtual_cpus_visible_conf,
|
"on_menu_view_virtual_cpus_activate" : self.toggle_virtual_cpus_visible_conf,
|
||||||
"on_menu_view_memory_usage_activate" : self.toggle_memory_usage_visible_conf,
|
"on_menu_view_memory_usage_activate" : self.toggle_memory_usage_visible_conf,
|
||||||
"on_menu_view_disk_usage_activate" : self.toggle_disk_usage_visible_conf,
|
"on_menu_view_disk_io_activate" : self.toggle_disk_io_visible_conf,
|
||||||
"on_menu_view_network_traffic_activate" : self.toggle_network_traffic_visible_conf,
|
"on_menu_view_network_traffic_activate" : self.toggle_network_traffic_visible_conf,
|
||||||
|
|
||||||
"on_vm_manager_delete_event": self.close,
|
"on_vm_manager_delete_event": self.close,
|
||||||
|
@ -449,6 +451,10 @@ class vmmManager(gobject.GObject):
|
||||||
row.insert(ROW_MEM, vm.get_memory_pretty())
|
row.insert(ROW_MEM, vm.get_memory_pretty())
|
||||||
row.insert(ROW_MEM_USAGE, vm.current_memory_percentage())
|
row.insert(ROW_MEM_USAGE, vm.current_memory_percentage())
|
||||||
row.insert(ROW_KEY, vm.get_uuid())
|
row.insert(ROW_KEY, vm.get_uuid())
|
||||||
|
row.insert(ROW_DISK_RD, vm.disk_read_rate())
|
||||||
|
row.insert(ROW_DISK_WR, vm.disk_write_rate())
|
||||||
|
row.insert(ROW_NET_RX, vm.network_rx_rate())
|
||||||
|
row.insert(ROW_NET_TX, vm.network_tx_rate())
|
||||||
row.insert(ROW_HINT, None)
|
row.insert(ROW_HINT, None)
|
||||||
|
|
||||||
iter = model.append(parent, row)
|
iter = model.append(parent, row)
|
||||||
|
@ -470,6 +476,10 @@ class vmmManager(gobject.GObject):
|
||||||
row.insert(ROW_MEM_USAGE, conn.current_memory_percentage())
|
row.insert(ROW_MEM_USAGE, conn.current_memory_percentage())
|
||||||
row.insert(ROW_KEY, conn.get_uri())
|
row.insert(ROW_KEY, conn.get_uri())
|
||||||
row.insert(ROW_HINT, conn.get_uri())
|
row.insert(ROW_HINT, conn.get_uri())
|
||||||
|
row.insert(ROW_DISK_RD, conn.disk_read_rate())
|
||||||
|
row.insert(ROW_DISK_WR, conn.disk_write_rate())
|
||||||
|
row.insert(ROW_NET_RX, conn.network_rx_rate())
|
||||||
|
row.insert(ROW_NET_TX, conn.network_tx_rate())
|
||||||
|
|
||||||
iter = model.append(None, row)
|
iter = model.append(None, row)
|
||||||
path = model.get_path(iter)
|
path = model.get_path(iter)
|
||||||
|
@ -523,7 +533,7 @@ class vmmManager(gobject.GObject):
|
||||||
return
|
return
|
||||||
|
|
||||||
row = self.rows[vm.get_uuid()]
|
row = self.rows[vm.get_uuid()]
|
||||||
# Handle, name, ID, status, status icon, cpu, cpu graph, vcpus, mem, mem bar
|
# Handle, name, ID, status, status icon, cpu, cpu graph, vcpus, mem, mem bar, diskRead, diskWrite, netRx, netTx
|
||||||
if vm.get_id() == -1:
|
if vm.get_id() == -1:
|
||||||
row[ROW_ID] = "-"
|
row[ROW_ID] = "-"
|
||||||
else:
|
else:
|
||||||
|
@ -534,6 +544,10 @@ class vmmManager(gobject.GObject):
|
||||||
row[ROW_VCPUS] = vm.vcpu_count()
|
row[ROW_VCPUS] = vm.vcpu_count()
|
||||||
row[ROW_MEM] = vm.get_memory_pretty()
|
row[ROW_MEM] = vm.get_memory_pretty()
|
||||||
row[ROW_MEM_USAGE] = vm.current_memory_percentage()
|
row[ROW_MEM_USAGE] = vm.current_memory_percentage()
|
||||||
|
row[ROW_DISK_RD] = vm.disk_read_rate()
|
||||||
|
row[ROW_DISK_WR] = vm.disk_write_rate()
|
||||||
|
row[ROW_NET_RX] = vm.network_rx_rate()
|
||||||
|
row[ROW_NET_TX] = vm.network_tx_rate()
|
||||||
model.row_changed(row.path, row.iter)
|
model.row_changed(row.path, row.iter)
|
||||||
|
|
||||||
if vm == self.current_vm():
|
if vm == self.current_vm():
|
||||||
|
@ -558,6 +572,10 @@ class vmmManager(gobject.GObject):
|
||||||
row[ROW_VCPUS] = conn.host_active_processor_count()
|
row[ROW_VCPUS] = conn.host_active_processor_count()
|
||||||
row[ROW_MEM] = conn.pretty_current_memory()
|
row[ROW_MEM] = conn.pretty_current_memory()
|
||||||
row[ROW_MEM_USAGE] = conn.current_memory_percentage()
|
row[ROW_MEM_USAGE] = conn.current_memory_percentage()
|
||||||
|
row[ROW_DISK_RD] = conn.disk_read_rate()
|
||||||
|
row[ROW_DISK_WR] = conn.disk_write_rate()
|
||||||
|
row[ROW_NET_RX] = conn.network_rx_rate()
|
||||||
|
row[ROW_NET_TX] = conn.network_tx_rate()
|
||||||
if conn.get_state() in [vmmConnection.STATE_DISCONNECTED, vmmConnection.STATE_CONNECTING]:
|
if conn.get_state() in [vmmConnection.STATE_DISCONNECTED, vmmConnection.STATE_CONNECTING]:
|
||||||
# Connection went inactive, delete any VM child nodes
|
# Connection went inactive, delete any VM child nodes
|
||||||
parent = self.rows[conn.get_uri()].iter
|
parent = self.rows[conn.get_uri()].iter
|
||||||
|
@ -786,8 +804,8 @@ class vmmManager(gobject.GObject):
|
||||||
def prepare_vmlist(self):
|
def prepare_vmlist(self):
|
||||||
vmlist = self.window.get_widget("vm-list")
|
vmlist = self.window.get_widget("vm-list")
|
||||||
|
|
||||||
# Handle, name, ID, status, status icon, cpu, [cpu graph], vcpus, mem, mem bar, uuid
|
# Handle, name, ID, status, status icon, cpu, [cpu graph], vcpus, mem, mem bar, uuid, diskRead, diskWrite, netRx, netTx
|
||||||
model = gtk.TreeStore(object, str, str, str, gtk.gdk.Pixbuf, str, int, str, int, str, str)
|
model = gtk.TreeStore(object, str, str, str, gtk.gdk.Pixbuf, str, int, str, int, str, str, int, int, int, int)
|
||||||
vmlist.set_model(model)
|
vmlist.set_model(model)
|
||||||
try:
|
try:
|
||||||
vmlist.set_tooltip_column(ROW_HINT)
|
vmlist.set_tooltip_column(ROW_HINT)
|
||||||
|
@ -802,8 +820,9 @@ class vmmManager(gobject.GObject):
|
||||||
cpuUsageCol = gtk.TreeViewColumn(_("CPU usage"))
|
cpuUsageCol = gtk.TreeViewColumn(_("CPU usage"))
|
||||||
virtualCPUsCol = gtk.TreeViewColumn(_("VCPUs"))
|
virtualCPUsCol = gtk.TreeViewColumn(_("VCPUs"))
|
||||||
memoryUsageCol = gtk.TreeViewColumn(_("Memory usage"))
|
memoryUsageCol = gtk.TreeViewColumn(_("Memory usage"))
|
||||||
diskUsageCol = gtk.TreeViewColumn(_("Disk usage"))
|
# FIXME: add KBytes/s tooltip
|
||||||
networkTrafficCol = gtk.TreeViewColumn(_("Network traffic"))
|
diskIOCol = gtk.TreeViewColumn(_("Disk I/O"))
|
||||||
|
networkTrafficCol = gtk.TreeViewColumn(_("Network I/O"))
|
||||||
|
|
||||||
vmlist.append_column(nameCol)
|
vmlist.append_column(nameCol)
|
||||||
vmlist.append_column(idCol)
|
vmlist.append_column(idCol)
|
||||||
|
@ -811,7 +830,7 @@ class vmmManager(gobject.GObject):
|
||||||
vmlist.append_column(cpuUsageCol)
|
vmlist.append_column(cpuUsageCol)
|
||||||
vmlist.append_column(virtualCPUsCol)
|
vmlist.append_column(virtualCPUsCol)
|
||||||
vmlist.append_column(memoryUsageCol)
|
vmlist.append_column(memoryUsageCol)
|
||||||
vmlist.append_column(diskUsageCol)
|
vmlist.append_column(diskIOCol)
|
||||||
vmlist.append_column(networkTrafficCol)
|
vmlist.append_column(networkTrafficCol)
|
||||||
|
|
||||||
# For the columns which follow, we deliberately bind columns
|
# For the columns which follow, we deliberately bind columns
|
||||||
|
@ -825,12 +844,12 @@ class vmmManager(gobject.GObject):
|
||||||
|
|
||||||
name_txt = gtk.CellRendererText()
|
name_txt = gtk.CellRendererText()
|
||||||
nameCol.pack_start(name_txt, True)
|
nameCol.pack_start(name_txt, True)
|
||||||
nameCol.add_attribute(name_txt, 'text', 1)
|
nameCol.add_attribute(name_txt, 'text', ROW_NAME)
|
||||||
nameCol.set_sort_column_id(VMLIST_SORT_NAME)
|
nameCol.set_sort_column_id(VMLIST_SORT_NAME)
|
||||||
|
|
||||||
id_txt = gtk.CellRendererText()
|
id_txt = gtk.CellRendererText()
|
||||||
idCol.pack_start(id_txt, True)
|
idCol.pack_start(id_txt, True)
|
||||||
idCol.add_attribute(id_txt, 'text', 2)
|
idCol.add_attribute(id_txt, 'text', ROW_ID)
|
||||||
idCol.set_visible(self.config.is_vmlist_domain_id_visible())
|
idCol.set_visible(self.config.is_vmlist_domain_id_visible())
|
||||||
idCol.set_sort_column_id(VMLIST_SORT_ID)
|
idCol.set_sort_column_id(VMLIST_SORT_ID)
|
||||||
|
|
||||||
|
@ -838,44 +857,48 @@ class vmmManager(gobject.GObject):
|
||||||
status_icon = gtk.CellRendererPixbuf()
|
status_icon = gtk.CellRendererPixbuf()
|
||||||
statusCol.pack_start(status_icon, False)
|
statusCol.pack_start(status_icon, False)
|
||||||
statusCol.pack_start(status_txt, False)
|
statusCol.pack_start(status_txt, False)
|
||||||
statusCol.add_attribute(status_txt, 'text', 3)
|
statusCol.add_attribute(status_txt, 'text', ROW_STATUS)
|
||||||
statusCol.add_attribute(status_icon, 'pixbuf', 4)
|
statusCol.add_attribute(status_icon, 'pixbuf', ROW_STATUS_ICON)
|
||||||
statusCol.set_visible(self.config.is_vmlist_status_visible())
|
statusCol.set_visible(self.config.is_vmlist_status_visible())
|
||||||
|
|
||||||
cpuUsage_txt = gtk.CellRendererText()
|
cpuUsage_txt = gtk.CellRendererText()
|
||||||
cpuUsage_img = sparkline.CellRendererSparkline()
|
cpuUsage_img = sparkline.CellRendererSparkline()
|
||||||
cpuUsageCol.pack_start(cpuUsage_txt, False)
|
cpuUsageCol.pack_start(cpuUsage_txt, False)
|
||||||
cpuUsageCol.pack_start(cpuUsage_img, False)
|
cpuUsageCol.pack_start(cpuUsage_img, False)
|
||||||
cpuUsageCol.add_attribute(cpuUsage_txt, 'text', 5)
|
cpuUsageCol.add_attribute(cpuUsage_txt, 'text', ROW_CPU)
|
||||||
cpuUsageCol.set_cell_data_func(cpuUsage_img, self.cpu_usage_img, None)
|
cpuUsageCol.set_cell_data_func(cpuUsage_img, self.cpu_usage_img, None)
|
||||||
cpuUsageCol.set_visible(self.config.is_vmlist_cpu_usage_visible())
|
cpuUsageCol.set_visible(self.config.is_vmlist_cpu_usage_visible())
|
||||||
cpuUsageCol.set_sort_column_id(VMLIST_SORT_CPU_USAGE)
|
cpuUsageCol.set_sort_column_id(VMLIST_SORT_CPU_USAGE)
|
||||||
|
|
||||||
virtualCPUs_txt = gtk.CellRendererText()
|
virtualCPUs_txt = gtk.CellRendererText()
|
||||||
virtualCPUsCol.pack_start(virtualCPUs_txt, False)
|
virtualCPUsCol.pack_start(virtualCPUs_txt, False)
|
||||||
virtualCPUsCol.add_attribute(virtualCPUs_txt, 'text', 6)
|
virtualCPUsCol.add_attribute(virtualCPUs_txt, 'text', ROW_VCPUS)
|
||||||
virtualCPUsCol.set_visible(self.config.is_vmlist_virtual_cpus_visible())
|
virtualCPUsCol.set_visible(self.config.is_vmlist_virtual_cpus_visible())
|
||||||
|
|
||||||
memoryUsage_txt = gtk.CellRendererText()
|
memoryUsage_txt = gtk.CellRendererText()
|
||||||
memoryUsage_img = gtk.CellRendererProgress()
|
memoryUsage_img = gtk.CellRendererProgress()
|
||||||
memoryUsageCol.pack_start(memoryUsage_txt, False)
|
memoryUsageCol.pack_start(memoryUsage_txt, False)
|
||||||
memoryUsageCol.pack_start(memoryUsage_img, False)
|
memoryUsageCol.pack_start(memoryUsage_img, False)
|
||||||
memoryUsageCol.add_attribute(memoryUsage_txt, 'text', 7)
|
memoryUsageCol.add_attribute(memoryUsage_txt, 'text', ROW_MEM)
|
||||||
memoryUsageCol.add_attribute(memoryUsage_img, 'value', 8)
|
memoryUsageCol.add_attribute(memoryUsage_img, 'value', ROW_MEM_USAGE)
|
||||||
memoryUsageCol.set_visible(self.config.is_vmlist_memory_usage_visible())
|
memoryUsageCol.set_visible(self.config.is_vmlist_memory_usage_visible())
|
||||||
memoryUsageCol.set_sort_column_id(VMLIST_SORT_MEMORY_USAGE)
|
memoryUsageCol.set_sort_column_id(VMLIST_SORT_MEMORY_USAGE)
|
||||||
|
|
||||||
diskUsage_txt = gtk.CellRendererText()
|
diskIOIn_txt = gtk.CellRendererText()
|
||||||
diskUsage_img = gtk.CellRendererProgress()
|
diskIOOut_txt = gtk.CellRendererText()
|
||||||
diskUsageCol.pack_start(diskUsage_txt, False)
|
diskIOCol.pack_start(diskIOIn_txt, False)
|
||||||
diskUsageCol.pack_start(diskUsage_img, False)
|
diskIOCol.pack_start(diskIOOut_txt, False)
|
||||||
diskUsageCol.set_visible(self.config.is_vmlist_disk_usage_visible())
|
diskIOCol.add_attribute(diskIOIn_txt, 'text', ROW_DISK_RD)
|
||||||
diskUsageCol.set_sort_column_id(VMLIST_SORT_DISK_USAGE)
|
diskIOCol.add_attribute(diskIOOut_txt, 'text', ROW_DISK_WR)
|
||||||
|
diskIOCol.set_visible(self.config.is_vmlist_disk_io_visible())
|
||||||
|
diskIOCol.set_sort_column_id(VMLIST_SORT_DISK_IO)
|
||||||
|
|
||||||
networkTraffic_txt = gtk.CellRendererText()
|
networkTrafficIn_txt = gtk.CellRendererText()
|
||||||
networkTraffic_img = gtk.CellRendererProgress()
|
networkTrafficOut_txt = gtk.CellRendererText()
|
||||||
networkTrafficCol.pack_start(networkTraffic_txt, False)
|
networkTrafficCol.pack_start(networkTrafficIn_txt, False)
|
||||||
networkTrafficCol.pack_start(networkTraffic_img, False)
|
networkTrafficCol.pack_start(networkTrafficOut_txt, False)
|
||||||
|
networkTrafficCol.add_attribute(networkTrafficIn_txt, 'text', ROW_NET_RX)
|
||||||
|
networkTrafficCol.add_attribute(networkTrafficOut_txt, 'text', ROW_NET_TX)
|
||||||
networkTrafficCol.set_visible(self.config.is_vmlist_network_traffic_visible())
|
networkTrafficCol.set_visible(self.config.is_vmlist_network_traffic_visible())
|
||||||
networkTrafficCol.set_sort_column_id(VMLIST_SORT_NETWORK_USAGE)
|
networkTrafficCol.set_sort_column_id(VMLIST_SORT_NETWORK_USAGE)
|
||||||
|
|
||||||
|
@ -883,7 +906,7 @@ class vmmManager(gobject.GObject):
|
||||||
model.set_sort_func(VMLIST_SORT_NAME, self.vmlist_name_sorter)
|
model.set_sort_func(VMLIST_SORT_NAME, self.vmlist_name_sorter)
|
||||||
model.set_sort_func(VMLIST_SORT_CPU_USAGE, self.vmlist_cpu_usage_sorter)
|
model.set_sort_func(VMLIST_SORT_CPU_USAGE, self.vmlist_cpu_usage_sorter)
|
||||||
model.set_sort_func(VMLIST_SORT_MEMORY_USAGE, self.vmlist_memory_usage_sorter)
|
model.set_sort_func(VMLIST_SORT_MEMORY_USAGE, self.vmlist_memory_usage_sorter)
|
||||||
model.set_sort_func(VMLIST_SORT_DISK_USAGE, self.vmlist_disk_usage_sorter)
|
model.set_sort_func(VMLIST_SORT_DISK_IO, self.vmlist_disk_io_sorter)
|
||||||
model.set_sort_func(VMLIST_SORT_NETWORK_USAGE, self.vmlist_network_usage_sorter)
|
model.set_sort_func(VMLIST_SORT_NETWORK_USAGE, self.vmlist_network_usage_sorter)
|
||||||
|
|
||||||
model.set_sort_column_id(VMLIST_SORT_NAME, gtk.SORT_ASCENDING)
|
model.set_sort_column_id(VMLIST_SORT_NAME, gtk.SORT_ASCENDING)
|
||||||
|
@ -901,11 +924,11 @@ class vmmManager(gobject.GObject):
|
||||||
def vmlist_memory_usage_sorter(self, model, iter1, iter2):
|
def vmlist_memory_usage_sorter(self, model, iter1, iter2):
|
||||||
return cmp(model.get_value(iter1, ROW_HANDLE).current_memory_percentage(), model.get_value(iter2, ROW_HANDLE).current_memory_percentage())
|
return cmp(model.get_value(iter1, ROW_HANDLE).current_memory_percentage(), model.get_value(iter2, ROW_HANDLE).current_memory_percentage())
|
||||||
|
|
||||||
def vmlist_disk_usage_sorter(self, model, iter1, iter2):
|
def vmlist_disk_io_sorter(self, model, iter1, iter2):
|
||||||
return cmp(model.get_value(iter1, ROW_HANDLE).disk_usage(), model.get_value(iter2, ROW_HANDLE).disk_usage())
|
return cmp(model.get_value(iter1, ROW_HANDLE).disk_io_rate(), model.get_value(iter2, ROW_HANDLE).disk_io_rate())
|
||||||
|
|
||||||
def vmlist_network_usage_sorter(self, model, iter1, iter2):
|
def vmlist_network_usage_sorter(self, model, iter1, iter2):
|
||||||
return cmp(model.get_value(iter1, ROW_HANDLE).network_traffic(), model.get_value(iter2, ROW_HANDLE).network_traffic())
|
return cmp(model.get_value(iter1, ROW_HANDLE).network_traffic_rate(), model.get_value(iter2, ROW_HANDLE).network_traffic_rate())
|
||||||
|
|
||||||
def toggle_domain_id_visible_conf(self, menu):
|
def toggle_domain_id_visible_conf(self, menu):
|
||||||
self.config.set_vmlist_domain_id_visible(menu.get_active())
|
self.config.set_vmlist_domain_id_visible(menu.get_active())
|
||||||
|
@ -952,14 +975,14 @@ class vmmManager(gobject.GObject):
|
||||||
col = vmlist.get_column(COL_MEM)
|
col = vmlist.get_column(COL_MEM)
|
||||||
col.set_visible(self.config.is_vmlist_memory_usage_visible())
|
col.set_visible(self.config.is_vmlist_memory_usage_visible())
|
||||||
|
|
||||||
def toggle_disk_usage_visible_conf(self, menu):
|
def toggle_disk_io_visible_conf(self, menu):
|
||||||
self.config.set_vmlist_disk_usage_visible(menu.get_active())
|
self.config.set_vmlist_disk_io_visible(menu.get_active())
|
||||||
|
|
||||||
def toggle_disk_usage_visible_widget(self, ignore1, ignore2, ignore3, ignore4):
|
def toggle_disk_io_visible_widget(self, ignore1, ignore2, ignore3, ignore4):
|
||||||
menu = self.window.get_widget("menu_view_disk_usage")
|
menu = self.window.get_widget("menu_view_disk_io")
|
||||||
vmlist = self.window.get_widget("vm-list")
|
vmlist = self.window.get_widget("vm-list")
|
||||||
col = vmlist.get_column(COL_DISK)
|
col = vmlist.get_column(COL_DISK)
|
||||||
col.set_visible(self.config.is_vmlist_disk_usage_visible())
|
col.set_visible(self.config.is_vmlist_disk_io_visible())
|
||||||
|
|
||||||
def toggle_network_traffic_visible_conf(self, menu):
|
def toggle_network_traffic_visible_conf(self, menu):
|
||||||
self.config.set_vmlist_network_traffic_visible(menu.get_active())
|
self.config.set_vmlist_network_traffic_visible(menu.get_active())
|
||||||
|
|
|
@ -1247,23 +1247,6 @@
|
||||||
<property name="row_spacing">3</property>
|
<property name="row_spacing">3</property>
|
||||||
<property name="column_spacing">3</property>
|
<property name="column_spacing">3</property>
|
||||||
|
|
||||||
<child>
|
|
||||||
<widget class="GtkProgressBar" id="overview-disk-usage-bar">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
|
|
||||||
<property name="fraction">0.119999997318</property>
|
|
||||||
<property name="pulse_step">0.10000000149</property>
|
|
||||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
|
||||||
</widget>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="top_attach">2</property>
|
|
||||||
<property name="bottom_attach">3</property>
|
|
||||||
<property name="y_options"></property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkLabel" id="label45">
|
<widget class="GtkLabel" id="label45">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1323,7 +1306,7 @@
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkLabel" id="overview-disk-usage-label">
|
<widget class="GtkLabel" id="overview-disk-usage-label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">Disk usage:</property>
|
<property name="label" translatable="yes">Disk I/O:</property>
|
||||||
<property name="use_underline">False</property>
|
<property name="use_underline">False</property>
|
||||||
<property name="use_markup">False</property>
|
<property name="use_markup">False</property>
|
||||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||||
|
@ -1351,7 +1334,7 @@
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkLabel" id="overview-network-traffic-label">
|
<widget class="GtkLabel" id="overview-network-traffic-label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">Network usage:</property>
|
<property name="label" translatable="yes">Network I/O:</property>
|
||||||
<property name="use_underline">False</property>
|
<property name="use_underline">False</property>
|
||||||
<property name="use_markup">False</property>
|
<property name="use_markup">False</property>
|
||||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||||
|
@ -1435,7 +1418,7 @@
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkLabel" id="overview-disk-usage-text">
|
<widget class="GtkLabel" id="overview-disk-usage-text">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">20 bits/sec</property>
|
<property name="label" translatable="yes">20 KBytes/s</property>
|
||||||
<property name="use_underline">False</property>
|
<property name="use_underline">False</property>
|
||||||
<property name="use_markup">False</property>
|
<property name="use_markup">False</property>
|
||||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||||
|
|
|
@ -260,19 +260,19 @@
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkCheckMenuItem" id="menu_view_disk_usage">
|
<widget class="GtkCheckMenuItem" id="menu_view_disk_io">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">Disk usage</property>
|
<property name="label" translatable="yes">Disk I/O</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<signal name="activate" handler="on_menu_view_disk_usage_activate" last_modification_time="Tue, 28 Mar 2006 16:35:00 GMT"/>
|
<signal name="activate" handler="on_menu_view_disk_io_activate" last_modification_time="Tue, 28 Mar 2006 16:35:00 GMT"/>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkCheckMenuItem" id="menu_view_network_traffic">
|
<widget class="GtkCheckMenuItem" id="menu_view_network_traffic">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="label" translatable="yes">Network traffic</property>
|
<property name="label" translatable="yes">Network I/O</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<signal name="activate" handler="on_menu_view_network_traffic_activate" last_modification_time="Tue, 28 Mar 2006 16:35:00 GMT"/>
|
<signal name="activate" handler="on_menu_view_network_traffic_activate" last_modification_time="Tue, 28 Mar 2006 16:35:00 GMT"/>
|
||||||
|
|
Loading…
Reference in New Issue