diff --git a/src/sview/job_info.c b/src/sview/job_info.c index 370c40d275cc40bc8b2f05936b1f4f51059d96e7..f1a408bb662165ac61303a43a1d613c4a251916a 100644 --- a/src/sview/job_info.c +++ b/src/sview/job_info.c @@ -233,6 +233,7 @@ static void _layout_job_record(GtkTreeView *treeview, GtkTreeIter iter; GtkTreeStore *treestore = GTK_TREE_STORE(gtk_tree_view_get_model(treeview)); + if(!treestore) return; if(!job_ptr->nodes || !strcasecmp(job_ptr->nodes,"waiting...")) { @@ -619,13 +620,13 @@ static void _update_info_step(job_step_info_response_msg_t *step_info_ptr, } } memcpy(step_iter, &first_step_iter, sizeof(GtkTreeIter)); + set = 1; } for (i = 0; i < step_info_ptr->job_step_count; i++) { step = step_info_ptr->job_steps[i]; if(step.job_id != jobid) continue; - /* get the iter, or find out the list is - empty goto add */ + /* get the iter, or find out the list is empty goto add */ if (!step_iter) { goto adding; } else { @@ -662,6 +663,7 @@ static void _update_info_step(job_step_info_response_msg_t *step_info_ptr, while(1) { gtk_tree_model_get(model, step_iter, SORTID_UPDATED, &i, -1); + g_print("updated is %d\n", i); if(!i) { if(!gtk_tree_store_remove( GTK_TREE_STORE(model), @@ -883,6 +885,13 @@ need_refresh: GTK_TREE_STORE(model), &iter, temp, ""); + if(job_step->stepid != NO_VAL) + add_display_treestore_line( + 1, + GTK_TREE_STORE(model), + &iter, + display_data_job[SORTID_STATE].name, + job_state_string(JOB_COMPLETE)); } popup_win->not_found = true; } else { @@ -891,8 +900,7 @@ need_refresh: gtk_widget_destroy(spec_info->display_widget); goto need_refresh; - } - + } } gtk_widget_show(spec_info->display_widget); @@ -1667,14 +1675,11 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id) list_iterator_destroy(itr); if(!popup_win) { - g_print("need popup for %s\n", title); if(id == INFO_PAGE) popup_win = create_popup_info(id, JOB_PAGE, title); else popup_win = create_popup_info(JOB_PAGE, id, title); - } else - g_print("got popup for %s\n", title); - + } switch(id) { case NODE_PAGE: diff --git a/src/sview/node_info.c b/src/sview/node_info.c index 463e21c7bb14db7b7e7314db1dae1a53b4506805..cc48ec697b0a6e3ca15941970ccafa80a5706b26 100644 --- a/src/sview/node_info.c +++ b/src/sview/node_info.c @@ -74,6 +74,7 @@ static display_data_t display_data_node[] = { static display_data_t options_data_node[] = { {G_TYPE_INT, SORTID_POS, NULL, FALSE, -1}, + {G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, NODE_PAGE}, {G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, NODE_PAGE}, #ifdef HAVE_BG {G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, NODE_PAGE}, @@ -85,6 +86,56 @@ static display_data_t options_data_node[] = { static display_data_t *local_display_data = NULL; +static void _layout_node_record(GtkTreeView *treeview, + node_info_t *node_ptr, + int update) +{ + char tmp_cnt[50]; + char *upper = NULL, *lower = NULL; + GtkTreeIter iter; + GtkTreeStore *treestore = + GTK_TREE_STORE(gtk_tree_view_get_model(treeview)); + if(!treestore) + return; + + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_NAME].name, + node_ptr->name); + + upper = node_state_string(node_ptr->node_state); + lower = str_tolower(upper); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_STATE].name, + lower); + xfree(lower); + + convert_num_unit((float)node_ptr->cpus, tmp_cnt, UNIT_MEGA); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_CPUS].name, + tmp_cnt); + + convert_num_unit((float)node_ptr->real_memory, tmp_cnt, UNIT_MEGA); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_MEMORY].name, + tmp_cnt); + + convert_num_unit((float)node_ptr->tmp_disk, tmp_cnt, UNIT_MEGA); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_DISK].name, + tmp_cnt); + snprintf(tmp_cnt, sizeof(tmp_cnt), "%u", node_ptr->weight); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_WEIGHT].name, + tmp_cnt); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_FEATURES].name, + node_ptr->features); + add_display_treestore_line(update, treestore, &iter, + display_data_node[SORTID_REASON].name, + node_ptr->reason); + return; +} + static void _update_node_record(node_info_t *node_ptr, GtkTreeStore *treestore, GtkTreeIter *iter) { @@ -223,50 +274,58 @@ void _display_info_node(node_info_msg_t *node_info_ptr, char *name = (char *)spec_info->data; int i, found = 0; node_info_t node; - char *info = NULL; - char *not_found = NULL; - GtkWidget *label = NULL; + GtkTreeView *treeview = NULL; + int update = 0; if(!spec_info->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; } + for (i = 0; i < node_info_ptr->record_count; i++) { node = node_info_ptr->node_array[i]; if (!node.name || (node.name[0] == '\0')) continue; /* bad node */ if(!strcmp(node.name, name)) { - if(!(info = slurm_sprint_node_table(&node, 0))) { - info = xmalloc(100); - sprintf(info, - "Problem getting node info for %s", - node.name); - } + _layout_node_record(treeview, &node, update); found = 1; break; } } if(!found) { - char *temp = "NODE NOT FOUND\n"; - if(!not_found || strncmp(temp, not_found, strlen(temp))) - info = xstrdup(temp); - xstrcat(info, not_found); + if(!popup_win->not_found) { + char *temp = "NODE NOT FOUND\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: - 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)); - return; } @@ -641,8 +700,12 @@ extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id) } list_iterator_destroy(itr); - if(!popup_win) - popup_win = create_popup_info(NODE_PAGE, id, title); + if(!popup_win) { + if(id == INFO_PAGE) + popup_win = create_popup_info(id, NODE_PAGE, title); + else + popup_win = create_popup_info(NODE_PAGE, id, title); + } popup_win->spec_info->data = name; if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error)) diff --git a/src/sview/part_info.c b/src/sview/part_info.c index 48195453bad14379db5abd9ba4075fe003e81858..5240446b90422cc28ff81c632bcf4ee02e5b2d10 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -221,8 +221,7 @@ static void _subdivide_part(sview_part_info_t *sview_part_info, goto adding; } else { memcpy(sub_iter, &first_sub_iter, - sizeof(GtkTreeIter)); - + sizeof(GtkTreeIter)); } while(1) { @@ -1652,6 +1651,8 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id) } switch(id) { case JOB_PAGE: + case BLOCK_PAGE: + case INFO_PAGE: popup_win->spec_info->data = name; //specific_info_job(popup_win); break; @@ -1661,16 +1662,10 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id) popup_win->spec_info->data = name; //specific_info_node(popup_win); break; - case BLOCK_PAGE: - popup_win->spec_info->data = name; - break; case SUBMIT_PAGE: break; - case INFO_PAGE: - popup_win->spec_info->data = name; - break; default: - g_print("part got %d\n", id); + g_print("part got unknown type %d\n", id); } if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error)) {