From dd5b27b164ffd16756218795b4f6c1892ad795d2 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 14 Sep 2012 13:59:54 +0200 Subject: visualize cpu load --- domain.c | 19 ++++++++----------- vconsole.c | 34 +++++++++++++++++++++++++++++----- vconsole.h | 7 +++++-- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/domain.c b/domain.c index 406741a..002bb64 100644 --- a/domain.c +++ b/domain.c @@ -280,18 +280,12 @@ static void domain_connect(struct vconsole_domain *dom, virDomainPtr d) static void domain_update_info(struct vconsole_domain *dom, virDomainPtr d) { - int id; - dom->last_info = dom->info; dom->last_ts = dom->ts; gettimeofday(&dom->ts, NULL); dom->name = virDomainGetName(d); - id = virDomainGetID(d); - if (id < 0) - strcpy(dom->idstr, "-"); - else - snprintf(dom->idstr, sizeof(dom->idstr), "%d", id); + dom->id = virDomainGetID(d); virDomainGetInfo(d, &dom->info); dom->saved = virDomainHasManagedSaveImage(d, 0); @@ -317,19 +311,22 @@ static void domain_update_tree_store(struct vconsole_domain *dom, case VIR_DOMAIN_RUNNING: foreground = "darkgreen"; weight = PANGO_WEIGHT_BOLD; - snprintf(load, sizeof(load), "%d%%", dom->load); break; default: foreground = "black"; weight = PANGO_WEIGHT_NORMAL; - strcpy(load, ""); break; } + snprintf(load, sizeof(load), "%d%%", dom->load); + gtk_tree_store_set(dom->conn->win->store, guest, NAME_COL, dom->name, - ID_COL, dom->idstr, + ID_COL, dom->id, + RUNNING_COL, dom->info.state == VIR_DOMAIN_RUNNING, STATE_COL, domain_state_name(dom), - LOAD_COL, load, + NR_CPUS_COL, dom->info.nrVirtCpu, + LOAD_STR_COL, load, + LOAD_INT_COL, MIN(dom->load / dom->info.nrVirtCpu, 100), FOREGROUND_COL, foreground, WEIGHT_COL, weight, -1); diff --git a/vconsole.c b/vconsole.c index 695062e..64175eb 100644 --- a/vconsole.c +++ b/vconsole.c @@ -765,9 +765,12 @@ static void vconsole_tab_list_create(struct vconsole_window *win) G_TYPE_POINTER, // CPTR_COL G_TYPE_STRING, // URI_COL G_TYPE_POINTER, // DPTR_COL - G_TYPE_STRING, // ID_COL + G_TYPE_INT, // ID_COL + G_TYPE_BOOLEAN, // RUNNING_COL G_TYPE_STRING, // STATE_COL - G_TYPE_STRING, // LOAD_COL + G_TYPE_INT, // NR_CPUS_COL + G_TYPE_STRING, // LOAD_STR_COL + G_TYPE_INT, // LOAD_INT_COL G_TYPE_STRING, // FOREGROUND_COL G_TYPE_INT); // WEIGHT_COL sortable = GTK_TREE_SORTABLE(win->store); @@ -793,9 +796,11 @@ static void vconsole_tab_list_create(struct vconsole_window *win) /* id */ renderer = gtk_cell_renderer_text_new(); + g_object_set(renderer, "xalign", 0.5, NULL); column = gtk_tree_view_column_new_with_attributes("ID", renderer, "text", ID_COL, + "visible", RUNNING_COL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(win->tree), column); @@ -807,14 +812,33 @@ static void vconsole_tab_list_create(struct vconsole_window *win) NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(win->tree), column); - /* cpu load */ + /* cpu count */ renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("CPU", + g_object_set(renderer, "xalign", 0.5, NULL); + column = gtk_tree_view_column_new_with_attributes("vcpus", renderer, - "text", LOAD_COL, + "text", NR_CPUS_COL, + "visible", RUNNING_COL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(win->tree), column); + /* cpu load */ + renderer = gtk_cell_renderer_progress_new(); + g_object_set(renderer, "width", 100, NULL); + column = gtk_tree_view_column_new_with_attributes("Load", + renderer, + "text", LOAD_STR_COL, + "value", LOAD_INT_COL, + "visible", RUNNING_COL, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(win->tree), column); + + /* padding */ + renderer = gtk_cell_renderer_text_new(); + g_object_set(renderer, "visible", FALSE, NULL); + column = gtk_tree_view_column_new_with_attributes("", renderer, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(win->tree), column); + /* sort store */ gtk_tree_sortable_set_sort_column_id(sortable, NAME_COL, GTK_SORT_ASCENDING); diff --git a/vconsole.h b/vconsole.h index bf55ac6..06fc4c8 100644 --- a/vconsole.h +++ b/vconsole.h @@ -28,8 +28,11 @@ enum vconsole_cols { /* guests only */ DPTR_COL, // vconsole_domain ID_COL, + RUNNING_COL, STATE_COL, - LOAD_COL, + NR_CPUS_COL, + LOAD_STR_COL, + LOAD_INT_COL, /* beautify */ FOREGROUND_COL, @@ -81,7 +84,7 @@ struct vconsole_connect *connect_init(struct vconsole_window *win, struct vconsole_domain { struct vconsole_connect *conn; char uuid[VIR_UUID_STRING_BUFLEN]; - char idstr[16]; + int id; const char *name; GtkWidget *vbox, *vte, *status; -- cgit