[PVFS2-CVS] commit by rbross in pvfs2/src/apps/karma: details.c karma.h status.c

CVS commit program cvs at parl.clemson.edu
Thu Feb 12 14:24:49 EST 2004


Update of /projects/cvsroot/pvfs2/src/apps/karma
In directory parlweb:/tmp/cvs-serv10093/src/apps/karma

Modified Files:
	details.c karma.h status.c 
Log Message:
Nice server detail popup on double-click of status bar.


Index: details.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/details.c,v
diff -p -u -r1.13 -r1.14
--- details.c	12 Feb 2004 18:58:32 -0000	1.13
+++ details.c	12 Feb 2004 19:24:49 -0000	1.14
@@ -8,35 +8,23 @@
 
 #define GUI_DETAILS_ENABLE_SORTING
 
-/* values used for column names; don't mess with these indescriminately */
-enum {
-    GUI_DETAILS_NAME = 0,
-    GUI_DETAILS_RAM_TOT,
-    GUI_DETAILS_RAM_AVAIL,
-    GUI_DETAILS_UPTIME,
-    GUI_DETAILS_HANDLES_TOT,
-    GUI_DETAILS_HANDLES_AVAIL,
-    GUI_DETAILS_SPACE_TOT,
-    GUI_DETAILS_SPACE_AVAIL,
-    GUI_DETAILS_TYPE
-};
-
-char *column_name[] = { "Server Address (BMI)",
-			"Total RAM",
-			"Available RAM",
-			"Uptime",
-			"Total Handles",
-			"Available Handles",
-			"Total Space",
-			"Available Space",
-			"Type of Service" };
-
 static int gui_details_initialized    = 0;
 static GtkListStore *gui_details_list = NULL;
 static GtkWidget *gui_details_view    = NULL;
 
 static GtkTreeViewColumn *gui_details_col[GUI_DETAILS_TYPE + 1];
 
+/* THESE MUST MATCH WITH ENUM IN KARMA.H! */
+static char *gui_details_column_name[] = { "Server Address (BMI)",
+					   "Total RAM",
+					   "Available RAM",
+					   "Uptime",
+					   "Total Handles",
+					   "Available Handles",
+					   "Total Space",
+					   "Available Space",
+					   "Type of Service" };
+
 #ifdef GUI_DETAILS_ENABLE_SORTING
 static gint gui_details_float_string_compare(GtkTreeModel *model,
 					     GtkTreeIter *iter_a,
@@ -109,7 +97,7 @@ GtkWidget *gui_details_view_new(GtkListS
 	GtkCellRenderer *renderer;
 	
 	col[i] = gtk_tree_view_column_new();
-	gtk_tree_view_column_set_title(col[i], column_name[i]);
+	gtk_tree_view_column_set_title(col[i], gui_details_column_name[i]);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), col[i]);
 
 	renderer = gtk_cell_renderer_text_new();
@@ -158,6 +146,11 @@ GtkWidget *gui_details_view_new(GtkListS
     return list_view;
 }
 
+/* gui_details_update()
+ *
+ * Now just a wrapper for gui_details_view_fill(), used for 
+ * setting up the details page.
+ */
 void gui_details_update(struct PVFS_mgmt_server_stat *s_stat,
 			int s_stat_ct)
 {
@@ -232,38 +225,38 @@ void gui_details_view_fill(GtkWidget *vi
 
     /* update column titles */
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_RAM_TOT], rt_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_RAM_TOT],
+	     gui_details_column_name[GUI_DETAILS_RAM_TOT], rt_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_RAM_TOT],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_RAM_AVAIL], ra_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_RAM_AVAIL],
+	     gui_details_column_name[GUI_DETAILS_RAM_AVAIL], ra_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_RAM_AVAIL],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_UPTIME], up_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_UPTIME],
+	     gui_details_column_name[GUI_DETAILS_UPTIME], up_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_UPTIME],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_HANDLES_TOT], ht_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_HANDLES_TOT],
+	     gui_details_column_name[GUI_DETAILS_HANDLES_TOT], ht_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_HANDLES_TOT],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_HANDLES_AVAIL], ha_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_HANDLES_AVAIL],
+	     gui_details_column_name[GUI_DETAILS_HANDLES_AVAIL], ha_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_HANDLES_AVAIL],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_SPACE_TOT], bt_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_SPACE_TOT],
+	     gui_details_column_name[GUI_DETAILS_SPACE_TOT], bt_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_SPACE_TOT],
 				   titlebuf);
 
     snprintf(titlebuf, sizeof(titlebuf), "%s (%s)",
-	     column_name[GUI_DETAILS_SPACE_AVAIL], ba_units);
-    gtk_tree_view_column_set_title(gui_details_col[GUI_DETAILS_SPACE_AVAIL],
+	     gui_details_column_name[GUI_DETAILS_SPACE_AVAIL], ba_units);
+    gtk_tree_view_column_set_title(col[GUI_DETAILS_SPACE_AVAIL],
 				   titlebuf);
 
     /* update table of data */
