extern void specific_info_block(popup_info_t *popup_win) { int part_error_code = SLURM_SUCCESS; int block_error_code = SLURM_SUCCESS; static partition_info_msg_t *part_info_ptr = NULL; static block_info_msg_t *block_info_ptr = NULL; specific_info_t *spec_info = popup_win->spec_info; sview_search_info_t *search_info = spec_info->search_info; char error_char[100]; GtkWidget *label = NULL; GtkTreeView *tree_view = NULL; List block_list = NULL; List send_block_list = NULL; sview_block_info_t *block_ptr = NULL; int j=0, i=-1; hostset_t hostset = NULL; ListIterator itr = NULL; if (!spec_info->display_widget) { setup_popup_info(popup_win, display_data_block, SORTID_CNT); } if (spec_info->display_widget && popup_win->toggled) { gtk_widget_destroy(spec_info->display_widget); spec_info->display_widget = NULL; goto display_it; } if ((part_error_code = get_new_info_part(&part_info_ptr, popup_win->force_refresh)) == SLURM_NO_CHANGE_IN_DATA) { } else if (part_error_code != SLURM_SUCCESS) { if (spec_info->view == ERROR_VIEW) goto end_it; spec_info->view = ERROR_VIEW; if (spec_info->display_widget) gtk_widget_destroy(spec_info->display_widget); sprintf(error_char, "slurm_load_partitions: %s", slurm_strerror(slurm_get_errno())); label = gtk_label_new(error_char); gtk_table_attach_defaults(popup_win->table, label, 0, 1, 0, 1); gtk_widget_show(label); spec_info->display_widget = gtk_widget_ref(label); goto end_it; } if ((block_error_code = get_new_info_block(&block_info_ptr, popup_win->force_refresh)) == SLURM_NO_CHANGE_IN_DATA) { if ((!spec_info->display_widget || spec_info->view == ERROR_VIEW) || (part_error_code != SLURM_NO_CHANGE_IN_DATA)) { goto display_it; } } else if (block_error_code != SLURM_SUCCESS) { if (spec_info->view == ERROR_VIEW) goto end_it; spec_info->view = ERROR_VIEW; if (spec_info->display_widget) gtk_widget_destroy(spec_info->display_widget); sprintf(error_char, "slurm_load_block: %s", slurm_strerror(slurm_get_errno())); label = gtk_label_new(error_char); gtk_table_attach_defaults(popup_win->table, label, 0, 1, 0, 1); gtk_widget_show(label); spec_info->display_widget = gtk_widget_ref(label); goto end_it; } display_it: block_list = _create_block_list(part_info_ptr, block_info_ptr); if (!block_list) return; if (spec_info->view == ERROR_VIEW && spec_info->display_widget) { gtk_widget_destroy(spec_info->display_widget); spec_info->display_widget = NULL; } if (spec_info->type != INFO_PAGE && !spec_info->display_widget) { tree_view = create_treeview(local_display_data, &popup_win->grid_button_list); gtk_tree_selection_set_mode( gtk_tree_view_get_selection(tree_view), GTK_SELECTION_MULTIPLE); spec_info->display_widget = gtk_widget_ref(GTK_WIDGET(tree_view)); gtk_table_attach_defaults(popup_win->table, GTK_WIDGET(tree_view), 0, 1, 0, 1); /* since this function sets the model of the tree_view to the treestore we don't really care about the return value */ create_treestore(tree_view, popup_win->display_data, SORTID_CNT, SORTID_BLOCK, SORTID_COLOR); } setup_popup_grid_list(popup_win); spec_info->view = INFO_VIEW; if (spec_info->type == INFO_PAGE) { _display_info_block(block_list, popup_win); goto end_it; } /* just linking to another list, don't free the inside, just the list */ send_block_list = list_create(NULL); itr = list_iterator_create(block_list); i = -1; while ((block_ptr = list_next(itr))) { /* we want to over ride any subgrp in error state */ enum node_states state = NODE_STATE_UNKNOWN; char *name = NULL; i++; switch(spec_info->type) { case PART_PAGE: if (xstrcmp(block_ptr->slurm_part_name, search_info->gchar_data)) continue; break; case RESV_PAGE: case NODE_PAGE: if (!block_ptr->mp_str) continue; if (!(hostset = hostset_create( search_info->gchar_data))) continue; name = block_ptr->mp_str; if (block_ptr->small_block) { int j=0; /* strip off the ionodes part */ while (name[j]) { if (name[j] == '[') { name[j] = '\0'; break; } j++; } } if (!hostset_intersects(hostset, name)) { hostset_destroy(hostset); continue; } hostset_destroy(hostset); break; case BLOCK_PAGE: switch(search_info->search_type) { case SEARCH_BLOCK_NAME: if (!search_info->gchar_data) continue; if (xstrcmp(block_ptr->bg_block_name, search_info->gchar_data)) continue; break; case SEARCH_BLOCK_SIZE: if (search_info->int_data == NO_VAL) continue; if (block_ptr->cnode_cnt != search_info->int_data) continue; break; case SEARCH_BLOCK_STATE: if (search_info->int_data == NO_VAL) continue; if (block_ptr->state != search_info->int_data) continue; break; default: continue; break; } break; case JOB_PAGE: if (xstrcmp(block_ptr->bg_block_name, search_info->gchar_data)) continue; break; default: g_print("Unknown type %d\n", spec_info->type); continue; } list_push(send_block_list, block_ptr); if (block_ptr->state & BG_BLOCK_ERROR_FLAG) state = NODE_STATE_ERROR; else if (list_count(block_ptr->job_list)) state = NODE_STATE_ALLOCATED; else state = NODE_STATE_IDLE; j=0; while (block_ptr->mp_inx[j] >= 0) { change_grid_color( popup_win->grid_button_list, block_ptr->mp_inx[j], block_ptr->mp_inx[j+1], block_ptr->color_inx, true, state); j += 2; } } list_iterator_destroy(itr); post_setup_popup_grid_list(popup_win); _update_info_block(send_block_list, GTK_TREE_VIEW(spec_info->display_widget)); FREE_NULL_LIST(send_block_list); end_it: popup_win->toggled = 0; popup_win->force_refresh = 0; return; }
extern void add_extra_bluegene_buttons(List *button_list, int inx, int *color_inx) { block_info_msg_t *block_ptr = NULL; block_info_t *bg_info_ptr = NULL; int rc = SLURM_SUCCESS; ListIterator itr = NULL; grid_button_t *grid_button = NULL; grid_button_t *send_grid_button = NULL; int i=0; char *mp_str = NULL; char tmp_nodes[256]; int found = 0; int coord_y=0; uint16_t orig_state; rc = get_new_info_block(&block_ptr, 0); if ((rc != SLURM_SUCCESS) && (rc != SLURM_NO_CHANGE_IN_DATA)) { return; } if (!*button_list) *button_list = list_create(NULL); *color_inx %= sview_colors_cnt; itr = list_iterator_create(grid_button_list); while ((grid_button = list_next(itr))) { if (grid_button->inx == inx) break; } list_iterator_destroy(itr); if (!grid_button) return; orig_state = grid_button->state; /* remove all (if any) buttons pointing to this node since we will be creating all of them */ itr = list_iterator_create(*button_list); while ((send_grid_button = list_next(itr))) { if (send_grid_button->inx == grid_button->inx) list_remove(itr); } list_iterator_destroy(itr); for (i=0; i < block_ptr->record_count; i++) { bg_info_ptr = &block_ptr->block_array[i]; if (!_block_in_node(bg_info_ptr->mp_inx, inx)) continue; found = 1; mp_str = bg_info_ptr->mp_str; if (bg_info_ptr->ionode_str) { sprintf(tmp_nodes, "%s[%s]", mp_str, bg_info_ptr->ionode_str); mp_str = tmp_nodes; } if (bg_info_ptr->state & BG_BLOCK_ERROR_FLAG) grid_button->state = NODE_STATE_ERROR; else if (bg_info_ptr->job_running > NO_JOB_RUNNING) grid_button->state = NODE_STATE_ALLOCATED; else grid_button->state = NODE_STATE_IDLE; send_grid_button = create_grid_button_from_another( grid_button, mp_str, *color_inx); grid_button->state = orig_state; if (send_grid_button) { send_grid_button->button_list = *button_list; send_grid_button->table_x = 0; send_grid_button->table_y = coord_y++; //_add_button_signals(send_grid_button); /* this is a different signal than usual */ g_signal_connect( G_OBJECT(send_grid_button->button), "button-press-event", G_CALLBACK(_open_block), send_grid_button); g_signal_connect(G_OBJECT(grid_button->button), "enter-notify-event", G_CALLBACK(_mouseover_node), grid_button); g_signal_connect(G_OBJECT(grid_button->button), "leave-notify-event", G_CALLBACK(_mouseoff_node), grid_button); list_append(*button_list, send_grid_button); (*color_inx)++; } } if (!found) { send_grid_button = create_grid_button_from_another( grid_button, grid_button->node_name, *color_inx); if (send_grid_button) { send_grid_button->button_list = *button_list; send_grid_button->table_x = 0; send_grid_button->table_y = coord_y++; _add_button_signals(send_grid_button); list_append(*button_list, send_grid_button); (*color_inx)++; } } }
extern void get_info_block(GtkTable *table, display_data_t *display_data) { int part_error_code = SLURM_SUCCESS; int block_error_code = SLURM_SUCCESS; static int view = -1; static partition_info_msg_t *part_info_ptr = NULL; static block_info_msg_t *block_ptr = NULL; char error_char[100]; GtkWidget *label = NULL; GtkTreeView *tree_view = NULL; static GtkWidget *display_widget = NULL; List block_list = NULL; int j=0; ListIterator itr = NULL; sview_block_info_t *sview_block_info_ptr = NULL; GtkTreePath *path = NULL; static bool set_opts = FALSE; if (!set_opts) set_page_opts(BLOCK_PAGE, display_data_block, SORTID_CNT, _initial_page_opts); set_opts = TRUE; /* reset */ if (!table && !display_data) { if (display_widget) gtk_widget_destroy(display_widget); display_widget = NULL; part_info_ptr = NULL; block_ptr = NULL; goto reset_curs; } if (display_data) local_display_data = display_data; if (!table) { display_data_block->set_menu = local_display_data->set_menu; goto reset_curs; } if (display_widget && toggled) { gtk_widget_destroy(display_widget); display_widget = NULL; goto display_it; } if ((part_error_code = get_new_info_part(&part_info_ptr, force_refresh)) == SLURM_NO_CHANGE_IN_DATA) { } else if (part_error_code != SLURM_SUCCESS) { if (view == ERROR_VIEW) goto end_it; view = ERROR_VIEW; if (display_widget) gtk_widget_destroy(display_widget); sprintf(error_char, "slurm_load_partitions: %s", slurm_strerror(slurm_get_errno())); label = gtk_label_new(error_char); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); gtk_widget_show(label); display_widget = gtk_widget_ref(label); goto end_it; } if ((block_error_code = get_new_info_block(&block_ptr, force_refresh)) == SLURM_NO_CHANGE_IN_DATA) { if ((!display_widget || view == ERROR_VIEW) || (part_error_code != SLURM_NO_CHANGE_IN_DATA)) { goto display_it; } } else if (block_error_code != SLURM_SUCCESS) { if (view == ERROR_VIEW) goto end_it; view = ERROR_VIEW; if (display_widget) gtk_widget_destroy(display_widget); sprintf(error_char, "slurm_load_block: %s", slurm_strerror(slurm_get_errno())); label = gtk_label_new(error_char); gtk_table_attach_defaults(table, label, 0, 1, 0, 1); gtk_widget_show(label); display_widget = gtk_widget_ref(label); goto end_it; } display_it: if (!block_ptr) { view = ERROR_VIEW; if (display_widget) gtk_widget_destroy(display_widget); label = gtk_label_new("No blocks on non-Bluegene systems"); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); gtk_widget_show(label); display_widget = gtk_widget_ref(label); goto end_it; } if (!part_info_ptr) goto reset_curs; block_list = _create_block_list(part_info_ptr, block_ptr); if (!block_list) goto reset_curs; /* set up the grid */ if (display_widget && GTK_IS_TREE_VIEW(display_widget) && gtk_tree_selection_count_selected_rows( gtk_tree_view_get_selection( GTK_TREE_VIEW(display_widget)))) { GtkTreeViewColumn *focus_column = NULL; /* highlight the correct mp_str from the last selection */ gtk_tree_view_get_cursor(GTK_TREE_VIEW(display_widget), &path, &focus_column); } if (!path) { itr = list_iterator_create(block_list); while ((sview_block_info_ptr = list_next(itr))) { j=0; while (sview_block_info_ptr->mp_inx[j] >= 0) { change_grid_color( grid_button_list, sview_block_info_ptr->mp_inx[j], sview_block_info_ptr->mp_inx[j+1], sview_block_info_ptr->color_inx, true, 0); j += 2; } } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); } else { highlight_grid(GTK_TREE_VIEW(display_widget), SORTID_NODE_INX, SORTID_COLOR_INX, grid_button_list); gtk_tree_path_free(path); } if (view == ERROR_VIEW && display_widget) { gtk_widget_destroy(display_widget); display_widget = NULL; } if (!display_widget) { tree_view = create_treeview(local_display_data, &grid_button_list); gtk_tree_selection_set_mode( gtk_tree_view_get_selection(tree_view), GTK_SELECTION_MULTIPLE); display_widget = gtk_widget_ref(GTK_WIDGET(tree_view)); gtk_table_attach_defaults(table, GTK_WIDGET(tree_view), 0, 1, 0, 1); /* since this function sets the model of the tree_view to the treestore we don't really care about the return value */ create_treestore(tree_view, display_data_block, SORTID_CNT, SORTID_NODELIST, SORTID_COLOR); } view = INFO_VIEW; _update_info_block(block_list, GTK_TREE_VIEW(display_widget)); end_it: toggled = FALSE; force_refresh = FALSE; reset_curs: if (main_window && main_window->window) gdk_window_set_cursor(main_window->window, NULL); return; }