From 60c7336ab951bd973f27e1d2f4db6598c94d823e Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Mon, 23 Oct 2006 18:01:28 +0000
Subject: [PATCH] added full info about bluegene blocks

---
 src/sview/block_info.c | 187 ++++++++++++++++++++++++++---------------
 1 file changed, 117 insertions(+), 70 deletions(-)

diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index f0ca567c693..8b63559ebe4 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -1,5 +1,5 @@
 /*****************************************************************************\
- *  part_info.c - Functions related to partition display 
+ *  block_info.c - Functions related to Bluegene block display 
  *  mode of sview.
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
@@ -97,6 +97,7 @@ static display_data_t display_data_block[] = {
 
 static display_data_t options_data_block[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, -1},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, BLOCK_PAGE},
@@ -108,41 +109,11 @@ static display_data_t *local_display_data = NULL;
 
 static char* _convert_conn_type(enum connection_type conn_type);
 static char* _convert_node_use(enum node_use_type node_use);
-static char *_part_state_str(rm_partition_state_t state);
 static int _in_slurm_partition(int *part_inx, int *block_inx);
 static void _append_block_record(sview_block_info_t *block_ptr,
 				 GtkTreeStore *treestore, GtkTreeIter *iter, 
 				 int line);
 
-
-
-static char *_part_state_str(rm_partition_state_t state)
-{
-	static char tmp[16];
-
-#ifdef HAVE_BG
-	switch (state) {
-		case RM_PARTITION_BUSY: 
-			return "BUSY";
-		case RM_PARTITION_CONFIGURING:
-			return "CONFIG";
-		case RM_PARTITION_DEALLOCATING:
-			return "DEALLOC";
-		case RM_PARTITION_ERROR:
-			return "ERROR";
-		case RM_PARTITION_FREE:
-			return "FREE";
-		case RM_PARTITION_NAV:
-			return "NAV";
-		case RM_PARTITION_READY:
-			return "READY";
-	}
-#endif
-
-	snprintf(tmp, sizeof(tmp), "%d", state);
-	return tmp;
-}
-
 static void _block_list_del(void *object)
 {
 	sview_block_info_t *block_ptr = (sview_block_info_t *)object;
@@ -211,6 +182,60 @@ static char* _convert_node_use(enum node_use_type node_use)
 	return "?";
 }
 
+static void _layout_block_record(GtkTreeView *treeview,
+				 sview_block_info_t *block_ptr, 
+				 int update)
+{
+	char *nodes = NULL;
+	char tmp_cnt[7];
+	char tmp_nodes[30];
+	GtkTreeIter iter;
+	GtkTreeStore *treestore = 
+		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+	
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_BLOCK].name,
+				   block_ptr->bg_block_name);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_PARTITION].name,
+				   block_ptr->slurm_part_name);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_STATE].name,
+				   bg_block_state_string(block_ptr->state));
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_USER].name,
+				   block_ptr->bg_user_name);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_CONN].name,
+				   _convert_conn_type(
+					   block_ptr->bg_conn_type));
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_USE].name,
+				   _convert_node_use(block_ptr->bg_node_use));
+	
+	convert_num_unit((float)block_ptr->node_cnt, tmp_cnt, UNIT_NONE);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_NODES].name,
+				   tmp_cnt);
+	
+	nodes = block_ptr->nodes;		
+	
+	if(block_ptr->quarter != (uint16_t) NO_VAL) {
+		if(block_ptr->nodecard != (uint16_t) NO_VAL)
+			sprintf(tmp_nodes, "%s.%d.%d", nodes,
+				block_ptr->quarter,
+				block_ptr->nodecard);
+		else
+			sprintf(tmp_nodes, "%s.%d", nodes,
+				block_ptr->quarter);
+		nodes = tmp_nodes;
+	} 
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_block[SORTID_NODELIST].name,
+				   nodes);
+
+}
+
 static void _update_block_record(sview_block_info_t *block_ptr, 
 				 GtkTreeStore *treestore, GtkTreeIter *iter)
 {
@@ -224,7 +249,7 @@ static void _update_block_record(sview_block_info_t *block_ptr,
 	gtk_tree_store_set(treestore, iter, SORTID_PARTITION, 
 			   block_ptr->slurm_part_name, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_STATE, 
-			   _part_state_str(block_ptr->state), -1);
+			   bg_block_state_string(block_ptr->state), -1);
 	gtk_tree_store_set(treestore, iter, SORTID_USER, 
 			   block_ptr->bg_user_name, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_CONN, 
@@ -409,59 +434,81 @@ static List _create_block_list(partition_info_msg_t *part_info_ptr,
 	
 	return block_list;
 }
+
 void _display_info_block(List block_list,
 			 popup_info_t *popup_win)
 {
 	specific_info_t *spec_info = popup_win->spec_info;
-	/* char *name = (char *)spec_info->search_info->gchar_data; */
-/* 	int i, found = 0; */
-/* 	sview_block_info_t *block_ptr = NULL; */
+	char *name = (char *)spec_info->search_info->gchar_data;
+	int i = -1, j = 0, found = 0;
+	sview_block_info_t *block_ptr = NULL;
 	char *info = NULL;