@@ -276,19 +269,38 @@ void gui_details_view_fill(GtkWidget *vi
     /* just clear out the list and then refill it */
     gtk_list_store_clear(list);
 
-    for (i=0; i < s_stat_ct; i++) {
-	gui_details_view_insert(list,
-				&s_stat[i],
-				rt_div,
-				ra_div,
-				up_div,
-				ht_div,
-				ha_div,
-				bt_div,
-				ba_div);
+    if (server_list == NULL) {
+	for (i=0; i < s_stat_ct; i++) {
+	    gui_details_view_insert(list,
+				    &s_stat[i],
+				    rt_div,
+				    ra_div,
+				    up_div,
+				    ht_div,
+				    ha_div,
+				    bt_div,
+				    ba_div);
+	}
+    }
+    else {
+	i = 0;
+	while (server_list[i] >= 0) {
+	    assert(server_list[i] < s_stat_ct);
+
+	    gui_details_view_insert(list,
+				    &s_stat[server_list[i]],
+				    rt_div,
+				    ra_div,
+				    up_div,
+				    ht_div,
+				    ha_div,
+				    bt_div,
+				    ba_div);
+	    i++;
+	}
     }
 
-    /* reattach model to view */
+    /* reattach model to view; remove our reference */
     gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
     g_object_unref(model);
 }

Index: karma.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/karma.h,v
diff -p -u -r1.10 -r1.11
--- karma.h	12 Feb 2004 18:47:36 -0000	1.10
+++ karma.h	12 Feb 2004 19:24:49 -0000	1.11
@@ -1,3 +1,7 @@
+#ifndef KARMA_H
+#define KARMA_H
+
+
 #include <gtk/gtk.h>
 
 #include "pvfs2.h"
@@ -94,6 +98,19 @@ GtkWidget *gui_details_setup(void);
 void gui_details_update(struct PVFS_mgmt_server_stat *s_stat,
 			int s_stat_ct);
 
+/* values used for details column names; don't mess with indescriminately */
+enum {
+    GUI_DETAILS_NAME = 0,
+    GUI_DETAILS_RAM_TOT,
+    GUI_DETAILS_RAM_AVAIL,
+    GUI_DETAILS_UPTIME,
+    GUI_DETAILS_HANDLES_TOT,
+    GUI_DETAILS_HANDLES_AVAIL,
+    GUI_DETAILS_SPACE_TOT,
+    GUI_DETAILS_SPACE_AVAIL,
+    GUI_DETAILS_TYPE
+};
+
 /* details view functions (details.c) - more generic */
 void gui_details_view_fill(GtkWidget *view,
 			   GtkListStore *list,
@@ -136,3 +153,4 @@ char *gui_units_size(PVFS_size size_byte
 char *gui_units_count(uint64_t count, float *divisor);
 char *gui_units_ops(PVFS_size ops, float *divisor);
 
+#endif /* KARMA_H */

Index: status.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/status.c,v
diff -p -u -r1.3 -r1.4
--- status.c	12 Feb 2004 18:32:29 -0000	1.3
+++ status.c	12 Feb 2004 19:24:49 -0000	1.4
@@ -73,6 +73,7 @@ static gint gui_status_graph_button_pres
 						   gpointer graph_state_ptr);
 
 static void gui_status_server_popup(struct PVFS_mgmt_server_stat *svr_stat,
+				    int svr_stat_ct,
 				    int svr_index);
 
 /* gui_status_setup()
@@ -549,16 +550,19 @@ static gint gui_status_graph_button_pres
     /* if # of servers just changed, just ignore the click for now */
     if (svr_stat_ct != g_state->nr_bars) return 0;
 
-    gui_status_server_popup(svr_stat, i);
+    gui_status_server_popup(svr_stat, svr_stat_ct, i);
 
     return 0;
 }
 
 static void gui_status_server_popup(struct PVFS_mgmt_server_stat *svr_stat,
+				    int svr_stat_ct,
 				    int svr_index)
 {
-    GtkWidget *dialog, *label, *frame, *table;
-    char buf[64];
+    GtkWidget *dialog, *view;
+    GtkListStore *list;
+    GtkTreeViewColumn *col[GUI_DETAILS_TYPE+1];
+    int svr_list[2];
 
     dialog = gtk_dialog_new_with_buttons("Server Details",
 					 GTK_WINDOW(main_window),
@@ -571,36 +575,25 @@ static void gui_status_server_popup(stru
 			     G_CALLBACK(gtk_widget_destroy),
 			     GTK_OBJECT(dialog));
 
-    /* format data for presentation */
-    frame = gtk_frame_new(svr_stat[svr_index].bmi_address);
-    gtk_frame_set_label_align(GTK_FRAME(frame), 0.0, 0.0);
-    
-    table = gtk_table_new(2, 5, 1);
-    gtk_container_add(GTK_CONTAINER(frame), table);
+    /* create contents of popup */
+    view = gui_details_view_new(&list, col, 0);
+
+    svr_list[0] = svr_index;
+    svr_list[1] = -1;
+
+    gui_details_view_fill(view,
+			  list,
+			  col,
+			  svr_stat,
+			  svr_stat_ct,
+			  svr_list);
 
-    label = gtk_label_new("Space Available/Total:");
-    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
-   
-    label = gtk_label_new("Memory Available/Total:");
-    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-
-    label = gtk_label_new("Handles Available/Total:");
-    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3);
-
-    label = gtk_label_new("Uptime:");
-    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
-		     0, GTK_FILL|GTK_EXPAND, 0, 0);
-
-    label = gtk_label_new("Server Type:");
-    gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 4, 5);
+    /* unref list so it will be freed when view is destroyed */
+    g_object_unref(list);
 
+    /* drop contents into popup; display */
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
-		      frame);
+		      view);
     gtk_widget_show_all(dialog);
 
     return;



More information about the PVFS2-CVS mailing list