# HG changeset patch # User Jon Nordby # Date 1257879542 -3600 # Node ID 4cc78a5138a02eaa6f7b2ab7d1224eb9a9b2041c # Parent 2907191a7a21c9eb51aad693f642ea9561d50ebc manager: Bring back multiple graph as an option. Essentially a revert of the changes in 09189003ddf9 diff -r 2907191a7a21 -r 4cc78a5138a0 src/virt-manager.schemas.in --- a/src/virt-manager.schemas.in Wed Oct 28 20:35:13 2009 -0400 +++ b/src/virt-manager.schemas.in Tue Nov 10 19:59:02 2009 +0100 @@ -1,15 +1,41 @@ - /schemas/apps/::PACKAGE::/vmlist-fields/stats-type - /apps/::PACKAGE::/vmlist-fields/stats-type + /schemas/apps/::PACKAGE::/vmlist-fields/disk_usage + /apps/::PACKAGE::/vmlist-fields/disk_usage ::PACKAGE:: - int + bool 0 - Stats type in manager view - Type of stats to graph (cpu, disk, net) in manager view + Show disk I/O in summary + Show the disk I/O field in the domain list summary view + + + + + /schemas/apps/::PACKAGE::/vmlist-fields/network_traffic + /apps/::PACKAGE::/vmlist-fields/network_traffic + ::PACKAGE:: + bool + 0 + + + Show network I/O in summary + Show the network I/O field in the domain list summary view + + + + + /schemas/apps/::PACKAGE::/vmlist-fields/cpu_usage + /apps/::PACKAGE::/vmlist-fields/cpu_usage + ::PACKAGE:: + bool + 1 + + + Show cpu usage in summary + Show the cpu usage field in the domain list summary view diff -r 2907191a7a21 -r 4cc78a5138a0 src/virtManager/config.py --- a/src/virtManager/config.py Wed Oct 28 20:35:13 2009 -0400 +++ b/src/virtManager/config.py Tue Nov 10 19:59:02 2009 +0100 @@ -245,12 +245,23 @@ # Suggest gconf syncs, so that the unset dirs are fully removed self.conf.suggest_sync() - def get_vmlist_stats_type(self): - return self.conf.get_int(self.conf_dir + "/vmlist-fields/stats_type") + def is_vmlist_cpu_usage_visible(self): + return self.conf.get_bool(self.conf_dir + "/vmlist-fields/cpu_usage") - def set_vmlist_stats_type(self, val): - self.conf.set_int(self.conf_dir + "/vmlist-fields/stats_type", val) + def is_vmlist_disk_io_visible(self): + return self.conf.get_bool(self.conf_dir + "/vmlist-fields/disk_usage") + def is_vmlist_network_traffic_visible(self): + return self.conf.get_bool(self.conf_dir + "/vmlist-fields/network_traffic") + + def set_vmlist_cpu_usage_visible(self, state): + self.conf.set_bool(self.conf_dir + "/vmlist-fields/cpu_usage", state) + + def set_vmlist_disk_io_visible(self, state): + self.conf.set_bool(self.conf_dir + "/vmlist-fields/disk_usage", state) + + def set_vmlist_network_traffic_visible(self, state): + self.conf.set_bool(self.conf_dir + "/vmlist-fields/network_traffic", state) def get_default_directory(self, conn, _type): if not _type: @@ -290,9 +301,14 @@ def set_view_system_tray(self, val): self.conf.set_bool(self.conf_dir + "/system-tray", val) - def on_vmlist_stats_type_changed(self, callback): - self.conf.notify_add(self.conf_dir + "/vmlist-fields/stats_type", - callback) + def on_vmlist_cpu_usage_visible_changed(self, callback): + self.conf.notify_add(self.conf_dir + "/vmlist-fields/cpu_usage", callback) + + def on_vmlist_disk_io_visible_changed(self, callback): + self.conf.notify_add(self.conf_dir + "/vmlist-fields/disk_usage", callback) + + def on_vmlist_network_traffic_visible_changed(self, callback): + self.conf.notify_add(self.conf_dir + "/vmlist-fields/network_traffic", callback) def get_stats_update_interval(self): interval = self.conf.get_int(self.conf_dir + "/stats/update-interval") diff -r 2907191a7a21 -r 4cc78a5138a0 src/virtManager/manager.py --- a/src/virtManager/manager.py Wed Oct 28 20:35:13 2009 -0400 +++ b/src/virtManager/manager.py Tue Nov 10 19:59:02 2009 +0100 @@ -34,8 +34,6 @@ from virtManager.graphwidgets import CellRendererSparkline from virtManager import util as util -VMLIST_SORT_NAME = 1 -VMLIST_SORT_STATS = 2 # fields in the tree model data set ROW_HANDLE = 0 @@ -52,8 +50,9 @@ # Columns in the tree view COL_NAME = 0 -COL_STATUS = 1 -COL_STATS = 2 +COL_CPU = 1 +COL_DISK = 2 +COL_NETWORK = 3 rcstring = """ style "toolbar-style" { @@ -159,12 +158,11 @@ self.startup_error = None self.ignore_pause = False - self.stats_column = None - self.stats_sparkline = None - self.prepare_vmlist() - self.config.on_vmlist_stats_type_changed(self.stats_toggled_config) + self.config.on_vmlist_cpu_usage_visible_changed(self.toggle_cpu_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) # Register callbacks with the global stats enable/disable values # that disable the associated vmlist widgets if reporting is disabled @@ -173,6 +171,11 @@ self.config.on_stats_enable_net_poll_changed(self.enable_polling, cfg.STATS_NETWORK) + self.window.get_widget("menu_view_stats_cpu").set_active(self.config.is_vmlist_cpu_usage_visible()) + self.window.get_widget("menu_view_stats_disk").set_active(self.config.is_vmlist_disk_io_visible()) + self.window.get_widget("menu_view_stats_network").set_active(self.config.is_vmlist_network_traffic_visible()) + + self.vmmenu_icons = {} self.vmmenu_icons["run"] = gtk.Image() self.vmmenu_icons["run"].set_from_stock(gtk.STOCK_MEDIA_PLAY, @@ -325,12 +328,12 @@ self.connmenu.show() self.window.signal_autoconnect({ - "on_menu_view_stats_disk_toggled" : (self.stats_toggled, - cfg.STATS_DISK), - "on_menu_view_stats_network_toggled" : (self.stats_toggled, - cfg.STATS_NETWORK), - "on_menu_view_stats_cpu_toggled" : (self.stats_toggled, - cfg.STATS_CPU), + "on_menu_view_cpu_usage_activate": (self.toggle_stats_visible, + cfg.STATS_CPU), + "on_menu_view_disk_io_activate" : (self.toggle_stats_visible, + cfg.STATS_DISK), + "on_menu_view_network_traffic_activate": (self.toggle_stats_visible, + cfg.STATS_NETWORK), "on_vm_manager_delete_event": self.close, "on_menu_file_add_connection_activate": self.new_connection, @@ -845,11 +848,15 @@ nameCol.set_expand(True) nameCol.set_spacing(6) cpuUsageCol = gtk.TreeViewColumn(_("CPU usage")) - cpuUsageCol.set_min_width(150) +# cpuUsageCol.set_min_width(150) + diskIOCol = gtk.TreeViewColumn(_("Disk I/O")) + networkTrafficCol = gtk.TreeViewColumn(_("Network I/O")) statusCol = nameCol vmlist.append_column(nameCol) vmlist.append_column(cpuUsageCol) + vmlist.append_column(diskIOCol) + vmlist.append_column(networkTrafficCol) # For the columns which follow, we deliberately bind columns # to fields in the list store & on each update copy the info @@ -868,7 +875,7 @@ name_txt = gtk.CellRendererText() nameCol.pack_start(name_txt, True) nameCol.add_attribute(name_txt, 'markup', ROW_MARKUP) - nameCol.set_sort_column_id(VMLIST_SORT_NAME) + nameCol.set_sort_column_id(COL_NAME) cpuUsage_txt = gtk.CellRendererText() cpuUsage_img = CellRendererSparkline() @@ -879,14 +886,37 @@ cpuUsageCol.pack_start(cpuUsage_txt, False) cpuUsageCol.add_attribute(cpuUsage_img, 'visible', ROW_IS_VM) cpuUsageCol.add_attribute(cpuUsage_txt, 'visible', ROW_IS_CONN) - cpuUsageCol.set_sort_column_id(VMLIST_SORT_STATS) - self.stats_sparkline = cpuUsage_img - self.stats_column = cpuUsageCol - self.stats_toggled(None, self.get_stats_type()) + cpuUsageCol.set_cell_data_func(cpuUsage_img, self.cpu_usage_img, None) + cpuUsageCol.set_visible(self.config.is_vmlist_cpu_usage_visible()) + cpuUsageCol.set_sort_column_id(COL_CPU) - model.set_sort_func(VMLIST_SORT_NAME, self.vmlist_name_sorter) + diskIO_img = CellRendererSparkline() + diskIO_img.set_property("xpad", 6) + diskIO_img.set_property("ypad", 12) + diskIO_img.set_property("reversed", True) + diskIOCol.pack_start(diskIO_img, True) + diskIOCol.add_attribute(diskIO_img, 'visible', ROW_IS_VM) + diskIOCol.set_cell_data_func(diskIO_img, self.disk_io_img, None) + diskIOCol.set_visible(self.config.is_vmlist_disk_io_visible()) + diskIOCol.set_sort_column_id(COL_DISK) - model.set_sort_column_id(VMLIST_SORT_NAME, gtk.SORT_ASCENDING) + networkTraffic_img = CellRendererSparkline() + networkTraffic_img.set_property("xpad", 6) + networkTraffic_img.set_property("ypad", 12) + networkTraffic_img.set_property("reversed", True) + networkTrafficCol.pack_start(networkTraffic_img, True) + networkTrafficCol.add_attribute(networkTraffic_img, 'visible', ROW_IS_VM) + networkTrafficCol.set_cell_data_func(networkTraffic_img, + self.network_traffic_img, None) + networkTrafficCol.set_visible(self.config.is_vmlist_network_traffic_visible()) + networkTrafficCol.set_sort_column_id(COL_NETWORK) + + model.set_sort_func(COL_NAME, self.vmlist_name_sorter) + model.set_sort_func(COL_CPU, self.vmlist_cpu_usage_sorter) + model.set_sort_func(COL_DISK, self.vmlist_disk_io_sorter) + model.set_sort_func(COL_NETWORK, self.vmlist_network_usage_sorter) + + model.set_sort_column_id(COL_NAME, gtk.SORT_ASCENDING) def vmlist_name_sorter(self, model, iter1, iter2): return cmp(model.get_value(iter1, ROW_NAME), @@ -918,53 +948,31 @@ widget.set_sensitive(False) tool_text = _("Disabled in preferences dialog.") - if self.get_stats_type() == userdata: - # Switch graphs over to guaranteed safe value - self.stats_toggled(None, cfg.STATS_CPU) - util.tooltip_wrapper(widget, tool_text) - def stats_toggled_config(self, ignore1, ignore2, conf_entry, ignore4): - self.stats_toggled(None, conf_entry.get_value().get_int()) + def toggle_network_traffic_visible_widget(self, *ignore): + vmlist = self.window.get_widget("vm-list") + col = vmlist.get_column(COL_NETWORK) + col.set_visible(self.config.is_vmlist_network_traffic_visible()) - def get_stats_type(self): - return self.config.get_vmlist_stats_type() + def toggle_disk_io_visible_widget(self, *ignore): + vmlist = self.window.get_widget("vm-list") + col = vmlist.get_column(COL_DISK) + col.set_visible(self.config.is_vmlist_disk_io_visible()) - def stats_toggled(self, src, stats_id): - if src and not src.get_active(): - return + def toggle_cpu_usage_visible_widget(self, *ignore): + vmlist = self.window.get_widget("vm-list") + col = vmlist.get_column(COL_CPU) + col.set_visible(self.config.is_vmlist_cpu_usage_visible()) - if stats_id == cfg.STATS_NETWORK: - column_name = _("Network I/O") - stats_func = self.network_traffic_img - sort_func = self.vmlist_network_usage_sorter - widg = "menu_view_stats_network" - elif stats_id == cfg.STATS_DISK: - column_name = _("Disk I/O") - stats_func = self.disk_io_img - sort_func = self.vmlist_disk_io_sorter - widg = "menu_view_stats_disk" - elif stats_id == cfg.STATS_CPU: - column_name = _("CPU Usage") - stats_func = self.cpu_usage_img - sort_func = self.vmlist_cpu_usage_sorter - widg = "menu_view_stats_cpu" - else: - return - - if not src: - self.window.get_widget(widg).set_active(True) - - if self.stats_column: - vmlist = self.window.get_widget("vm-list") - model = vmlist.get_model() - self.stats_column.set_title(column_name) - self.stats_column.set_cell_data_func(self.stats_sparkline, - stats_func, None) - model.set_sort_func(VMLIST_SORT_STATS, sort_func) - - if stats_id != self.get_stats_type(): - self.config.set_vmlist_stats_type(stats_id) + def toggle_stats_visible(self, src, stats_id): + visible = src.get_active() + set_stats = { + cfg.STATS_CPU: self.config.set_vmlist_cpu_usage_visible, + cfg.STATS_DISK: self.config.set_vmlist_disk_io_visible, + cfg.STATS_NETWORK: self.config.set_vmlist_network_traffic_visible, + } + set_stats[stats_id](visible) def cpu_usage_img(self, column, cell, model, _iter, data): if model.get_value(_iter, ROW_HANDLE) is None: diff -r 2907191a7a21 -r 4cc78a5138a0 src/vmm-manager.glade --- a/src/vmm-manager.glade Wed Oct 28 20:35:13 2009 -0400 +++ b/src/vmm-manager.glade Tue Nov 10 19:59:02 2009 +0100 @@ -158,33 +158,31 @@ True - - + + True - CPU + CPU Usage True - True - + True + + + + + + True + Disk I/O + True + True + - + True - Disk + Network I/O True - True - menu_view_stats_cpu - - - - - - True - Network - True - True - menu_view_stats_cpu - + True +