aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2012-09-14 13:59:54 +0200
committerGerd Hoffmann <kraxel@redhat.com>2012-09-14 13:59:54 +0200
commitdd5b27b164ffd16756218795b4f6c1892ad795d2 (patch)
tree2f06af87f49bf3f382055a97f137a1d229b2f5bf
parent72a7b882581d685b84d3cde0704029af710fc15e (diff)
downloadvconsole-dd5b27b164ffd16756218795b4f6c1892ad795d2.tar.gz
visualize cpu load
-rw-r--r--domain.c19
-rw-r--r--vconsole.c34
-rw-r--r--vconsole.h7
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;