static void _admin_block(GtkTreeModel *model, GtkTreeIter *iter, char *type) { char *blockid = NULL; GtkWidget *popup = NULL; if (cluster_flags & CLUSTER_FLAG_FED) { display_fed_disabled_popup(type); return; } popup = gtk_dialog_new_with_buttons( type, GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); gtk_window_set_transient_for(GTK_WINDOW(popup), NULL); gtk_tree_model_get(model, iter, SORTID_BLOCK, &blockid, -1); update_state_block(GTK_DIALOG(popup), blockid, type); g_free(blockid); gtk_widget_destroy(popup); return; }
extern void admin_edit_block(GtkCellRendererText *cell, const char *path_string, const char *new_text, gpointer data) { GtkTreeStore *treestore = NULL; GtkTreePath *path = NULL; GtkTreeIter iter; int column; char *blockid = NULL; char *old_text = NULL; if (cluster_flags & CLUSTER_FLAG_FED) { display_fed_disabled_popup(new_text); goto no_input; } if (!new_text || !xstrcmp(new_text, "")) goto no_input; column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column")); treestore = GTK_TREE_STORE(data); path = gtk_tree_path_new_from_string(path_string); gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, SORTID_BLOCK, &blockid, column, &old_text, -1); switch(column) { case SORTID_STATE: update_state_block(NULL, blockid, new_text); break; default: break; } g_free(blockid); g_free(old_text); gtk_tree_path_free(path); no_input: g_mutex_unlock(sview_mutex); }
static void _admin_front_end(GtkTreeModel *model, GtkTreeIter *iter, char *type, char *node_list) { uint16_t state = (uint16_t) NO_VAL; update_front_end_msg_t front_end_update_msg; char *new_type = NULL, *reason = NULL; char tmp_char[100]; char *lower; int rc; GtkWidget *label = NULL; GtkWidget *entry = NULL; GtkWidget *popup = NULL; if (cluster_flags & CLUSTER_FLAG_FED) { display_fed_disabled_popup(type); global_entry_changed = 0; return; } popup = gtk_dialog_new_with_buttons( type, GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); gtk_window_set_transient_for(GTK_WINDOW(popup), NULL); label = gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_YES, GTK_RESPONSE_OK); gtk_window_set_default(GTK_WINDOW(popup), label); gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); if (!strncasecmp("Drain", type, 5)) { new_type = "DRAIN"; reason = "\n\nPlease enter reason."; state = NODE_STATE_DRAIN; entry = create_entry(); } else if (!strncasecmp("Resume", type, 6)) { new_type = "RESUME"; reason = ""; state = NODE_RESUME; } snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to set state of front end node %s " "to %s?%s", node_list, new_type, reason); label = gtk_label_new(tmp_char); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), label, false, false, 0); if (entry) gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), entry, true, true, 0); gtk_widget_show_all(popup); rc = gtk_dialog_run (GTK_DIALOG(popup)); slurm_init_update_front_end_msg(&front_end_update_msg); if (rc == GTK_RESPONSE_OK) { front_end_update_msg.name = node_list; front_end_update_msg.node_state = state; if (entry) { front_end_update_msg.reason = xstrdup( gtk_entry_get_text(GTK_ENTRY(entry))); if (!front_end_update_msg.reason || !strlen(front_end_update_msg.reason)) { lower = g_strdup_printf( "You need a reason to do that."); display_edit_note(lower); g_free(lower); goto end_it; } rc = uid_from_string(getlogin(), &front_end_update_msg.reason_uid); if (rc < 0) front_end_update_msg.reason_uid = getuid(); } rc = slurm_update_front_end(&front_end_update_msg); if (rc == SLURM_SUCCESS) { lower = g_strdup_printf( "Nodes %s updated successfully.", node_list); display_edit_note(lower); g_free(lower); } else { lower = g_strdup_printf( "Problem updating nodes %s: %s", node_list, slurm_strerror(rc)); display_edit_note(lower); g_free(lower); } } end_it: global_entry_changed = 0; xfree(front_end_update_msg.reason); gtk_widget_destroy(popup); if (got_edit_signal) { type = got_edit_signal; got_edit_signal = NULL; _admin_front_end(model, iter, type, node_list); xfree(type); } return; }
static void _admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type) { resv_desc_msg_t *resv_msg = NULL; reservation_name_msg_t resv_name_msg; char *resvid = NULL; char tmp_char[100]; char *temp = NULL; int edit_type = 0; int response = 0; GtkWidget *label = NULL; GtkWidget *entry = NULL; GtkWidget *popup = NULL; if (cluster_flags & CLUSTER_FLAG_FED) { display_fed_disabled_popup(type); global_entry_changed = 0; return; } popup = gtk_dialog_new_with_buttons( type, GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); gtk_window_set_type_hint(GTK_WINDOW(popup), GDK_WINDOW_TYPE_HINT_NORMAL); gtk_window_set_transient_for(GTK_WINDOW(popup), NULL); gtk_tree_model_get(model, iter, SORTID_NAME, &resvid, -1); resv_msg = xmalloc(sizeof(resv_desc_msg_t)); slurm_init_resv_desc_msg(resv_msg); memset(&resv_name_msg, 0, sizeof(reservation_name_msg_t)); resv_msg->name = xstrdup(resvid); if (!xstrcasecmp("Remove Reservation", type)) { resv_name_msg.name = resvid; label = gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_YES, GTK_RESPONSE_OK); gtk_window_set_default(GTK_WINDOW(popup), label); gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to remove " "reservation %s?", resvid); label = gtk_label_new(tmp_char); edit_type = EDIT_REMOVE; } else { label = gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_OK, GTK_RESPONSE_OK); gtk_window_set_default(GTK_WINDOW(popup), label); gtk_dialog_add_button(GTK_DIALOG(popup), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_window_set_default_size(GTK_WINDOW(popup), 200, 400); snprintf(tmp_char, sizeof(tmp_char), "Editing reservation %s think before you type", resvid); label = gtk_label_new(tmp_char); edit_type = EDIT_EDIT; entry = _admin_full_edit_resv(resv_msg, model, iter); } gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), label, false, false, 0); if (entry) gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), entry, true, true, 0); gtk_widget_show_all(popup); response = gtk_dialog_run (GTK_DIALOG(popup)); if (response == GTK_RESPONSE_OK) { switch(edit_type) { case EDIT_REMOVE: if (slurm_delete_reservation(&resv_name_msg) == SLURM_SUCCESS) { temp = g_strdup_printf( "Reservation %s removed successfully", resvid); } else { temp = g_strdup_printf( "Problem removing reservation %s.", resvid); } display_edit_note(temp); g_free(temp); break; case EDIT_EDIT: if (got_edit_signal) goto end_it; if (global_edit_error) { temp = g_strdup_printf( "Something was wrong with the " "values you wanted to change: %s", global_edit_error_msg ? global_edit_error_msg : "unknown"); if (global_edit_error_msg) g_free(global_edit_error_msg); } else if (!global_send_update_msg) { temp = g_strdup_printf("No change detected."); } else if (slurm_update_reservation(resv_msg) == SLURM_SUCCESS) { temp = g_strdup_printf( "Reservation %s updated successfully", resvid); } else { temp = g_strdup_printf( "Problem updating reservation %s.", resvid); } display_edit_note(temp); g_free(temp); break; default: break; } } end_it: g_free(resvid); global_entry_changed = 0; slurm_free_resv_desc_msg(resv_msg); gtk_widget_destroy(popup); if (got_edit_signal) { type = got_edit_signal; got_edit_signal = NULL; _admin_resv(model, iter, type); xfree(type); } return; }
extern void admin_edit_resv(GtkCellRendererText *cell, const char *path_string, const char *new_text, gpointer data) { GtkTreeStore *treestore = NULL; GtkTreePath *path = NULL; GtkTreeIter iter; resv_desc_msg_t *resv_msg = NULL; char *temp = NULL; char *old_text = NULL; const char *type = NULL; int column; if (!new_text || !xstrcmp(new_text, "")) goto no_input; if (cluster_flags & CLUSTER_FLAG_FED) { display_fed_disabled_popup(type); goto no_input; } column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column")); path = gtk_tree_path_new_from_string(path_string); treestore = GTK_TREE_STORE(data); gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, SORTID_NAME, &temp, column, &old_text, -1); resv_msg = xmalloc(sizeof(resv_desc_msg_t)); slurm_init_resv_desc_msg(resv_msg); resv_msg->name = xstrdup(temp); g_free(temp); type = _set_resv_msg(resv_msg, new_text, column); if (global_edit_error) goto print_error; if (got_edit_signal) { temp = got_edit_signal; got_edit_signal = NULL; _admin_resv(GTK_TREE_MODEL(treestore), &iter, temp); xfree(temp); goto no_input; } if (old_text && !xstrcmp(old_text, new_text)) { temp = g_strdup_printf("No change in value."); } else if (slurm_update_reservation(resv_msg) == SLURM_SUCCESS) { gtk_tree_store_set(treestore, &iter, column, new_text, -1); temp = g_strdup_printf("Reservation %s %s changed to %s", resv_msg->name, type, new_text); } else if (errno == ESLURM_DISABLED) { temp = g_strdup_printf( "Can only edit %s on reservations not yet started.", type); } else { print_error: temp = g_strdup_printf("Reservation %s %s can't be " "set to %s", resv_msg->name, type, new_text); } display_edit_note(temp); g_free(temp); no_input: slurm_free_resv_desc_msg(resv_msg); gtk_tree_path_free(path); g_free(old_text); g_mutex_unlock(sview_mutex); }