-	char *not_found = NULL;
-	GtkWidget *label = NULL;
+	int update = 0;
+	GtkTreeView *treeview = NULL;
+	ListIterator itr = NULL;
 	
 	if(!spec_info->search_info->gchar_data) {
 		info = xstrdup("No pointer given!");
 		goto finished;
 	}
 
-	if(spec_info->display_widget) {
-		not_found = 
-			xstrdup(GTK_LABEL(spec_info->display_widget)->text);
-		gtk_widget_destroy(spec_info->display_widget);
-		spec_info->display_widget = NULL;
+need_refresh:
+	if(!spec_info->display_widget) {
+		treeview = create_treeview_2cols_attach_to_table(
+			popup_win->table);
+		spec_info->display_widget = 
+			gtk_widget_ref(GTK_WIDGET(treeview));
+	} else {
+		treeview = GTK_TREE_VIEW(spec_info->display_widget);
+		update = 1;
 	}
 	/* this is here for if later we have more stats on a bluegene
 	   block */
-	/* itr = list_iterator_create(block_list); */
-/* 	while ((block_ptr = (sview_block_info_t*) list_next(itr))) { */
-/* 		if(!strcmp(block_ptr->bg_block_name, name)) { */
-/* 			if(!(info = slurm_sprint_block_info(&block_ptr, 0))) { */
-/* 				info = xmalloc(100); */
-/* 				sprintf(info,  */
-/* 					"Problem getting block " */
-/* 					"info for %s",  */
-/* 					block_ptr->bg_block_name); */
-/* 			} */
-/* 			found = 1; */
-/* 			break; */
-/* 		} */
-/* 	} */
-/* 	if(!found) { */
-/* 		char *temp = "BLOCK DOESN'T EXSIST\n"; */
-/* 		if(!not_found || strncmp(temp, not_found, strlen(temp)))  */
-/* 			info = xstrdup(temp); */
-/* 		xstrcat(info, not_found); */
-/* 	} */
-	info = xstrdup("No extra info avaliable.");
-finished:
-	label = gtk_label_new(info);
-	xfree(info);
-	xfree(not_found);
-	gtk_table_attach_defaults(popup_win->table, label, 0, 1, 0, 1); 
-	gtk_widget_show(label);	
-	spec_info->display_widget = gtk_widget_ref(GTK_WIDGET(label));
+	itr = list_iterator_create(block_list);
+	while ((block_ptr = (sview_block_info_t*) list_next(itr))) {
+		i++;
+		if(!strcmp(block_ptr->bg_block_name, name)) {
+			j = 0;
+			while(block_ptr->bp_inx[j] >= 0) {
+				change_grid_color(
+					popup_win->grid_button_list,
+					block_ptr->bp_inx[j],
+					block_ptr->bp_inx[j+1], i);
+				j += 2;
+			}
+			_layout_block_record(treeview, block_ptr, update);
+			found = 1;
+			break;
+		}
+	}
+	list_iterator_destroy(itr);
+	
+	if(!found) {
+		if(!popup_win->not_found) { 
+			char *temp = "BLOCK DOESN'T EXSIST\n";
+			GtkTreeIter iter;
+			GtkTreeModel *model = NULL;
 	
+			/* only time this will be run so no update */
+			model = gtk_tree_view_get_model(treeview);
+			add_display_treestore_line(0, 
+						   GTK_TREE_STORE(model), 
+						   &iter,
+						   temp, "");
+		}
+		popup_win->not_found = true;
+	} else {
+		if(popup_win->not_found) { 
+			popup_win->not_found = false;
+			gtk_widget_destroy(spec_info->display_widget);
+			
+			goto need_refresh;
+		}
+	}
+	gtk_widget_show(spec_info->display_widget);
+	
+finished:
+
 	return;
 }
 	
-- 
GitLab