int do_catalog_query( time_t stoptime ) { int i = 0; //global_catalog iterator if(resource_mode == 0 && format_mode == FORMAT_TABLE) nvpair_print_table_header(stdout, queue_headers); else if(resource_mode) nvpair_print_table_header(stdout, master_resource_headers); while(global_catalog[i] != NULL){ if(!(resource_mode || format_mode == FORMAT_TABLE)){ //long options nvpair_print_text(global_catalog[i], stdout); }else{ const char *temp_my_master = nvpair_lookup_string(global_catalog[i], "my_master"); if( !temp_my_master || !strcmp(temp_my_master, "127.0.0.1:-1") ) { //this master has no master if(resource_mode) { debug(D_WQ,"%s resources -- cores:%s memory:%s disk:%s\n",nvpair_lookup_string(global_catalog[i],"project"),nvpair_lookup_string(global_catalog[i],"cores_total"),nvpair_lookup_string(global_catalog[i],"memory_total"),nvpair_lookup_string(global_catalog[i],"disk_total")); nvpair_print_table(global_catalog[i], stdout, master_resource_headers); }else if(format_mode == FORMAT_TABLE){ nvpair_print_table(global_catalog[i], stdout, queue_headers); } int space = 1; my_foreman(&space, nvpair_lookup_string(global_catalog[i], "name"), atoi(nvpair_lookup_string(global_catalog[i], "port")), stoptime); } } i++; } if(format_mode == FORMAT_TABLE){ nvpair_print_table_footer(stdout, queue_headers); }else if(resource_mode){ nvpair_print_table_footer(stdout, master_resource_headers); } global_catalog_cleanup(); return EXIT_SUCCESS; }
int do_direct_query( const char *master_host, int master_port, time_t stoptime ) { static struct nvpair_header *query_headers[4] = { queue_headers, task_headers, worker_headers, master_resource_headers }; static const char * query_strings[4] = {"queue","task","worker", "master_resource"}; struct nvpair_header *query_header = query_headers[query_mode]; const char * query_string = query_strings[query_mode]; struct link *l; struct nvpair *nv; char master_addr[LINK_ADDRESS_MAX]; if(!domain_name_cache_lookup(master_host,master_addr)) { fprintf(stderr,"couldn't find address of %s\n",master_host); return 1; } l = link_connect(master_addr,master_port,stoptime); if(!l) { fprintf(stderr,"couldn't connect to %s port %d: %s\n",master_host,master_port,strerror(errno)); return 1; } link_putfstring(l,"%s_status\n",stoptime,query_string); if(format_mode==FORMAT_TABLE) { nvpair_print_table_header(stdout, query_header); } while((nv = link_nvpair_read(l,stoptime))) { if(format_mode == FORMAT_TABLE) { nvpair_print_table(nv, stdout, query_header); } else { nvpair_print_text(nv, stdout); } nvpair_delete(nv); } if(format_mode == FORMAT_TABLE) { nvpair_print_table_footer(stdout, query_header); } return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { struct catalog_query *cq; struct nvpair *nv; work_queue_status_parse_command_line_arguments(argc, argv); if(optind > argc) { work_queue_status_show_help("work_queue_status"); exit(EXIT_FAILURE); } cq = catalog_query_create(CATALOG_HOST, CATALOG_PORT, time(0) + Work_Queue_Status_Timeout); if(!cq) { fprintf(stderr, "couldn't query catalog %s:%d: %s\n", CATALOG_HOST, CATALOG_PORT, strerror(errno)); return 1; } if(Work_Queue_Status_Mode == MODE_TABLE) nvpair_print_table_header(stdout, headers); while((nv = catalog_query_read(cq, time(0) + Work_Queue_Status_Timeout))) { if(strcmp(nvpair_lookup_string(nv, "type"), CATALOG_TYPE_WORK_QUEUE_MASTER) == 0) { if(Work_Queue_Status_Mode == MODE_TABLE) nvpair_print_table(nv, stdout, headers); else nvpair_print_text(nv, stdout); } nvpair_delete(nv); } if(Work_Queue_Status_Mode == MODE_TABLE) nvpair_print_table_footer(stdout, headers); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { struct catalog_query *q; struct nvpair *n; time_t timeout = 60, stoptime; const char *catalog_host = 0; signed char c; int i; int count = 0; int mode = MODE_TABLE; INT64_T total = 0, avail = 0; const char *filter_name = 0; const char *filter_value = 0; debug_config(argv[0]); static struct option long_options[] = { {"catalog", required_argument, 0, 'c'}, {"debug", required_argument, 0, 'd'}, {"debug-file", required_argument, 0, 'o'}, {"debug-rotate-max", required_argument, 0, 'O'}, {"server-space", required_argument, 0, 'A'}, {"all", no_argument, 0, 'a'}, {"timeout", required_argument, 0, 't'}, {"brief", no_argument, 0, 's'}, {"verbose", no_argument, 0, 'l'}, {"totals", no_argument, 0, 'T'}, {"version", no_argument, 0, 'v'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; while((c = getopt_long(argc, argv, "aA:c:d:t:o:O:sTlvh", long_options, NULL)) > -1) { switch (c) { case 'a': show_all_types = 1; break; case 'c': catalog_host = optarg; break; case 'd': debug_flags_set(optarg); break; case 't': timeout = string_time_parse(optarg); break; case 'A': minavail = string_metric_parse(optarg); break; case 'o': debug_config_file(optarg); break; case 'O': debug_config_file_size(string_metric_parse(optarg)); break; case 'v': cctools_version_print(stdout, argv[0]); return 1; case 's': mode = MODE_SHORT; break; case 'l': mode = MODE_LONG; break; case 'T': mode = MODE_TOTAL; break; case 'h': default: show_help(argv[0]); return 1; } } cctools_version_debug(D_DEBUG, argv[0]); if(argc - optind == 0) { // fine, keep going } else if((argc - optind) == 1) { filter_name = "name"; filter_value = argv[optind]; } else if((argc - optind) == 2) { filter_name = argv[optind]; filter_value = argv[optind + 1]; } else { show_help(argv[0]); return 1; } stoptime = time(0) + timeout; q = catalog_query_create(catalog_host, 0, stoptime); if(!q) { fprintf(stderr, "couldn't query catalog: %s\n", strerror(errno)); return 1; } if(mode == MODE_TABLE) { nvpair_print_table_header(stdout, headers); } while((n = catalog_query_read(q, stoptime))) { table[count++] = n; } qsort(table, count, sizeof(*table), (int (*)(const void *, const void *)) compare_entries); for(i = 0; i < count; i++) { const char *etype = nvpair_lookup_string(table[i], "type"); if(!show_all_types) { if(etype) { if(!strcmp(etype, "chirp") || !strcmp(etype, "catalog")) { /* ok, keep going */ } else { continue; } } else { continue; } } if(minavail != 0) { if(minavail > nvpair_lookup_integer(table[i], "avail")) { continue; } } if(filter_name) { const char *v = nvpair_lookup_string(table[i], filter_name); if(!v || strcmp(filter_value, v)) continue; } if(mode == MODE_SHORT) { const char *t = nvpair_lookup_string(table[i], "type"); if(t && !strcmp(t, "chirp")) { printf("%s:%d\n", nvpair_lookup_string(table[i], "name"), (int) nvpair_lookup_integer(table[i], "port")); } } else if(mode == MODE_LONG) { nvpair_print_text(table[i], stdout); } else if(mode == MODE_TABLE) { nvpair_print_table(table[i], stdout, headers); } else if(mode == MODE_TOTAL) { avail += nvpair_lookup_integer(table[i], "avail"); total += nvpair_lookup_integer(table[i], "total"); } } if(mode == MODE_TOTAL) { printf("NODES: %4d\n", count); printf("TOTAL: %6sB\n", string_metric(total, -1, 0)); printf("AVAIL: %6sB\n", string_metric(avail, -1, 0)); printf("INUSE: %6sB\n", string_metric(total - avail, -1, 0)); } if(mode == MODE_TABLE) { nvpair_print_table_footer(stdout, headers); } return 0; }