int main(int argc, char **argv) { long timeout; char host[MAX_DB_HOST_NAMELEN]; int port; char user[MAX_USER_PASSWD_LEN]; char pass[MAX_USER_PASSWD_LEN]; int nodeID; int ch; int optindex; static struct option long_options[] = { {"debug", no_argument, NULL, 'd'}, {"help", no_argument, NULL, 'h'}, {NULL, 0, NULL, 0} }; while ((ch = getopt_long(argc, argv, "hd", long_options, &optindex)) != -1) { switch (ch) { case 'd': pcp_enable_debug(); break; case 'h': case '?': default: usage(); exit(0); } } argc -= optind; argv += optind; if (argc != 6) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } timeout = atol(argv[0]); if (timeout < 0) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[1]) >= MAX_DB_HOST_NAMELEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(host, argv[1]); port = atoi(argv[2]); if (port <= 1024 || port > 65535) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[3]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(user, argv[3]); if (strlen(argv[4]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(pass, argv[4]); nodeID = atoi(argv[5]); if (nodeID < 0 || nodeID > MAX_NUM_BACKENDS) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } pcp_set_timeout(timeout); if (pcp_connect(host, port, user, pass)) { pcp_errorstr(errorcode); myexit(errorcode); } if (pcp_attach_node(nodeID)) { pcp_errorstr(errorcode); pcp_disconnect(); myexit(errorcode); } pcp_disconnect(); return 0; }
int main(int argc, char **argv) { long timeout; char host[MAX_DB_HOST_NAMELEN]; int port; char user[MAX_USER_PASSWD_LEN]; char pass[MAX_USER_PASSWD_LEN]; int process_count; int *process_list = NULL; int ch; int optindex; static struct option long_options[] = { {"debug", no_argument, NULL, 'd'}, {"help", no_argument, NULL, 'h'}, {NULL, 0, NULL, 0} }; while ((ch = getopt_long(argc, argv, "hd", long_options, &optindex)) != -1) { switch (ch) { case 'd': pcp_enable_debug(); break; case 'h': case '?': default: usage(); exit(0); } } argc -= optind; argv += optind; if (argc != 5) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } timeout = atol(argv[0]); if (timeout < 0) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[1]) >= MAX_DB_HOST_NAMELEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(host, argv[1]); port = atoi(argv[2]); if (port <= 1024 || port > 65535) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[3]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(user, argv[3]); if (strlen(argv[4]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(pass, argv[4]); pcp_set_timeout(timeout); if (pcp_connect(host, port, user, pass)) { pcp_errorstr(errorcode); myexit(errorcode); } if ((process_list = pcp_process_count(&process_count)) == NULL) { pcp_errorstr(errorcode); pcp_disconnect(); myexit(errorcode); } else { int i; for (i = 0; i < process_count; i++) printf("%d ", process_list[i]); printf("\n"); free(process_list); } pcp_disconnect(); return 0; }
int main(int argc, char **argv) { char* host = NULL; int port = 9898; char* user = NULL; char* pass = NULL; int nodeID = -1; int processID = 0; int ch; char shutdown_mode = 's'; int optindex; int i; bool all = false; bool debug = false; bool need_password = true; bool gracefully = false; bool verbose = false; PCPConnInfo* pcpConn; PCPResultInfo* pcpResInfo; /* here we put all the allowed long options for all utilities */ static struct option long_options[] = { {"help", no_argument, NULL, '?'}, {"debug", no_argument, NULL, 'd'}, {"version", no_argument, NULL, 'V'}, {"host", required_argument, NULL, 'h'}, {"port", required_argument, NULL, 'p'}, {"process-id", required_argument, NULL, 'P'}, {"username", required_argument, NULL, 'U'}, {"no-password", no_argument, NULL, 'w'}, {"password", no_argument, NULL, 'W'}, {"mode", required_argument, NULL, 'm'}, {"gracefully", no_argument, NULL, 'g'}, {"verbose", no_argument, NULL, 'v'}, {"all", no_argument, NULL, 'a'}, {"node-id", required_argument, NULL, 'n'}, {"watchdog-id", required_argument, NULL, 'n'}, {NULL, 0, NULL, 0} }; /* Identify the utility app */ progname = get_progname(argv[0]); for( i =0; ;i++) { current_app_type = &AllAppTypes[i]; if(current_app_type->app_type == UNKNOWN) break; if (strcmp(current_app_type->app_name, progname) == 0) break; } if(current_app_type->app_type == UNKNOWN) { fprintf(stderr, "%s is a invalid PCP utility\n",progname); exit(1); } if (argc > 1) { if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { usage(); exit(0); } else if (strcmp(argv[1], "-V") == 0 || strcmp(argv[1], "--version") == 0) { fprintf(stderr, "%s (%s) %s\n",progname,PACKAGE, VERSION); exit(0); } } while ((ch = getopt_long(argc, argv, current_app_type->allowed_options, long_options, &optindex)) != -1) { switch (ch) { case 'd': debug = true; break; case 'a': all = true; break; case 'w': need_password = false; break; case 'W': need_password = true; break; case 'g': gracefully = true; break; case 'm': if (current_app_type->app_type == PCP_STOP_PGPOOL) { if (strcmp(optarg, "s") == 0 || strcmp(optarg, "smart") == 0) shutdown_mode = 's'; else if (strcmp(optarg, "f") == 0 || strcmp(optarg, "fast") == 0) shutdown_mode = 'f'; else if (strcmp(optarg, "i") == 0 || strcmp(optarg, "immediate") == 0) shutdown_mode = 'i'; else { fprintf(stderr, "%s: Invalid shutdown mode \"%s\", must be either \"smart\" \"immediate\" or \"fast\" \n",progname,optarg); exit(1); } } else { fprintf(stderr, "Invalid argument \"%s\", Try \"%s --help\" for more information.\n",optarg,progname); exit(1); } break; case 'v': verbose = true; break; case 'n': nodeID = atoi(optarg); if (current_app_type->app_type == PCP_WATCHDOG_INFO) { if (nodeID < 0) { fprintf(stderr, "%s: Invalid watchdog-id \"%s\", must be a positive number or zero for a local watchdog node\n",progname,optarg); exit(0); } } else { if (nodeID < 0 || nodeID > MAX_NUM_BACKENDS) { fprintf(stderr, "%s: Invalid node-id \"%s\", must be between 0 and %d\n",progname,optarg,MAX_NUM_BACKENDS); exit(0); } } break; case 'p': port = atoi(optarg); if (port <= 1024 || port > 65535) { fprintf(stderr, "%s: Invalid port number \"%s\", must be between 1024 and 65535\n",progname,optarg); exit(0); } break; case 'P': /* PID */ processID = atoi(optarg); if (processID <= 0 ) { fprintf(stderr, "%s: Invalid process-id \"%s\", must be greater than 0\n",progname,optarg); exit(0); } break; case 'h': host = strdup(optarg); break; case 'U': user = strdup(optarg); break; case '?': default: /* * getopt_long whould already have emitted a complaint */ fprintf(stderr, "Try \"%s --help\" for more information.\n\n",progname); exit(1); } } /* * if we still have arguments, use it */ while (argc - optind >= 1) { if (current_app_type->app_type == PCP_PROC_INFO && processID <= 0) { processID = atoi(argv[optind]); if (processID <= 0 ) { fprintf(stderr, "%s: Invalid process-id \"%s\", must be greater than 0\n",progname,optarg); exit(0); } } else if (current_app_type->app_type == PCP_WATCHDOG_INFO && nodeID < 0) { nodeID = atoi(argv[optind]); if (nodeID < 0 ) { fprintf(stderr, "%s: Invalid watchdog-id \"%s\", must be a positive number or zero for local watchdog node\n",progname,optarg); exit(0); } } else if (app_require_nodeID() && nodeID < 0) { nodeID = atoi(argv[optind]); if (nodeID < 0 || nodeID > MAX_NUM_BACKENDS) { fprintf(stderr, "%s: Invalid node-id \"%s\", must be between 0 and %d\n",progname,optarg,MAX_NUM_BACKENDS); exit(0); } } else fprintf(stderr, "%s: Warning: extra command-line argument \"%s\" ignored\n", progname, argv[optind]); optind++; } if(nodeID < 0) { if (app_require_nodeID()) { fprintf(stderr, "%s: missing node-id\n",progname); fprintf(stderr, "Try \"%s --help\" for more information.\n\n",progname); exit(1); } else if (current_app_type->app_type == PCP_WATCHDOG_INFO) { nodeID = -1; } } /* Get a new password if appropriate */ if (need_password) { pass = simple_prompt("Password: "******"%s\n",pcp_get_last_error(pcpConn)?pcp_get_last_error(pcpConn):"Unknown Error"); exit(1); } /* * Okay the connection is successful not call the actual PCP function */ if (current_app_type->app_type == PCP_ATTACH_NODE) { pcpResInfo = pcp_attach_node(pcpConn,nodeID); } else if (current_app_type->app_type == PCP_DETACH_NODE) { if (gracefully) pcpResInfo = pcp_detach_node_gracefully(pcpConn,nodeID); else pcpResInfo = pcp_detach_node(pcpConn,nodeID); } else if (current_app_type->app_type == PCP_NODE_COUNT) { pcpResInfo = pcp_node_count(pcpConn); } else if (current_app_type->app_type == PCP_NODE_INFO) { pcpResInfo = pcp_node_info(pcpConn,nodeID); } else if (current_app_type->app_type == PCP_POOL_STATUS) { pcpResInfo = pcp_pool_status(pcpConn); } else if (current_app_type->app_type == PCP_PROC_COUNT) { pcpResInfo = pcp_process_count(pcpConn); } else if (current_app_type->app_type == PCP_PROC_INFO) { pcpResInfo = pcp_process_info(pcpConn, processID); } else if (current_app_type->app_type == PCP_PROMOTE_NODE) { if (gracefully) pcpResInfo = pcp_promote_node_gracefully(pcpConn,nodeID); else pcpResInfo = pcp_promote_node(pcpConn,nodeID); } else if (current_app_type->app_type == PCP_RECOVERY_NODE) { pcpResInfo = pcp_recovery_node(pcpConn, nodeID); } else if (current_app_type->app_type == PCP_STOP_PGPOOL) { pcpResInfo = pcp_terminate_pgpool(pcpConn, shutdown_mode); } else if (current_app_type->app_type == PCP_WATCHDOG_INFO) { pcpResInfo = pcp_watchdog_info(pcpConn,nodeID); } else { /* should never happen */ fprintf(stderr,"%s: Invalid pcp process\n",progname); goto DISCONNECT_AND_EXIT; } if(pcpResInfo == NULL || PCPResultStatus(pcpResInfo) != PCP_RES_COMMAND_OK) { fprintf(stderr, "%s\n",pcp_get_last_error(pcpConn)?pcp_get_last_error(pcpConn):"Unknown Error"); goto DISCONNECT_AND_EXIT; } if (pcp_result_is_empty(pcpResInfo)) { fprintf(stdout,"%s -- Command Successful\n",progname); } else { if (current_app_type->app_type == PCP_NODE_COUNT) output_nodecount_result(pcpResInfo, verbose); if (current_app_type->app_type == PCP_NODE_INFO) output_nodeinfo_result(pcpResInfo, verbose); if (current_app_type->app_type == PCP_POOL_STATUS) output_poolstatus_result(pcpResInfo, verbose); if (current_app_type->app_type == PCP_PROC_COUNT) output_proccount_result(pcpResInfo, verbose); if (current_app_type->app_type == PCP_PROC_INFO) output_procinfo_result(pcpResInfo, all, verbose); else if (current_app_type->app_type == PCP_WATCHDOG_INFO) output_watchdog_info_result(pcpResInfo, verbose); } DISCONNECT_AND_EXIT: pcp_disconnect(pcpConn); pcp_free_connection(pcpConn); return 0; }
int main(int argc, char **argv) { long timeout; char host[MAX_DB_HOST_NAMELEN]; int port; char user[MAX_USER_PASSWD_LEN]; char pass[MAX_USER_PASSWD_LEN]; int processID; ProcessInfo *process_info; int array_size; int ch; int optindex; char * frmt; bool verbose = false; bool all = false; static struct option long_options[] = { {"debug", no_argument, NULL, 'd'}, {"help", no_argument, NULL, 'h'}, {"verbose", no_argument, NULL, 'v'}, {NULL, 0, NULL, 0} }; while ((ch = getopt_long(argc, argv, "hdva", long_options, &optindex)) != -1) { switch (ch) { case 'd': pcp_enable_debug(); break; case 'v': verbose = true; break; case 'a': all = true; break; case 'h': case '?': default: usage(); exit(0); } } argc -= optind; argv += optind; if (verbose) { if (all) frmt = "Database : %s\n" "Username : %s\n" "Start time : %s\n" "Creation time: %s\n" "Major : %d\n" "Minor : %d\n" "Counter : %d\n" "Backend PID : %d\n" "Connected : %d\n" "PID : %d\n" "Backend ID : %d\n"; else frmt = "Database : %s\n" "Username : %s\n" "Start time : %s\n" "Creation time: %s\n" "Major : %d\n" "Minor : %d\n" "Counter : %d\n" "Backend PID : %d\n" "Connected : %d\n"; } else { if (all) frmt = "%s %s %s %s %d %d %d %d %d %d %d\n"; else frmt = "%s %s %s %s %d %d %d %d %d\n"; } if (!(argc == 5 || argc == 6)) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } timeout = atol(argv[0]); if (timeout < 0) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[1]) >= MAX_DB_HOST_NAMELEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(host, argv[1]); port = atoi(argv[2]); if (port <= 1024 || port > 65535) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[3]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(user, argv[3]); if (strlen(argv[4]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(pass, argv[4]); if (argc == 6) { processID = atoi(argv[5]); if (processID < 0) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } } else { processID = 0; } pcp_set_timeout(timeout); if (pcp_connect(host, port, user, pass)) { pcp_errorstr(errorcode); myexit(errorcode); } if ((process_info = pcp_process_info(processID, &array_size)) == NULL) { pcp_errorstr(errorcode); pcp_disconnect(); myexit(errorcode); } else { int i; char strcreatetime[128]; char strstarttime[128]; for (i = 0; i < array_size; i++) { if ((!all) && (process_info[i].connection_info->database[0] == '\0')) continue; *strcreatetime = *strstarttime = '\0'; if (process_info[i].start_time) strftime(strstarttime, 128, "%Y-%m-%d %H:%M:%S", localtime(&process_info[i].start_time)); if (process_info[i].connection_info->create_time) strftime(strcreatetime, 128, "%Y-%m-%d %H:%M:%S", localtime(&process_info[i].connection_info->create_time)); printf(frmt, process_info[i].connection_info->database, process_info[i].connection_info->user, strstarttime, strcreatetime, process_info[i].connection_info->major, process_info[i].connection_info->minor, process_info[i].connection_info->counter, process_info[i].connection_info->pid, process_info[i].connection_info->connected, process_info[i].pid, process_info[i].connection_info->backend_id); } free(process_info->connection_info); free(process_info); } pcp_disconnect(); return 0; }
int main(int argc, char **argv) { long timeout; char host[MAX_DB_HOST_NAMELEN]; int port; char user[MAX_USER_PASSWD_LEN]; char pass[MAX_USER_PASSWD_LEN]; SystemDBInfo *systemdb_info; int i, j; int ch; while ((ch = getopt(argc, argv, "hd")) != -1) { switch (ch) { case 'd': pcp_enable_debug(); break; case 'h': case '?': default: usage(); exit(0); } } argc -= optind; argv += optind; if (argc != 5) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } timeout = atol(argv[0]); if (timeout < 0) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[1]) >= MAX_DB_HOST_NAMELEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(host, argv[1]); port = atoi(argv[2]); if (port <= 1024 || port > 65535) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } if (strlen(argv[3]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(user, argv[3]); if (strlen(argv[4]) >= MAX_USER_PASSWD_LEN) { errorcode = INVALERR; pcp_errorstr(errorcode); myexit(errorcode); } strcpy(pass, argv[4]); if (pcp_connect(host, port, user, pass)) { pcp_errorstr(errorcode); myexit(errorcode); } if ((systemdb_info = pcp_systemdb_info()) == NULL) { pcp_errorstr(errorcode); pcp_disconnect(); myexit(errorcode); } else { printf("%s %d %s %s %s %s %d %d\n", systemdb_info->hostname, systemdb_info->port, systemdb_info->user, systemdb_info->password[0] == '\0' ? "''" : systemdb_info->password, systemdb_info->schema_name, systemdb_info->database_name, systemdb_info->dist_def_num, systemdb_info->system_db_status); for (i = 0; i < systemdb_info->dist_def_num; i++) { DistDefInfo *ddi = &systemdb_info->dist_def_slot[i]; printf("%s %s %s %s %d ", ddi->dbname, ddi->schema_name, ddi->table_name, ddi->dist_key_col_name, ddi->col_num); for (j = 0; j < ddi->col_num; j++) printf("%s ", ddi->col_list[j]); for (j = 0; j < ddi->col_num; j++) printf("%s ", ddi->type_list[j]); printf("%s\n", ddi->dist_def_func); } free_systemdb_info(systemdb_info); } pcp_disconnect(); return 0; }