diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c index 89058ef624f1335d5572c96683539a36a9273e73..741b5221aca89cff770ea4f4ccf1d26e4b61b230 100644 --- a/src/sacctmgr/account_functions.c +++ b/src/sacctmgr/account_functions.c @@ -667,8 +667,6 @@ extern int sacctmgr_list_account(int argc, char *argv[]) ListIterator itr2 = NULL; slurmdb_account_rec_t *acct = NULL; slurmdb_association_rec_t *assoc = NULL; - char *object; - char *tmp_char = NULL; int field_count = 0; @@ -677,35 +675,6 @@ extern int sacctmgr_list_account(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_ACCOUNT, - PRINT_CLUSTER, - PRINT_COORDS, - PRINT_DQOS, - PRINT_DESC, - PRINT_FAIRSHARE, - PRINT_GRPCM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_ID, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_ORG, - PRINT_QOS, - PRINT_QOS_RAW, - PRINT_PID, - PRINT_PNAME, - PRINT_PART, - PRINT_USER - }; - acct_cond->with_assocs = with_assoc_flag; for (i=0; i<argc; i++) { @@ -722,10 +691,10 @@ extern int sacctmgr_list_account(int argc, char *argv[]) list_destroy(format_list); return SLURM_ERROR; } else if(!list_count(format_list)) { - slurm_addto_char_list(format_list, "A,Des,O"); + slurm_addto_char_list(format_list, "Acc,Des,O"); if(acct_cond->with_assocs) slurm_addto_char_list(format_list, - "Cl,ParentN,U,Shares,GrpJ,GrpN," + "Cl,ParentN,U,Share,GrpJ,GrpN," "GrpCPUs,GrpS,GrpWall,GrpCPUMins," "MaxJ,MaxN,MaxCPUs,MaxS,MaxW," "MaxCPUMins,QOS,DefaultQOS"); @@ -746,189 +715,7 @@ extern int sacctmgr_list_account(int argc, char *argv[]) } } - print_fields_list = list_create(destroy_print_field); - - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Account", object, MAX(command_len, 1)) - || !strncasecmp("Acct", object, MAX(command_len, 4)) - || !strncasecmp("Name", object, MAX(command_len, 2))) { - field->type = PRINT_ACCOUNT; - field->name = xstrdup("Account"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Cluster", object, - MAX(command_len, 2))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Coordinators", object, - MAX(command_len, 2))) { - field->type = PRINT_COORDS; - field->name = xstrdup("Coordinators"); - field->len = 20; - field->print_routine = sacctmgr_print_coord_list; - } else if(!strncasecmp("DefaultQOS", object, - MAX(command_len, 3))) { - field->type = PRINT_DQOS; - field->name = xstrdup("Def QOS"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Description", object, - MAX(command_len, 3))) { - field->type = PRINT_DESC; - field->name = xstrdup("Descr"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("FairShare", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("FairShare"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpCPUMins", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPCM; - field->name = xstrdup("GrpCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPUs", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpWall", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("ID", object, MAX(command_len, 1))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("Organization", object, - MAX(command_len, 1))) { - field->type = PRINT_ORG; - field->name = xstrdup("Org"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("QOSRAWLevel", object, - MAX(command_len, 4))) { - field->type = PRINT_QOS_RAW; - field->name = xstrdup("QOS_RAW"); - field->len = 10; - field->print_routine = print_fields_char_list; - } else if(!strncasecmp("QOSLevel", object, - MAX(command_len, 1))) { - field->type = PRINT_QOS; - field->name = xstrdup("QOS"); - field->len = 20; - field->print_routine = sacctmgr_print_qos_list; - } else if(!strncasecmp("ParentID", object, - MAX(command_len, 7))) { - field->type = PRINT_PID; - field->name = xstrdup("Par ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("ParentName", object, - MAX(command_len, 7))) { - field->type = PRINT_PNAME; - field->name = xstrdup("Par Name"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Shares", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("Shares"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("User", object, MAX(command_len, 1))) { - field->type = PRINT_USER; - field->name = xstrdup("User"); - field->len = 10; - field->print_routine = print_fields_str; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { @@ -961,18 +748,12 @@ extern int sacctmgr_list_account(int argc, char *argv[]) int curr_inx = 1; while((field = list_next(itr2))) { switch(field->type) { - case PRINT_ACCOUNT: + case PRINT_ACCT: field->print_routine( field, acct->name, (curr_inx == field_count)); break; - case PRINT_CLUSTER: - field->print_routine( - field, assoc->cluster, - (curr_inx == - field_count)); - break; case PRINT_COORDS: field->print_routine( field, @@ -980,23 +761,6 @@ extern int sacctmgr_list_account(int argc, char *argv[]) (curr_inx == field_count)); break; - case PRINT_DQOS: - if(!g_qos_list) { - g_qos_list = - acct_storage_g_get_qos( - db_conn, - my_uid, - NULL); - } - tmp_char = slurmdb_qos_str( - g_qos_list, - assoc->def_qos_id); - field->print_routine( - field, - tmp_char, - (curr_inx == - field_count)); - break; case PRINT_DESC: field->print_routine( field, @@ -1004,104 +768,6 @@ extern int sacctmgr_list_account(int argc, char *argv[]) (curr_inx == field_count)); break; - case PRINT_FAIRSHARE: - field->print_routine( - field, - assoc->shares_raw, - (curr_inx == - field_count)); - break; - case PRINT_GRPCM: - field->print_routine( - field, - assoc->grp_cpu_mins, - (curr_inx == - field_count)); - break; - case PRINT_GRPC: - field->print_routine( - field, - assoc->grp_cpus, - (curr_inx == - field_count)); - break; - case PRINT_GRPJ: - field->print_routine( - field, - assoc->grp_jobs, - (curr_inx - == field_count)); - break; - case PRINT_GRPN: - field->print_routine( - field, - assoc->grp_nodes, - (curr_inx - == field_count)); - break; - case PRINT_GRPS: - field->print_routine( - field, - assoc->grp_submit_jobs, - (curr_inx - == field_count)); - break; - case PRINT_GRPW: - field->print_routine( - field, - assoc->grp_wall, - (curr_inx - == field_count)); - break; - case PRINT_ID: - field->print_routine( - field, assoc->id, - (curr_inx == - field_count)); - break; - case PRINT_MAXCM: - field->print_routine( - field, - assoc-> - max_cpu_mins_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXC: - field->print_routine( - field, - assoc->max_cpus_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXJ: - field->print_routine( - field, assoc->max_jobs, - (curr_inx == - field_count)); - break; - case PRINT_MAXN: - field->print_routine( - field, assoc-> - max_nodes_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXS: - field->print_routine( - field, - assoc->max_submit_jobs, - (curr_inx == - field_count)); - break; - case PRINT_MAXW: - field->print_routine( - field, - assoc-> - max_wall_pj, - (curr_inx == - field_count)); - break; case PRINT_ORG: field->print_routine( field, @@ -1109,58 +775,9 @@ extern int sacctmgr_list_account(int argc, char *argv[]) (curr_inx == field_count)); break; - case PRINT_QOS: - if(!g_qos_list) { - g_qos_list = - acct_storage_g_get_qos( - db_conn, - my_uid, - NULL); - } - field->print_routine( - field, - g_qos_list, - assoc->qos_list, - (curr_inx == - field_count)); - break; - case PRINT_QOS_RAW: - field->print_routine( - field, - assoc->qos_list, - (curr_inx == - field_count)); - break; - case PRINT_PID: - field->print_routine( - field, - assoc->parent_id, - (curr_inx == - field_count)); - break; - case PRINT_PNAME: - field->print_routine( - field, - assoc->parent_acct, - (curr_inx == - field_count)); - break; - case PRINT_PART: - field->print_routine( - field, - assoc->partition, - (curr_inx == - field_count)); - break; - case PRINT_USER: - field->print_routine( - field, assoc->user, - (curr_inx == - field_count)); - break; default: - field->print_routine( - field, NULL, + sacctmgr_print_association_rec( + assoc, field, NULL, (curr_inx == field_count)); break; @@ -1175,40 +792,13 @@ extern int sacctmgr_list_account(int argc, char *argv[]) int curr_inx = 1; while((field = list_next(itr2))) { switch(field->type) { - /* All the association stuff */ - case PRINT_CLUSTER: - case PRINT_DQOS: - case PRINT_FAIRSHARE: - case PRINT_GRPCM: - case PRINT_GRPC: - case PRINT_GRPJ: - case PRINT_GRPN: - case PRINT_GRPS: - case PRINT_GRPW: - case PRINT_ID: - case PRINT_MAXCM: - case PRINT_MAXC: - case PRINT_MAXJ: - case PRINT_MAXN: - case PRINT_MAXS: - case PRINT_MAXW: - case PRINT_QOS_RAW: - case PRINT_PID: - case PRINT_PNAME: - case PRINT_PART: - case PRINT_USER: - field->print_routine( - field, NULL, - (curr_inx == - field_count)); - break; case PRINT_QOS: field->print_routine( field, NULL, NULL, (curr_inx == field_count)); break; - case PRINT_ACCOUNT: + case PRINT_ACCT: field->print_routine( field, acct->name, (curr_inx == diff --git a/src/sacctmgr/association_functions.c b/src/sacctmgr/association_functions.c index de84259cc546fb9dcfa105f02aed838f472fcf0a..a2beddf54180b5f5a73a6a7f37a59d2f40096021 100644 --- a/src/sacctmgr/association_functions.c +++ b/src/sacctmgr/association_functions.c @@ -38,7 +38,6 @@ \*****************************************************************************/ #include "src/sacctmgr/sacctmgr.h" -static bool tree_display = 0; static int _set_cond(int *start, int argc, char *argv[], slurmdb_association_cond_t *assoc_cond, @@ -178,8 +177,7 @@ extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond, db_conn, my_uid, NULL); if (slurmdb_addto_qos_char_list(assoc_cond->def_qos_id_list, - g_qos_list, - value, 0)) + g_qos_list, value, 0)) set = 1; else exit_code = 1; @@ -432,6 +430,134 @@ extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc, return set; } +extern void sacctmgr_print_association_rec(slurmdb_association_rec_t *assoc, + print_field_t *field, List tree_list, + bool last) +{ + char *print_acct = NULL; + char *tmp_char = NULL; + + xassert(field); + + if(!assoc) { + field->print_routine(field, NULL, last); + return; + } + + switch(field->type) { + case PRINT_ACCT: + if (tree_display) { + char *local_acct = NULL; + char *parent_acct = NULL; + if (assoc->user) { + local_acct = xstrdup_printf("|%s", assoc->acct); + parent_acct = assoc->acct; + } else { + local_acct = + xstrdup(assoc->acct); + parent_acct = + assoc->parent_acct; + } + print_acct = slurmdb_tree_name_get( + local_acct, parent_acct, tree_list); + xfree(local_acct); + } else { + print_acct = assoc->acct; + } + field->print_routine(field, print_acct, last); + break; + case PRINT_CLUSTER: + field->print_routine(field, assoc->cluster, last); + break; + case PRINT_DQOS: + if (!g_qos_list) + g_qos_list = acct_storage_g_get_qos( + db_conn, my_uid, NULL); + tmp_char = slurmdb_qos_str(g_qos_list, assoc->def_qos_id); + field->print_routine(field, tmp_char, last); + break; + case PRINT_FAIRSHARE: + field->print_routine(field, assoc->shares_raw, last); + break; + case PRINT_GRPCM: + field->print_routine(field, assoc->grp_cpu_mins, last); + break; + case PRINT_GRPCRM: + field->print_routine(field, assoc->grp_cpu_run_mins, last); + break; + case PRINT_GRPC: + field->print_routine(field, assoc->grp_cpus, last); + break; + case PRINT_GRPJ: + field->print_routine(field, assoc->grp_jobs, last); + break; + case PRINT_GRPN: + field->print_routine(field, assoc->grp_nodes, last); + break; + case PRINT_GRPS: + field->print_routine(field, assoc->grp_submit_jobs, last); + break; + case PRINT_GRPW: + field->print_routine(field, assoc->grp_wall, last); + break; + case PRINT_ID: + field->print_routine(field, assoc->id, last); + break; + case PRINT_LFT: + field->print_routine(field, assoc->lft, last); + break; + case PRINT_MAXCM: + field->print_routine(field, assoc->max_cpu_mins_pj, last); + break; + case PRINT_MAXCRM: + field->print_routine(field, assoc->max_cpu_run_mins, last); + break; + case PRINT_MAXC: + field->print_routine(field, assoc->max_cpus_pj, last); + break; + case PRINT_MAXJ: + field->print_routine(field, assoc->max_jobs, last); + break; + case PRINT_MAXN: + field->print_routine(field, assoc->max_nodes_pj, last); + break; + case PRINT_MAXS: + field->print_routine(field, assoc->max_submit_jobs, last); + break; + case PRINT_MAXW: + field->print_routine(field, assoc->max_wall_pj, last); + break; + case PRINT_PID: + field->print_routine(field, assoc->parent_id, last); + break; + case PRINT_PNAME: + field->print_routine(field, assoc->parent_acct, last); + break; + case PRINT_PART: + field->print_routine(field, assoc->partition, last); + break; + case PRINT_QOS: + if (!g_qos_list) + g_qos_list = acct_storage_g_get_qos( + db_conn, my_uid, NULL); + + field->print_routine(field, g_qos_list, assoc->qos_list, last); + break; + case PRINT_QOS_RAW: + field->print_routine(field, assoc->qos_list, last); + break; + case PRINT_RGT: + field->print_routine(field, assoc->rgt, last); + break; + case PRINT_USER: + field->print_routine(field, assoc->user, last); + break; + default: + field->print_routine(field, NULL, last); + break; + } +} + extern int sacctmgr_list_association(int argc, char *argv[]) { int rc = SLURM_SUCCESS; @@ -443,9 +569,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) int i=0; ListIterator itr = NULL; ListIterator itr2 = NULL; - char *object = NULL; - char *tmp_char = NULL; - char *print_acct = NULL, *last_cluster = NULL; + char *last_cluster = NULL; List tree_list = NULL; int field_count = 0; @@ -455,34 +579,6 @@ extern int sacctmgr_list_association(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_ACCOUNT, - PRINT_CLUSTER, - PRINT_DQOS, - PRINT_FAIRSHARE, - PRINT_GRPCM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_ID, - PRINT_LFT, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_PID, - PRINT_PNAME, - PRINT_PART, - PRINT_QOS, - PRINT_QOS_RAW, - PRINT_RGT, - PRINT_USER - }; - for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); if (!strncasecmp(argv[i], "Where", MAX(command_len, 5)) @@ -496,199 +592,15 @@ extern int sacctmgr_list_association(int argc, char *argv[]) list_destroy(format_list); return SLURM_ERROR; } else if (!list_count(format_list)) { - slurm_addto_char_list(format_list, "C,A,U,Part"); + slurm_addto_char_list(format_list, "Cluster,Account,User,Part"); if (!assoc_cond->without_parent_limits) slurm_addto_char_list(format_list, - "Shares,GrpJ,GrpN,GrpCPUs," + "Share,GrpJ,GrpN,GrpCPUs," "GrpS,GrpWall,GrpCPUMins,MaxJ," "MaxN,MaxCPUs,MaxS,MaxW," "MaxCPUMins,QOS,DefaultQOS"); } - print_fields_list = list_create(destroy_print_field); - - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - int command_len = 0; - int newlen = 0; - - if ((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - - if (!strncasecmp("Account", object, MAX(command_len, 1)) - || !strncasecmp("Acct", object, MAX(command_len, 4))) { - field->type = PRINT_ACCOUNT; - field->name = xstrdup("Account"); - if (tree_display) - field->len = -20; - else - field->len = 10; - field->print_routine = print_fields_str; - } else if (!strncasecmp("Cluster", object, - MAX(command_len, 1))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if (!strncasecmp("DefaultQOS", object, - MAX(command_len, 1))) { - field->type = PRINT_DQOS; - field->name = xstrdup("Def QOS"); - field->len = 9; - field->print_routine = print_fields_str; - } else if (!strncasecmp("FairShare", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("FairShare"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("GrpCPUMins", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPCM; - field->name = xstrdup("GrpCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if (!strncasecmp("GrpCPUs", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("GrpWall", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if (!strncasecmp("ID", object, MAX(command_len, 1))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("LFT", object, MAX(command_len, 1))) { - field->type = PRINT_LFT; - field->name = xstrdup("LFT"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if (!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("MaxJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("MaxSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if (!strncasecmp("QOSRAWLevel", object, - MAX(command_len, 4))) { - field->type = PRINT_QOS_RAW; - field->name = xstrdup("QOS_RAW"); - field->len = 10; - field->print_routine = print_fields_char_list; - } else if (!strncasecmp("QOSLevel", object, - MAX(command_len, 1))) { - field->type = PRINT_QOS; - field->name = xstrdup("QOS"); - field->len = 20; - field->print_routine = sacctmgr_print_qos_list; - } else if (!strncasecmp("ParentID", object, - MAX(command_len, 7))) { - field->type = PRINT_PID; - field->name = xstrdup("Par ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("ParentName", object, - MAX(command_len, 7))) { - field->type = PRINT_PNAME; - field->name = xstrdup("Par Name"); - field->len = 10; - field->print_routine = print_fields_str; - } else if (!strncasecmp("Partition", object, - MAX(command_len, 4))) { - field->type = PRINT_PART; - field->name = xstrdup("Partition"); - field->len = 10; - field->print_routine = print_fields_str; - } else if (!strncasecmp("RGT", object, MAX(command_len, 1))) { - field->type = PRINT_RGT; - field->name = xstrdup("RGT"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("Shares", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("Shares"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if (!strncasecmp("User", object, MAX(command_len, 1))) { - field->type = PRINT_USER; - field->name = xstrdup("User"); - field->len = 10; - field->print_routine = print_fields_str; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - exit(1); - xfree(field); - continue; - } - - if (newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if (exit_code) { @@ -729,176 +641,9 @@ extern int sacctmgr_list_association(int argc, char *argv[]) last_cluster = assoc->cluster; } while((field = list_next(itr2))) { - switch(field->type) { - case PRINT_ACCOUNT: - if (tree_display) { - char *local_acct = NULL; - char *parent_acct = NULL; - if (assoc->user) { - local_acct = xstrdup_printf( - "|%s", assoc->acct); - parent_acct = assoc->acct; - } else { - local_acct = - xstrdup(assoc->acct); - parent_acct = - assoc->parent_acct; - } - print_acct = slurmdb_tree_name_get( - local_acct, - parent_acct, tree_list); - xfree(local_acct); - } else { - print_acct = assoc->acct; - } - field->print_routine( - field, - print_acct, - (curr_inx == field_count)); - break; - case PRINT_CLUSTER: - field->print_routine( - field, - assoc->cluster, - (curr_inx == field_count)); - break; - case PRINT_DQOS: - if (!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - tmp_char = slurmdb_qos_str(g_qos_list, - assoc->def_qos_id); - field->print_routine( - field, - tmp_char, - (curr_inx == field_count)); - break; - case PRINT_FAIRSHARE: - field->print_routine( - field, - assoc->shares_raw, - (curr_inx == field_count)); - break; - case PRINT_GRPCM: - field->print_routine( - field, - assoc->grp_cpu_mins, - (curr_inx == field_count)); - break; - case PRINT_GRPC: - field->print_routine(field, - assoc->grp_cpus, - (curr_inx == field_count)); - break; - case PRINT_GRPJ: - field->print_routine(field, - assoc->grp_jobs, - (curr_inx == field_count)); - break; - case PRINT_GRPN: - field->print_routine(field, - assoc->grp_nodes, - (curr_inx == field_count)); - break; - case PRINT_GRPS: - field->print_routine(field, - assoc->grp_submit_jobs, - (curr_inx == field_count)); - break; - case PRINT_GRPW: - field->print_routine( - field, - assoc->grp_wall, - (curr_inx == field_count)); - break; - case PRINT_ID: - field->print_routine(field, - assoc->id, - (curr_inx == field_count)); - break; - case PRINT_LFT: - field->print_routine(field, - assoc->lft, - (curr_inx == field_count)); - break; - case PRINT_MAXCM: - field->print_routine( - field, - assoc->max_cpu_mins_pj, - (curr_inx == field_count)); - break; - case PRINT_MAXC: - field->print_routine(field, - assoc->max_cpus_pj, - (curr_inx == field_count)); - break; - case PRINT_MAXJ: - field->print_routine(field, - assoc->max_jobs, - (curr_inx == field_count)); - break; - case PRINT_MAXN: - field->print_routine(field, - assoc->max_nodes_pj, - (curr_inx == field_count)); - break; - case PRINT_MAXS: - field->print_routine(field, - assoc->max_submit_jobs, - (curr_inx == field_count)); - break; - case PRINT_MAXW: - field->print_routine( - field, - assoc->max_wall_pj, - (curr_inx == field_count)); - break; - case PRINT_PID: - field->print_routine(field, - assoc->parent_id, - (curr_inx == field_count)); - break; - case PRINT_PNAME: - field->print_routine(field, - assoc->parent_acct, - (curr_inx == field_count)); - break; - case PRINT_PART: - field->print_routine(field, - assoc->partition, - (curr_inx == field_count)); - break; - case PRINT_QOS: - if (!g_qos_list) - g_qos_list = acct_storage_g_get_qos( - db_conn, my_uid, NULL); - - field->print_routine(field, - g_qos_list, - assoc->qos_list, - (curr_inx == field_count)); - break; - case PRINT_QOS_RAW: - field->print_routine(field, - assoc->qos_list, - (curr_inx == field_count)); - break; - case PRINT_RGT: - field->print_routine(field, - assoc->rgt, - (curr_inx == field_count)); - break; - case PRINT_USER: - field->print_routine(field, - assoc->user, - (curr_inx == field_count)); - break; - default: - field->print_routine( - field, NULL, - (curr_inx == field_count)); - break; - } + sacctmgr_print_association_rec( + assoc, field, tree_list, + (curr_inx == field_count)); curr_inx++; } list_iterator_reset(itr2); @@ -913,6 +658,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]) list_destroy(first_list); list_destroy(assoc_list); list_destroy(print_fields_list); + tree_display = 0; return rc; } diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c index 01521092f31fe1b3c1a82a5211d86d07385959e8..7907d335be0f3662671c9748d24a1273cd70a831 100644 --- a/src/sacctmgr/cluster_functions.c +++ b/src/sacctmgr/cluster_functions.c @@ -392,7 +392,6 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) ListIterator itr = NULL; ListIterator itr2 = NULL; slurmdb_cluster_rec_t *cluster = NULL; - char *object; char *tmp_char = NULL; int field_count = 0; @@ -402,35 +401,6 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_CLUSTER, - PRINT_CHOST, - PRINT_CPORT, - PRINT_CLASS, - PRINT_CPUS, - PRINT_DEF_QOS, - PRINT_FAIRSHARE, - PRINT_FLAGS, - PRINT_GRPCM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_NODECNT, - PRINT_NODES, - PRINT_QOS, - PRINT_QOS_RAW, - PRINT_RPC_VERSION, - PRINT_SELECT, - }; - slurmdb_init_cluster_cond(cluster_cond); cluster_cond->cluster_list = list_create(slurm_destroy_char); for (i=0; i<argc; i++) { @@ -447,8 +417,6 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) return SLURM_ERROR; } - print_fields_list = list_create(destroy_print_field); - if(!list_count(format_list)) { slurm_addto_char_list(format_list, "Cl,Controlh,Controlp,RPC"); @@ -460,181 +428,7 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) cluster_cond->with_deleted = with_deleted; - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Cluster", object, MAX(command_len, 2)) - || !strncasecmp("Name", object, MAX(command_len, 2))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("ControlHost", object, - MAX(command_len, 8))) { - field->type = PRINT_CHOST; - field->name = xstrdup("ControlHost"); - field->len = 15; - field->print_routine = print_fields_str; - } else if(!strncasecmp("ControlPort", object, - MAX(command_len, 8))) { - field->type = PRINT_CPORT; - field->name = xstrdup("ControlPort"); - field->len = 12; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Classification", object, - MAX(command_len, 2))) { - field->type = PRINT_CPUS; - field->name = xstrdup("Class"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("CPUCount", object, - MAX(command_len, 2))) { - field->type = PRINT_CPUS; - field->name = xstrdup("CPUCount"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultQOS", object, - MAX(command_len, 8))) { - field->type = PRINT_DEF_QOS; - field->name = xstrdup("Def QOS"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("FairShare", object, - MAX(command_len, 2))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("FairShare"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Flags", object, - MAX(command_len, 2))) { - field->type = PRINT_FLAGS; - field->name = xstrdup("Flags"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("GrpCPUs", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("NodeCount", object, - MAX(command_len, 5))) { - field->type = PRINT_NODECNT; - field->name = xstrdup("NodeCount"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("NodeNames", object, - MAX(command_len, 5))) { - field->type = PRINT_NODES; - field->name = xstrdup("NodeNames"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("QOSRAWLevel", object, - MAX(command_len, 4))) { - field->type = PRINT_QOS_RAW; - field->name = xstrdup("QOS_RAW"); - field->len = 10; - field->print_routine = print_fields_char_list; - } else if(!strncasecmp("QOSLevel", object, - MAX(command_len, 1))) { - field->type = PRINT_QOS; - field->name = xstrdup("QOS"); - field->len = 20; - field->print_routine = sacctmgr_print_qos_list; - } else if(!strncasecmp("RPC", object, MAX(command_len, 1))) { - field->type = PRINT_RPC_VERSION; - field->name = xstrdup("RPC"); - field->len = 3; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Shares", object, - MAX(command_len, 2))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("Shares"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("PluginIDSelect", object, - MAX(command_len, 2))) { - field->type = PRINT_SELECT; - field->name = xstrdup("PluginIDSelect"); - field->len = 14; - field->print_routine = print_fields_uint; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { @@ -698,7 +492,7 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) (curr_inx == field_count)); break; } - case PRINT_DEF_QOS: + case PRINT_DQOS: if(!g_qos_list) { g_qos_list = acct_storage_g_get_qos( db_conn, @@ -796,7 +590,7 @@ extern int sacctmgr_list_cluster(int argc, char *argv[]) (curr_inx == field_count)); break; } - case PRINT_NODES: + case PRINT_CLUSTER_NODES: field->print_routine( field, cluster->nodes, diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c index 84d001b9d92856c9668acee70d9e03f56683df5e..6c058fa7476dd1ca2b32febfa73cb123e6ac8e04 100644 --- a/src/sacctmgr/common.c +++ b/src/sacctmgr/common.c @@ -83,18 +83,18 @@ extern int parse_option_end(char *option) { int end = 0; - if(!option) + if (!option) return 0; while(option[end]) { - if((option[end] == '=') + if ((option[end] == '=') || (option[end] == '+' && option[end+1] == '=') || (option[end] == '-' && option[end+1] == '=')) break; end++; } - if(!option[end]) + if (!option[end]) return 0; end++; @@ -110,7 +110,7 @@ extern char *strip_quotes(char *option, int *increased, bool make_lower) char quote_c = '\0'; int quote = 0; - if(!option) + if (!option) return NULL; /* first strip off the ("|')'s */ @@ -122,14 +122,14 @@ extern char *strip_quotes(char *option, int *increased, bool make_lower) start = i; while(option[i]) { - if(quote && option[i] == quote_c) { + if (quote && option[i] == quote_c) { end++; break; - } else if(option[i] == '\"' || option[i] == '\'') + } else if (option[i] == '\"' || option[i] == '\'') option[i] = '`'; - else if(make_lower) { + else if (make_lower) { char lower = tolower(option[i]); - if(lower != option[i]) + if (lower != option[i]) option[i] = lower; } @@ -140,18 +140,357 @@ extern char *strip_quotes(char *option, int *increased, bool make_lower) meat = xmalloc((i-start)+1); memcpy(meat, option+start, (i-start)); - if(increased) + if (increased) (*increased) += end; return meat; } +static print_field_t *_get_print_field(char *object) +{ + /* This should be kept in alpha order to avoid picking the + wrong field name. + */ + print_field_t *field = xmalloc(sizeof(print_field_t)); + char *tmp_char = NULL; + int command_len, field_len = 0; + + if((tmp_char = strstr(object, "\%"))) { + field_len = atoi(tmp_char+1); + tmp_char[0] = '\0'; + } + command_len = strlen(object); + + if (!strncasecmp("Account", object, MAX(command_len, 3)) + || !strncasecmp("Acct", object, MAX(command_len, 4))) { + field->type = PRINT_ACCT; + field->name = xstrdup("Account"); + if (tree_display) + field->len = -20; + else + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("ActionRaw", object, MAX(command_len, 7))) { + field->type = PRINT_ACTIONRAW; + field->name = xstrdup("ActionRaw"); + field->len = 10; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("Action", object, MAX(command_len, 4))) { + field->type = PRINT_ACTION; + field->name = xstrdup("Action"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Actor", object, MAX(command_len, 4))) { + field->type = PRINT_ACTOR; + field->name = xstrdup("Actor"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("AdminLevel", object, MAX(command_len, 2))) { + field->type = PRINT_ADMIN; + field->name = xstrdup("Admin"); + field->len = 9; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Classification", object, + MAX(command_len, 3))) { + field->type = PRINT_CPUS; + field->name = xstrdup("Class"); + field->len = 9; + field->print_routine = print_fields_str; + } else if (!strncasecmp("ClusterNodes", object, MAX(command_len, 8)) + || !strncasecmp("NodeNames", object, MAX(command_len, 8))) { + field->type = PRINT_CLUSTER_NODES; + field->name = xstrdup("Cluster Nodes"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Cluster", object, MAX(command_len, 2))) { + field->type = PRINT_CLUSTER; + field->name = xstrdup("Cluster"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Coordinators", object, MAX(command_len, 2))) { + field->type = PRINT_COORDS; + field->name = xstrdup("Coord Accounts"); + field->len = 20; + field->print_routine = sacctmgr_print_coord_list; + } else if (!strncasecmp("ControlHost", object, MAX(command_len, 8))) { + field->type = PRINT_CHOST; + field->name = xstrdup("ControlHost"); + field->len = 15; + field->print_routine = print_fields_str; + } else if (!strncasecmp("ControlPort", object, MAX(command_len, 8))) { + field->type = PRINT_CPORT; + field->name = xstrdup("ControlPort"); + field->len = 12; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("CPUCount", object, MAX(command_len, 2))) { + field->type = PRINT_CPUS; + field->name = xstrdup("CPUCount"); + field->len = 9; + field->print_routine = print_fields_str; + } else if (!strncasecmp("DefaultAccount", object, + MAX(command_len, 8))) { + field->type = PRINT_DACCT; + field->name = xstrdup("Def Acct"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("DefaultQOS", object, MAX(command_len, 8))) { + field->type = PRINT_DQOS; + field->name = xstrdup("Def QOS"); + field->len = 9; + field->print_routine = print_fields_str; + } else if (!strncasecmp("DefaultWCKey", object, MAX(command_len, 8))) { + field->type = PRINT_DWCKEY; + field->name = xstrdup("Def WCKey"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Description", object, MAX(command_len, 3))) { + field->type = PRINT_DESC; + field->name = xstrdup("Descr"); + field->len = 20; + field->print_routine = print_fields_str; + } else if(!strncasecmp("Duration", object, MAX(command_len, 2))) { + field->type = PRINT_DURATION; + field->name = xstrdup("Duration"); + field->len = 13; + field->print_routine = print_fields_time_from_secs; + } else if(!strncasecmp("End", object, MAX(command_len, 2))) { + field->type = PRINT_END; + field->name = xstrdup("End"); + field->len = 19; + field->print_routine = print_fields_date; + } else if(!strncasecmp("EventRaw", object, MAX(command_len, 6))) { + field->type = PRINT_EVENTRAW; + field->name = xstrdup("EventRaw"); + field->len = 8; + field->print_routine = print_fields_uint; + } else if(!strncasecmp("Event", object, MAX(command_len, 2))) { + field->type = PRINT_EVENT; + field->name = xstrdup("Event"); + field->len = 7; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Flags", object, MAX(command_len, 2))) { + field->type = PRINT_FLAGS; + field->name = xstrdup("Flags"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("GrpCPUMins", object, MAX(command_len, 7))) { + field->type = PRINT_GRPCM; + field->name = xstrdup("GrpCPUMins"); + field->len = 11; + field->print_routine = print_fields_uint64; + } else if (!strncasecmp("GrpCPURunMins", object, MAX(command_len, 7))) { + field->type = PRINT_GRPCRM; + field->name = xstrdup("GrpCPURunMins"); + field->len = 13; + field->print_routine = print_fields_uint64; + } else if (!strncasecmp("GrpCPUs", object, MAX(command_len, 7))) { + field->type = PRINT_GRPC; + field->name = xstrdup("GrpCPUs"); + field->len = 8; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("GrpJobs", object, MAX(command_len, 4))) { + field->type = PRINT_GRPJ; + field->name = xstrdup("GrpJobs"); + field->len = 7; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("GrpNodes", object, MAX(command_len, 4))) { + field->type = PRINT_GRPN; + field->name = xstrdup("GrpNodes"); + field->len = 8; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("GrpSubmitJobs", object, MAX(command_len, 4))) { + field->type = PRINT_GRPS; + field->name = xstrdup("GrpSubmit"); + field->len = 9; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("GrpWall", object, MAX(command_len, 4))) { + field->type = PRINT_GRPW; + field->name = xstrdup("GrpWall"); + field->len = 11; + field->print_routine = print_fields_time; + } else if (!strncasecmp("ID", object, MAX(command_len, 2))) { + field->type = PRINT_ID; + field->name = xstrdup("ID"); + field->len = 6; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("Info", object, MAX(command_len, 2))) { + field->type = PRINT_INFO; + field->name = xstrdup("Info"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("LFT", object, MAX(command_len, 1))) { + field->type = PRINT_LFT; + field->name = xstrdup("LFT"); + field->len = 6; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("MaxCPUMinsPerJob", object, + MAX(command_len, 7))) { + field->type = PRINT_MAXCM; + field->name = xstrdup("MaxCPUMins"); + field->len = 11; + field->print_routine = print_fields_uint64; + } else if (!strncasecmp("MaxCPURunMins", object, MAX(command_len, 7))) { + field->type = PRINT_MAXCRM; + field->name = xstrdup("MaxCPURunMins"); + field->len = 13; + field->print_routine = print_fields_uint64; + } else if (!strncasecmp("MaxCPUsPerJob", object, MAX(command_len, 7))) { + field->type = PRINT_MAXC; + field->name = xstrdup("MaxCPUs"); + field->len = 8; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("MaxJobs", object, MAX(command_len, 4))) { + field->type = PRINT_MAXJ; + field->name = xstrdup("MaxJobs"); + field->len = 7; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("MaxNodesPerJob", object, + MAX(command_len, 4))) { + field->type = PRINT_MAXN; + field->name = xstrdup("MaxNodes"); + field->len = 8; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("MaxSubmitJobs", object, MAX(command_len, 4))) { + field->type = PRINT_MAXS; + field->name = xstrdup("MaxSubmit"); + field->len = 9; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("MaxWallDurationPerJob", object, + MAX(command_len, 4))) { + field->type = PRINT_MAXW; + field->name = xstrdup("MaxWall"); + field->len = 11; + field->print_routine = print_fields_time; + } else if (!strncasecmp("Name", object, MAX(command_len, 2))) { + field->type = PRINT_NAME; + field->name = xstrdup("Name"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("NodeCount", object, MAX(command_len, 5))) { + field->type = PRINT_NODECNT; + field->name = xstrdup("NodeCount"); + field->len = 9; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("NodeName", object, MAX(command_len, 5))) { + field->type = PRINT_NODENAME; + field->name = xstrdup("NodeName"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Organization", object, MAX(command_len, 1))) { + field->type = PRINT_ORG; + field->name = xstrdup("Org"); + field->len = 20; + field->print_routine = print_fields_str; + } else if (!strncasecmp("ParentID", object, MAX(command_len, 7))) { + field->type = PRINT_PID; + field->name = xstrdup("Par ID"); + field->len = 6; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("ParentName", object, MAX(command_len, 7))) { + field->type = PRINT_PNAME; + field->name = xstrdup("Par Name"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Partition", object, MAX(command_len, 4))) { + field->type = PRINT_PART; + field->name = xstrdup("Partition"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("PluginIDSelect", object, + MAX(command_len, 2))) { + field->type = PRINT_SELECT; + field->name = xstrdup("PluginIDSelect"); + field->len = 14; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("Preempt", object, MAX(command_len, 7))) { + field->type = PRINT_PREE; + field->name = xstrdup("Preempt"); + field->len = 10; + field->print_routine = sacctmgr_print_qos_bitstr; + } else if (!strncasecmp("PreemptMode", object, MAX(command_len, 8))) { + field->type = PRINT_PREEM; + field->name = xstrdup("PreemptMode"); + field->len = 11; + field->print_routine = print_fields_str; + } else if (!strncasecmp("Priority", object, MAX(command_len, 3))) { + field->type = PRINT_PRIO; + field->name = xstrdup("Priority"); + field->len = 10; + field->print_routine = print_fields_int; + } else if (!strncasecmp("Problem", object, MAX(command_len, 1))) { + field->type = PRINT_PROBLEM; + field->name = xstrdup("Problem"); + field->len = 40; + field->print_routine = print_fields_str; + } else if (!strncasecmp("QOSLevel", object, MAX(command_len, 3))) { + field->type = PRINT_QOS; + field->name = xstrdup("QOS"); + field->len = 20; + field->print_routine = sacctmgr_print_qos_list; + } else if (!strncasecmp("QOSRAWLevel", object, MAX(command_len, 4))) { + field->type = PRINT_QOS_RAW; + field->name = xstrdup("QOS_RAW"); + field->len = 10; + field->print_routine = print_fields_char_list; + } else if (!strncasecmp("RGT", object, MAX(command_len, 1))) { + field->type = PRINT_RGT; + field->name = xstrdup("RGT"); + field->len = 6; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("RPC", object, MAX(command_len, 1))) { + field->type = PRINT_RPC_VERSION; + field->name = xstrdup("RPC"); + field->len = 3; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("Share", object, MAX(command_len, 1)) + || !strncasecmp("FairShare", object, MAX(command_len, 2))) { + field->type = PRINT_FAIRSHARE; + field->name = xstrdup("Share"); + field->len = 9; + field->print_routine = print_fields_uint; + } else if (!strncasecmp("TimeStamp", object, MAX(command_len, 1))) { + field->type = PRINT_TS; + field->name = xstrdup("Time"); + field->len = 19; + field->print_routine = print_fields_date; + } else if (!strncasecmp("UsageFactor", object, MAX(command_len, 3))) { + field->type = PRINT_UF; + field->name = xstrdup("UsageFactor"); + field->len = 11; + field->print_routine = print_fields_double; + } else if (!strncasecmp("User", object, MAX(command_len, 1))) { + field->type = PRINT_USER; + field->name = xstrdup("User"); + field->len = 10; + field->print_routine = print_fields_str; + } else if (!strncasecmp("WCKeys", object, MAX(command_len, 2))) { + field->type = PRINT_WCKEYS; + field->name = xstrdup("WCKeys"); + field->len = 20; + field->print_routine = print_fields_char_list; + } else if (!strncasecmp("Where", object, MAX(command_len, 2))) { + field->type = PRINT_WHERE; + field->name = xstrdup("Where"); + field->len = 20; + field->print_routine = print_fields_str; + } else { + exit_code=1; + fprintf(stderr, "Unknown field '%s'\n", object); + exit(1); + } + + if (field_len) + field->len = field_len; + return field; +} + extern int notice_thread_init() { pthread_attr_t attr; slurm_attr_init(&attr); - if(pthread_create(&lock_warning_thread, &attr, &_print_lock_warn, NULL)) + if (pthread_create(&lock_warning_thread, &attr, + &_print_lock_warn, NULL)) error ("pthread_create error %m"); slurm_attr_destroy(&attr); return SLURM_SUCCESS; @@ -170,7 +509,7 @@ extern int commit_check(char *warning) fd_set rfds; struct timeval tv; - if(!rollback_flag) + if (!rollback_flag) return 1; printf("%s (You have 30 seconds to decide)\n", warning); @@ -178,7 +517,7 @@ extern int commit_check(char *warning) while(c != 'Y' && c != 'y' && c != 'N' && c != 'n' && c != '\n') { - if(c) { + if (c) { printf("Y or N please\n"); } printf("(N/y): "); @@ -188,16 +527,16 @@ extern int commit_check(char *warning) /* Wait up to 30 seconds. */ tv.tv_sec = 30; tv.tv_usec = 0; - if((ans = select(fd+1, &rfds, NULL, NULL, &tv)) <= 0) + if ((ans = select(fd+1, &rfds, NULL, NULL, &tv)) <= 0) break; c = getchar(); printf("\n"); } _nonblock(0); - if(ans <= 0) + if (ans <= 0) printf("timeout\n"); - else if(c == 'Y' || c == 'y') + else if (c == 'Y' || c == 'y') return 1; return 0; @@ -263,31 +602,31 @@ extern slurmdb_association_rec_t *sacctmgr_find_association(char *user, List assoc_list = NULL; memset(&assoc_cond, 0, sizeof(slurmdb_association_cond_t)); - if(account) { + if (account) { assoc_cond.acct_list = list_create(NULL); list_append(assoc_cond.acct_list, account); } else { error("need an account to find association"); return NULL; } - if(cluster) { + if (cluster) { assoc_cond.cluster_list = list_create(NULL); list_append(assoc_cond.cluster_list, cluster); } else { - if(assoc_cond.acct_list) + if (assoc_cond.acct_list) list_destroy(assoc_cond.acct_list); error("need an cluster to find association"); return NULL; } assoc_cond.user_list = list_create(NULL); - if(user) + if (user) list_append(assoc_cond.user_list, user); else list_append(assoc_cond.user_list, ""); assoc_cond.partition_list = list_create(NULL); - if(partition) + if (partition) list_append(assoc_cond.partition_list, partition); else list_append(assoc_cond.partition_list, ""); @@ -300,7 +639,7 @@ extern slurmdb_association_rec_t *sacctmgr_find_association(char *user, list_destroy(assoc_cond.user_list); list_destroy(assoc_cond.partition_list); - if(assoc_list) + if (assoc_list) assoc = list_pop(assoc_list); list_destroy(assoc_list); @@ -409,17 +748,17 @@ extern int sacctmgr_remove_assoc_usage(slurmdb_association_cond_t *assoc_cond) } extern slurmdb_association_rec_t *sacctmgr_find_account_base_assoc(char *account, - char *cluster) + char *cluster) { slurmdb_association_rec_t *assoc = NULL; char *temp = "root"; slurmdb_association_cond_t assoc_cond; List assoc_list = NULL; - if(!cluster) + if (!cluster) return NULL; - if(account) + if (account) temp = account; memset(&assoc_cond, 0, sizeof(slurmdb_association_cond_t)); @@ -437,7 +776,7 @@ extern slurmdb_association_rec_t *sacctmgr_find_account_base_assoc(char *account list_destroy(assoc_cond.cluster_list); list_destroy(assoc_cond.user_list); - if(assoc_list) + if (assoc_list) assoc = list_pop(assoc_list); list_destroy(assoc_list); @@ -457,7 +796,7 @@ extern slurmdb_user_rec_t *sacctmgr_find_user(char *name) slurmdb_association_cond_t assoc_cond; List user_list = NULL; - if(!name) + if (!name) return NULL; memset(&user_cond, 0, sizeof(slurmdb_user_cond_t)); @@ -471,7 +810,7 @@ extern slurmdb_user_rec_t *sacctmgr_find_user(char *name) list_destroy(assoc_cond.user_list); - if(user_list) + if (user_list) user = list_pop(user_list); list_destroy(user_list); @@ -486,7 +825,7 @@ extern slurmdb_account_rec_t *sacctmgr_find_account(char *name) slurmdb_association_cond_t assoc_cond; List account_list = NULL; - if(!name) + if (!name) return NULL; memset(&account_cond, 0, sizeof(slurmdb_account_cond_t)); @@ -500,7 +839,7 @@ extern slurmdb_account_rec_t *sacctmgr_find_account(char *name) list_destroy(assoc_cond.acct_list); - if(account_list) + if (account_list) account = list_pop(account_list); list_destroy(account_list); @@ -514,7 +853,7 @@ extern slurmdb_cluster_rec_t *sacctmgr_find_cluster(char *name) slurmdb_cluster_cond_t cluster_cond; List cluster_list = NULL; - if(!name) + if (!name) return NULL; slurmdb_init_cluster_cond(&cluster_cond); @@ -526,7 +865,7 @@ extern slurmdb_cluster_rec_t *sacctmgr_find_cluster(char *name) list_destroy(cluster_cond.cluster_list); - if(cluster_list) + if (cluster_list) cluster = list_pop(cluster_list); list_destroy(cluster_list); @@ -541,24 +880,24 @@ extern slurmdb_association_rec_t *sacctmgr_find_association_from_list( ListIterator itr = NULL; slurmdb_association_rec_t * assoc = NULL; - if(!assoc_list) + if (!assoc_list) return NULL; itr = list_iterator_create(assoc_list); while((assoc = list_next(itr))) { - if(((!user && assoc->user) - || (user && (!assoc->user - || strcasecmp(user, assoc->user)))) - || ((!account && assoc->acct) - || (account && (!assoc->acct - || strcasecmp(account, assoc->acct)))) - || ((!cluster && assoc->cluster) - || (cluster && (!assoc->cluster - || strcasecmp(cluster, assoc->cluster)))) - || ((!partition && assoc->partition) - || (partition && (!assoc->partition - || strcasecmp(partition, - assoc->partition))))) + if (((!user && assoc->user) + || (user && (!assoc->user + || strcasecmp(user, assoc->user)))) + || ((!account && assoc->acct) + || (account && (!assoc->acct + || strcasecmp(account, assoc->acct)))) + || ((!cluster && assoc->cluster) + || (cluster && (!assoc->cluster + || strcasecmp(cluster, assoc->cluster)))) + || ((!partition && assoc->partition) + || (partition && (!assoc->partition + || strcasecmp(partition, + assoc->partition))))) continue; break; } @@ -574,21 +913,21 @@ extern slurmdb_association_rec_t *sacctmgr_find_account_base_assoc_from_list( slurmdb_association_rec_t *assoc = NULL; char *temp = "root"; - if(!cluster || !assoc_list) + if (!cluster || !assoc_list) return NULL; - if(account) + if (account) temp = account; /* info("looking for %s %s in %d", account, cluster, */ /* list_count(assoc_list)); */ itr = list_iterator_create(assoc_list); while((assoc = list_next(itr))) { /* info("is it %s %s %s", assoc->user, assoc->acct, assoc->cluster); */ - if(assoc->user - || strcasecmp(temp, assoc->acct) - || strcasecmp(cluster, assoc->cluster)) + if (assoc->user + || strcasecmp(temp, assoc->acct) + || strcasecmp(cluster, assoc->cluster)) continue; - /* info("found it"); */ + /* info("found it"); */ break; } list_iterator_destroy(itr); @@ -603,17 +942,17 @@ extern slurmdb_qos_rec_t *sacctmgr_find_qos_from_list( slurmdb_qos_rec_t *qos = NULL; char *working_name = NULL; - if(!name || !qos_list) + if (!name || !qos_list) return NULL; - if(name[0] == '+' || name[0] == '-') + if (name[0] == '+' || name[0] == '-') working_name = name+1; else working_name = name; itr = list_iterator_create(qos_list); while((qos = list_next(itr))) { - if(!strcasecmp(working_name, qos->name)) + if (!strcasecmp(working_name, qos->name)) break; } list_iterator_destroy(itr); @@ -628,12 +967,12 @@ extern slurmdb_user_rec_t *sacctmgr_find_user_from_list( ListIterator itr = NULL; slurmdb_user_rec_t *user = NULL; - if(!name || !user_list) + if (!name || !user_list) return NULL; itr = list_iterator_create(user_list); while((user = list_next(itr))) { - if(!strcasecmp(name, user->name)) + if (!strcasecmp(name, user->name)) break; } list_iterator_destroy(itr); @@ -648,12 +987,12 @@ extern slurmdb_account_rec_t *sacctmgr_find_account_from_list( ListIterator itr = NULL; slurmdb_account_rec_t *account = NULL; - if(!name || !acct_list) + if (!name || !acct_list) return NULL; itr = list_iterator_create(acct_list); while((account = list_next(itr))) { - if(!strcasecmp(name, account->name)) + if (!strcasecmp(name, account->name)) break; } list_iterator_destroy(itr); @@ -668,12 +1007,12 @@ extern slurmdb_cluster_rec_t *sacctmgr_find_cluster_from_list( ListIterator itr = NULL; slurmdb_cluster_rec_t *cluster = NULL; - if(!name || !cluster_list) + if (!name || !cluster_list) return NULL; itr = list_iterator_create(cluster_list); while((cluster = list_next(itr))) { - if(!strcasecmp(name, cluster->name)) + if (!strcasecmp(name, cluster->name)) break; } list_iterator_destroy(itr); @@ -687,21 +1026,21 @@ extern slurmdb_wckey_rec_t *sacctmgr_find_wckey_from_list( ListIterator itr = NULL; slurmdb_wckey_rec_t * wckey = NULL; - if(!wckey_list) + if (!wckey_list) return NULL; itr = list_iterator_create(wckey_list); while((wckey = list_next(itr))) { - if(((!user && wckey->user) - || (user && (!wckey->user - || strcasecmp(user, wckey->user)))) - || ((!name && wckey->name) - || (name && (!wckey->name - || strcasecmp(name, wckey->name)))) - || ((!cluster && wckey->cluster) - || (cluster && (!wckey->cluster - || strcasecmp(cluster, - wckey->cluster))))) + if (((!user && wckey->user) + || (user && (!wckey->user + || strcasecmp(user, wckey->user)))) + || ((!name && wckey->name) + || (name && (!wckey->name + || strcasecmp(name, wckey->name)))) + || ((!cluster && wckey->cluster) + || (cluster && (!wckey->cluster + || strcasecmp(cluster, + wckey->cluster))))) continue; break; } @@ -715,7 +1054,7 @@ extern int get_uint(char *in_value, uint32_t *out_value, char *type) char *ptr = NULL, *meat = NULL; long num; - if(!(meat = strip_quotes(in_value, NULL, 1))) { + if (!(meat = strip_quotes(in_value, NULL, 1))) { error("Problem with strip_quotes"); return SLURM_ERROR; } @@ -739,7 +1078,7 @@ extern int get_uint16(char *in_value, uint16_t *out_value, char *type) char *ptr = NULL, *meat = NULL; long num; - if(!(meat = strip_quotes(in_value, NULL, 1))) { + if (!(meat = strip_quotes(in_value, NULL, 1))) { error("Problem with strip_quotes"); return SLURM_ERROR; } @@ -764,7 +1103,7 @@ extern int get_uint64(char *in_value, uint64_t *out_value, char *type) char *ptr = NULL, *meat = NULL; long long num; - if(!(meat = strip_quotes(in_value, NULL, 1))) { + if (!(meat = strip_quotes(in_value, NULL, 1))) { error("Problem with strip_quotes"); return SLURM_ERROR; } @@ -789,7 +1128,7 @@ extern int get_double(char *in_value, double *out_value, char *type) char *ptr = NULL, *meat = NULL; double num; - if(!(meat = strip_quotes(in_value, NULL, 1))) { + if (!(meat = strip_quotes(in_value, NULL, 1))) { error("Problem with strip_quotes"); return SLURM_ERROR; } @@ -818,13 +1157,13 @@ extern int addto_action_char_list(List char_list, char *names) uint32_t id=0; int count = 0; - if(!char_list) { + if (!char_list) { error("No list was given to fill in"); return 0; } itr = list_iterator_create(char_list); - if(names) { + if (names) { if (names[i] == '\"' || names[i] == '\'') { quote_c = names[i]; quote = 1; @@ -832,17 +1171,17 @@ extern int addto_action_char_list(List char_list, char *names) } start = i; while(names[i]) { - if(quote && names[i] == quote_c) + if (quote && names[i] == quote_c) break; else if (names[i] == '\"' || names[i] == '\'') names[i] = '`'; - else if(names[i] == ',') { - if((i-start) > 0) { + else if (names[i] == ',') { + if ((i-start) > 0) { name = xmalloc((i-start+1)); memcpy(name, names+start, (i-start)); id = str_2_slurmdbd_msg_type(name); - if(id == NO_VAL) { + if (id == NO_VAL) { error("You gave a bad action " "'%s'.", name); xfree(name); @@ -852,12 +1191,12 @@ extern int addto_action_char_list(List char_list, char *names) name = xstrdup_printf("%u", id); while((tmp_char = list_next(itr))) { - if(!strcasecmp(tmp_char, name)) + if (!strcasecmp(tmp_char, name)) break; } list_iterator_reset(itr); - if(!tmp_char) { + if (!tmp_char) { list_append(char_list, name); count++; } else @@ -866,7 +1205,7 @@ extern int addto_action_char_list(List char_list, char *names) i++; start = i; - if(!names[i]) { + if (!names[i]) { error("There is a problem with " "your request. It appears you " "have spaces inside your list."); @@ -875,12 +1214,12 @@ extern int addto_action_char_list(List char_list, char *names) } i++; } - if((i-start) > 0) { + if ((i-start) > 0) { name = xmalloc((i-start)+1); memcpy(name, names+start, (i-start)); id = str_2_slurmdbd_msg_type(name); - if(id == NO_VAL) { + if (id == NO_VAL) { error("You gave a bad action '%s'.", name); xfree(name); @@ -890,11 +1229,11 @@ extern int addto_action_char_list(List char_list, char *names) name = xstrdup_printf("%u", id); while((tmp_char = list_next(itr))) { - if(!strcasecmp(tmp_char, name)) + if (!strcasecmp(tmp_char, name)) break; } - if(!tmp_char) { + if (!tmp_char) { list_append(char_list, name); count++; } else @@ -912,7 +1251,7 @@ extern List copy_char_list(List char_list) char *tmp_char = NULL; ListIterator itr = NULL; - if(!char_list || !list_count(char_list)) + if (!char_list || !list_count(char_list)) return NULL; itr = list_iterator_create(char_list); @@ -934,8 +1273,8 @@ extern void sacctmgr_print_coord_list( char *print_this = NULL; slurmdb_coord_rec_t *object = NULL; - if(!value || !list_count(value)) { - if(print_fields_parsable_print) + if (!value || !list_count(value)) { + if (print_fields_parsable_print) print_this = xstrdup(""); else print_this = xstrdup(" "); @@ -943,7 +1282,7 @@ extern void sacctmgr_print_coord_list( list_sort(value, (ListCmpF)sort_coord_list); itr = list_iterator_create(value); while((object = list_next(itr))) { - if(print_this) + if (print_this) xstrfmtcat(print_this, ",%s", object->name); else @@ -952,16 +1291,16 @@ extern void sacctmgr_print_coord_list( list_iterator_destroy(itr); } - if(print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING - && last) + if (print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING + && last) printf("%s", print_this); - else if(print_fields_parsable_print) + else if (print_fields_parsable_print) printf("%s|", print_this); else { - if(strlen(print_this) > abs_len) + if (strlen(print_this) > abs_len) print_this[abs_len-1] = '+'; - if(field->len == abs_len) + if (field->len == abs_len) printf("%*.*s ", abs_len, abs_len, print_this); else printf("%-*.*s ", abs_len, abs_len, print_this); @@ -977,16 +1316,16 @@ extern void sacctmgr_print_qos_list(print_field_t *field, List qos_list, print_this = get_qos_complete_str(qos_list, value); - if(print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING - && last) + if (print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING + && last) printf("%s", print_this); - else if(print_fields_parsable_print) + else if (print_fields_parsable_print) printf("%s|", print_this); else { - if(strlen(print_this) > abs_len) + if (strlen(print_this) > abs_len) print_this[abs_len-1] = '+'; - if(field->len == abs_len) + if (field->len == abs_len) printf("%*.*s ", abs_len, abs_len, print_this); else printf("%-*.*s ", abs_len, abs_len, print_this); @@ -1002,16 +1341,16 @@ extern void sacctmgr_print_qos_bitstr(print_field_t *field, List qos_list, print_this = get_qos_complete_str_bitstr(qos_list, value); - if(print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING - && last) + if (print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING + && last) printf("%s", print_this); - else if(print_fields_parsable_print) + else if (print_fields_parsable_print) printf("%s|", print_this); else { - if(strlen(print_this) > abs_len) + if (strlen(print_this) > abs_len) print_this[abs_len-1] = '+'; - if(field->len == abs_len) + if (field->len == abs_len) printf("%*.*s ", abs_len, abs_len, print_this); else printf("%-*.*s ", abs_len, abs_len, print_this); @@ -1021,93 +1360,93 @@ extern void sacctmgr_print_qos_bitstr(print_field_t *field, List qos_list, extern void sacctmgr_print_assoc_limits(slurmdb_association_rec_t *assoc) { - if(!assoc) + if (!assoc) return; - if(assoc->shares_raw == INFINITE) + if (assoc->shares_raw == INFINITE) printf(" Fairshare = NONE\n"); - else if(assoc->shares_raw != NO_VAL) + else if (assoc->shares_raw != NO_VAL) printf(" Fairshare = %u\n", assoc->shares_raw); - if(assoc->grp_cpu_mins == INFINITE) + if (assoc->grp_cpu_mins == INFINITE) printf(" GrpCPUMins = NONE\n"); - else if(assoc->grp_cpu_mins != NO_VAL) + else if (assoc->grp_cpu_mins != NO_VAL) printf(" GrpCPUMins = %llu\n", (long long unsigned)assoc->grp_cpu_mins); - if(assoc->grp_cpus == INFINITE) + if (assoc->grp_cpus == INFINITE) printf(" GrpCPUs = NONE\n"); - else if(assoc->grp_cpus != NO_VAL) + else if (assoc->grp_cpus != NO_VAL) printf(" GrpCPUs = %u\n", assoc->grp_cpus); - if(assoc->grp_jobs == INFINITE) + if (assoc->grp_jobs == INFINITE) printf(" GrpJobs = NONE\n"); - else if(assoc->grp_jobs != NO_VAL) + else if (assoc->grp_jobs != NO_VAL) printf(" GrpJobs = %u\n", assoc->grp_jobs); - if(assoc->grp_nodes == INFINITE) + if (assoc->grp_nodes == INFINITE) printf(" GrpNodes = NONE\n"); - else if(assoc->grp_nodes != NO_VAL) + else if (assoc->grp_nodes != NO_VAL) printf(" GrpNodes = %u\n", assoc->grp_nodes); - if(assoc->grp_submit_jobs == INFINITE) + if (assoc->grp_submit_jobs == INFINITE) printf(" GrpSubmitJobs = NONE\n"); - else if(assoc->grp_submit_jobs != NO_VAL) + else if (assoc->grp_submit_jobs != NO_VAL) printf(" GrpSubmitJobs = %u\n", assoc->grp_submit_jobs); - if(assoc->grp_wall == INFINITE) + if (assoc->grp_wall == INFINITE) printf(" GrpWall = NONE\n"); - else if(assoc->grp_wall != NO_VAL) { + else if (assoc->grp_wall != NO_VAL) { char time_buf[32]; mins2time_str((time_t) assoc->grp_wall, time_buf, sizeof(time_buf)); printf(" GrpWall = %s\n", time_buf); } - if(assoc->max_cpu_mins_pj == (uint64_t)INFINITE) + if (assoc->max_cpu_mins_pj == (uint64_t)INFINITE) printf(" MaxCPUMins = NONE\n"); - else if(assoc->max_cpu_mins_pj != (uint64_t)NO_VAL) + else if (assoc->max_cpu_mins_pj != (uint64_t)NO_VAL) printf(" MaxCPUMins = %llu\n", (long long unsigned)assoc->max_cpu_mins_pj); - if(assoc->max_cpus_pj == INFINITE) + if (assoc->max_cpus_pj == INFINITE) printf(" MaxCPUs = NONE\n"); - else if(assoc->max_cpus_pj != NO_VAL) + else if (assoc->max_cpus_pj != NO_VAL) printf(" MaxCPUs = %u\n", assoc->max_cpus_pj); - if(assoc->max_jobs == INFINITE) + if (assoc->max_jobs == INFINITE) printf(" MaxJobs = NONE\n"); - else if(assoc->max_jobs != NO_VAL) + else if (assoc->max_jobs != NO_VAL) printf(" MaxJobs = %u\n", assoc->max_jobs); - if(assoc->max_nodes_pj == INFINITE) + if (assoc->max_nodes_pj == INFINITE) printf(" MaxNodes = NONE\n"); - else if(assoc->max_nodes_pj != NO_VAL) + else if (assoc->max_nodes_pj != NO_VAL) printf(" MaxNodes = %u\n", assoc->max_nodes_pj); - if(assoc->max_submit_jobs == INFINITE) + if (assoc->max_submit_jobs == INFINITE) printf(" MaxSubmitJobs = NONE\n"); - else if(assoc->max_submit_jobs != NO_VAL) + else if (assoc->max_submit_jobs != NO_VAL) printf(" MaxSubmitJobs = %u\n", assoc->max_submit_jobs); - if(assoc->max_wall_pj == INFINITE) + if (assoc->max_wall_pj == INFINITE) printf(" MaxWall = NONE\n"); - else if(assoc->max_wall_pj != NO_VAL) { + else if (assoc->max_wall_pj != NO_VAL) { char time_buf[32]; mins2time_str((time_t) assoc->max_wall_pj, time_buf, sizeof(time_buf)); printf(" MaxWall = %s\n", time_buf); } - if(assoc->qos_list) { - if(!g_qos_list) + if (assoc->qos_list) { + if (!g_qos_list) g_qos_list = acct_storage_g_get_qos(db_conn, my_uid, NULL); char *temp_char = get_qos_complete_str(g_qos_list, assoc->qos_list); - if(temp_char) { + if (temp_char) { printf(" QOS = %s\n", temp_char); xfree(temp_char); } @@ -1116,96 +1455,96 @@ extern void sacctmgr_print_assoc_limits(slurmdb_association_rec_t *assoc) extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos) { - if(!qos) + if (!qos) return; - if(qos->preempt_list && !g_qos_list) + if (qos->preempt_list && !g_qos_list) g_qos_list = acct_storage_g_get_qos(db_conn, my_uid, NULL); - if(qos->grp_cpu_mins == INFINITE) + if (qos->grp_cpu_mins == INFINITE) printf(" GrpCPUMins = NONE\n"); - else if(qos->grp_cpu_mins != NO_VAL) + else if (qos->grp_cpu_mins != NO_VAL) printf(" GrpCPUMins = %llu\n", (long long unsigned)qos->grp_cpu_mins); - if(qos->grp_cpus == INFINITE) + if (qos->grp_cpus == INFINITE) printf(" GrpCPUs = NONE\n"); - else if(qos->grp_cpus != NO_VAL) + else if (qos->grp_cpus != NO_VAL) printf(" GrpCPUs = %u\n", qos->grp_cpus); - if(qos->grp_jobs == INFINITE) + if (qos->grp_jobs == INFINITE) printf(" GrpJobs = NONE\n"); - else if(qos->grp_jobs != NO_VAL) + else if (qos->grp_jobs != NO_VAL) printf(" GrpJobs = %u\n", qos->grp_jobs); - if(qos->grp_nodes == INFINITE) + if (qos->grp_nodes == INFINITE) printf(" GrpNodes = NONE\n"); - else if(qos->grp_nodes != NO_VAL) + else if (qos->grp_nodes != NO_VAL) printf(" GrpNodes = %u\n", qos->grp_nodes); - if(qos->grp_submit_jobs == INFINITE) + if (qos->grp_submit_jobs == INFINITE) printf(" GrpSubmitJobs = NONE\n"); - else if(qos->grp_submit_jobs != NO_VAL) + else if (qos->grp_submit_jobs != NO_VAL) printf(" GrpSubmitJobs = %u\n", qos->grp_submit_jobs); - if(qos->grp_wall == INFINITE) + if (qos->grp_wall == INFINITE) printf(" GrpWall = NONE\n"); - else if(qos->grp_wall != NO_VAL) { + else if (qos->grp_wall != NO_VAL) { char time_buf[32]; mins2time_str((time_t) qos->grp_wall, time_buf, sizeof(time_buf)); printf(" GrpWall = %s\n", time_buf); } - if(qos->max_cpu_mins_pj == (uint64_t)INFINITE) + if (qos->max_cpu_mins_pj == (uint64_t)INFINITE) printf(" MaxCPUMins = NONE\n"); - else if(qos->max_cpu_mins_pj != (uint64_t)NO_VAL) + else if (qos->max_cpu_mins_pj != (uint64_t)NO_VAL) printf(" MaxCPUMins = %llu\n", (long long unsigned)qos->max_cpu_mins_pj); - if(qos->max_cpus_pj == INFINITE) + if (qos->max_cpus_pj == INFINITE) printf(" MaxCPUs = NONE\n"); - else if(qos->max_cpus_pj != NO_VAL) + else if (qos->max_cpus_pj != NO_VAL) printf(" MaxCPUs = %u\n", qos->max_cpus_pj); - if(qos->max_jobs_pu == INFINITE) + if (qos->max_jobs_pu == INFINITE) printf(" MaxJobs = NONE\n"); - else if(qos->max_jobs_pu != NO_VAL) + else if (qos->max_jobs_pu != NO_VAL) printf(" MaxJobs = %u\n", qos->max_jobs_pu); - if(qos->max_nodes_pj == INFINITE) + if (qos->max_nodes_pj == INFINITE) printf(" MaxNodes = NONE\n"); - else if(qos->max_nodes_pj != NO_VAL) + else if (qos->max_nodes_pj != NO_VAL) printf(" MaxNodes = %u\n", qos->max_nodes_pj); - if(qos->max_submit_jobs_pu == INFINITE) + if (qos->max_submit_jobs_pu == INFINITE) printf(" MaxSubmitJobs = NONE\n"); - else if(qos->max_submit_jobs_pu != NO_VAL) + else if (qos->max_submit_jobs_pu != NO_VAL) printf(" MaxSubmitJobs = %u\n", qos->max_submit_jobs_pu); - if(qos->max_wall_pj == INFINITE) + if (qos->max_wall_pj == INFINITE) printf(" MaxWall = NONE\n"); - else if(qos->max_wall_pj != NO_VAL) { + else if (qos->max_wall_pj != NO_VAL) { char time_buf[32]; mins2time_str((time_t) qos->max_wall_pj, time_buf, sizeof(time_buf)); printf(" MaxWall = %s\n", time_buf); } - if(qos->preempt_list) { + if (qos->preempt_list) { char *temp_char = get_qos_complete_str(g_qos_list, qos->preempt_list); - if(temp_char) { + if (temp_char) { printf(" Preempt = %s\n", temp_char); xfree(temp_char); } } - if(qos->priority == INFINITE) + if (qos->priority == INFINITE) printf(" Priority = NONE\n"); - else if(qos->priority != NO_VAL) + else if (qos->priority != NO_VAL) printf(" Priority = %d\n", qos->priority); } @@ -1222,3 +1561,21 @@ extern int sort_coord_list(slurmdb_coord_rec_t *coord_a, return 0; } + +extern List sacctmgr_process_format_list(List format_list) +{ + List print_fields_list = list_create(destroy_print_field); + ListIterator itr = list_iterator_create(format_list); + print_field_t *field = NULL; + char *object = NULL; + + while((object = list_next(itr))) { + if(!(field = _get_print_field(object))) + exit(1); + + list_append(print_fields_list, field); + } + list_iterator_destroy(itr); + + return print_fields_list; +} diff --git a/src/sacctmgr/event_functions.c b/src/sacctmgr/event_functions.c index ce156aab572179a5928ef62ccea4861215ae86a5..08c6b27804c9e7a26c8865f70437b9b59ff7cfcf 100644 --- a/src/sacctmgr/event_functions.c +++ b/src/sacctmgr/event_functions.c @@ -471,22 +471,6 @@ extern int sacctmgr_list_event(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_CLUSTER, - PRINT_CLUSTER_NODES, - PRINT_CPUS, - PRINT_DURATION, - PRINT_END, - PRINT_EVENTRAW, - PRINT_EVENT, - PRINT_NODENAME, - PRINT_START, - PRINT_REASON, - PRINT_STATERAW, - PRINT_STATE, - PRINT_USER - }; - for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) diff --git a/src/sacctmgr/file_functions.c b/src/sacctmgr/file_functions.c index b836d2a9e6e30f73c25826d9b29095f1a1848b43..a3224e5444dd03a7a7de5231c0aaa9a38da79371 100644 --- a/src/sacctmgr/file_functions.c +++ b/src/sacctmgr/file_functions.c @@ -72,41 +72,6 @@ typedef struct { List wckey_list; } sacctmgr_file_opts_t; -enum { - PRINT_ACCOUNT, - PRINT_CLASSIFICATION, - PRINT_ADMIN, - PRINT_CLUSTER, - PRINT_COORDS, - PRINT_DACCT, - PRINT_DQOS, - PRINT_DWCKEY, - PRINT_DESC, - PRINT_FAIRSHARE, - PRINT_GRPCM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_ID, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_NAME, - PRINT_ORG, - PRINT_QOS, - PRINT_QOS_RAW, - PRINT_PID, - PRINT_PARENT, - PRINT_PART, - PRINT_USER, - PRINT_WCKEYS -}; - typedef enum { MOD_CLUSTER, MOD_ACCT, @@ -561,213 +526,6 @@ static sacctmgr_file_opts_t *_parse_options(char *options) return file_opts; } -static List _set_up_print_fields(List format_list) -{ - ListIterator itr = NULL; - List print_fields_list = NULL; - print_field_t *field = NULL; - char *object = NULL; - - print_fields_list = list_create(destroy_print_field); - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - int command_len = strlen(object); - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Account", object, MAX(command_len, 2))) { - field->type = PRINT_ACCOUNT; - field->name = xstrdup("Account"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("AdminLevel", object, - MAX(command_len, 2))) { - field->type = PRINT_ADMIN; - field->name = xstrdup("Admin"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Cluster", object, - MAX(command_len, 3))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Classification", object, - MAX(command_len, 3))) { - field->type = PRINT_CLASSIFICATION; - field->name = xstrdup("Classif"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Coordinators", object, - MAX(command_len, 2))) { - field->type = PRINT_COORDS; - field->name = xstrdup("Coord Accounts"); - field->len = 20; - field->print_routine = sacctmgr_print_coord_list; - } else if(!strncasecmp("DefaultAccount", object, - MAX(command_len, 8))) { - field->type = PRINT_DACCT; - field->name = xstrdup("Def Acct"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultQOS", object, - MAX(command_len, 8))) { - field->type = PRINT_DQOS; - field->name = xstrdup("Def QOS"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultWckey", object, - MAX(command_len, 8))) { - field->type = PRINT_DWCKEY; - field->name = xstrdup("Def WCKey"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Description", object, - MAX(command_len, 3))) { - field->type = PRINT_DESC; - field->name = xstrdup("Descr"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("FairShare", object, - MAX(command_len, 1)) - || !strncasecmp("Shares", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("FairShare"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpCPUMins", object, - MAX(command_len, 7))) { - field->type = PRINT_GRPCM; - field->name = xstrdup("GrpCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPUs", object, - MAX(command_len, 7))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpWall", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("ID", object, MAX(command_len, 1))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("Name", object, MAX(command_len, 1))) { - field->type = PRINT_NAME; - field->name = xstrdup("Name"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Organization", object, - MAX(command_len, 1))) { - field->type = PRINT_ORG; - field->name = xstrdup("Org"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("QOSRAWLevel", object, - MAX(command_len, 4))) { - field->type = PRINT_QOS_RAW; - field->name = xstrdup("QOS_RAW"); - field->len = 7; - field->print_routine = print_fields_char_list; - } else if(!strncasecmp("QOSLevel", object, - MAX(command_len, 1))) { - field->type = PRINT_QOS; - field->name = xstrdup("QOS"); - field->len = 9; - field->print_routine = sacctmgr_print_qos_list; - } else if(!strncasecmp("Parent", object, MAX(command_len, 4))) { - field->type = PRINT_PARENT; - field->name = xstrdup("Parent"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Partition", object, - MAX(command_len, 4))) { - field->type = PRINT_PART; - field->name = xstrdup("Partition"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("User", object, MAX(command_len, 1))) { - field->type = PRINT_USER; - field->name = xstrdup("User"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("WCKeys", object, - MAX(command_len, 2))) { - field->type = PRINT_WCKEYS; - field->name = xstrdup("WCKeys"); - field->len = 20; - field->print_routine = print_fields_char_list; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - xfree(field); - continue; - } - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); - return print_fields_list; -} - static int _print_out_assoc(List assoc_list, bool user, bool add) { List format_list = NULL; @@ -787,13 +545,13 @@ static int _print_out_assoc(List assoc_list, bool user, bool add) "User,Account"); else slurm_addto_char_list(format_list, - "Account,Parent"); + "Account,ParentName"); slurm_addto_char_list(format_list, - "F,GrpCPUM,GrpCPUs," + "Share,GrpCPUM,GrpCPUs," "GrpJ,GrpN,GrpS,GrpW,MaxCPUM,MaxCPUs," "MaxJ,MaxS,MaxN,MaxW,QOS,DefaultQOS"); - print_fields_list = _set_up_print_fields(format_list); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); print_fields_header(print_fields_list); @@ -803,7 +561,7 @@ static int _print_out_assoc(List assoc_list, bool user, bool add) while((assoc = list_next(itr))) { while((field = list_next(itr2))) { switch(field->type) { - case PRINT_ACCOUNT: + case PRINT_ACCT: field->print_routine(field, assoc->acct); break; @@ -877,7 +635,7 @@ static int _print_out_assoc(List assoc_list, bool user, bool add) field, assoc->max_wall_pj); break; - case PRINT_PARENT: + case PRINT_PNAME: field->print_routine(field, assoc->parent_acct); break; @@ -2635,7 +2393,7 @@ extern void load_sacctmgr_cfg_file (int argc, char *argv[]) slurm_addto_char_list(format_list, "Name,Description,Organization,QOS"); - print_fields_list = _set_up_print_fields(format_list); + print_fields_list = sacctmgr_process_format_list(format_list); list_flush(format_list); print_fields_header(print_fields_list); @@ -2686,7 +2444,7 @@ extern void load_sacctmgr_cfg_file (int argc, char *argv[]) slurm_addto_char_list(format_list, "Name,DefaultA,DefaultW,QOS,Admin,Coord"); - print_fields_list = _set_up_print_fields(format_list); + print_fields_list = sacctmgr_process_format_list(format_list); list_flush(format_list); print_fields_header(print_fields_list); diff --git a/src/sacctmgr/problem_functions.c b/src/sacctmgr/problem_functions.c index 0e2fca1b279246aad512948ec2a48ba6ea7a85ae..32762a41a904b4746d3e58351afcd6c78becd627 100644 --- a/src/sacctmgr/problem_functions.c +++ b/src/sacctmgr/problem_functions.c @@ -38,7 +38,6 @@ \*****************************************************************************/ #include "src/sacctmgr/sacctmgr.h" -static bool tree_display = 0; static int _set_cond(int *start, int argc, char *argv[], slurmdb_association_cond_t *assoc_cond, @@ -136,7 +135,6 @@ extern int sacctmgr_list_problem(int argc, char *argv[]) int i=0; ListIterator itr = NULL; ListIterator itr2 = NULL; - char *object = NULL; List tree_list = NULL; int field_count = 0; @@ -146,13 +144,6 @@ extern int sacctmgr_list_problem(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_ACCOUNT, - PRINT_CLUSTER, - PRINT_PROBLEM, - PRINT_USER, - }; - for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) @@ -166,65 +157,9 @@ extern int sacctmgr_list_problem(int argc, char *argv[]) list_destroy(format_list); return SLURM_ERROR; } else if(!list_count(format_list)) - slurm_addto_char_list(format_list, "C,A,U,Problem"); - - print_fields_list = list_create(destroy_print_field); - - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - char *tmp_char = NULL; - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); + slurm_addto_char_list(format_list, "Cl,Acct,User,Problem"); - if(!strncasecmp("Account", object, MAX(command_len, 1)) - || !strncasecmp("Acct", object, MAX(command_len, 4))) { - field->type = PRINT_ACCOUNT; - field->name = xstrdup("Account"); - if(tree_display) - field->len = -20; - else - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Cluster", object, - MAX(command_len, 1))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Problem", object, - MAX(command_len, 1))) { - field->type = PRINT_PROBLEM; - field->name = xstrdup("Problem"); - field->len = 40; - field->print_routine = print_fields_str; - } else if(!strncasecmp("User", object, MAX(command_len, 1))) { - field->type = PRINT_USER; - field->name = xstrdup("User"); - field->len = 10; - field->print_routine = print_fields_str; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - exit(1); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { @@ -254,7 +189,7 @@ extern int sacctmgr_list_problem(int argc, char *argv[]) int curr_inx = 1; while((field = list_next(itr2))) { switch(field->type) { - case PRINT_ACCOUNT: + case PRINT_ACCT: field->print_routine( field, assoc->acct, @@ -301,5 +236,6 @@ extern int sacctmgr_list_problem(int argc, char *argv[]) list_iterator_destroy(itr); list_destroy(assoc_list); list_destroy(print_fields_list); + tree_display = 0; return rc; } diff --git a/src/sacctmgr/qos_functions.c b/src/sacctmgr/qos_functions.c index 2d92a45dfde83b51fa0c82902116a93a19bb62cf..d1f133b8fa0f89c992e68b5601016c0fc41a1609 100644 --- a/src/sacctmgr/qos_functions.c +++ b/src/sacctmgr/qos_functions.c @@ -565,7 +565,6 @@ extern int sacctmgr_list_qos(int argc, char *argv[]) ListIterator itr = NULL; ListIterator itr2 = NULL; slurmdb_qos_rec_t *qos = NULL; - char *object; List qos_list = NULL; int field_count = 0; @@ -574,28 +573,6 @@ extern int sacctmgr_list_qos(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_DESC, - PRINT_ID, - PRINT_NAME, - PRINT_GRPCM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_PREE, - PRINT_PREEM, - PRINT_PRIO, - PRINT_UF, - }; - for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) @@ -609,162 +586,11 @@ extern int sacctmgr_list_qos(int argc, char *argv[]) list_destroy(format_list); return SLURM_ERROR; } else if(!list_count(format_list)) { - slurm_addto_char_list(format_list, "N,Prio,Preempt,PreemptM," + slurm_addto_char_list(format_list, "Name,Prio,Preempt,PreemptM," "GrpJ,GrpN,GrpS,MaxJ,MaxN,MaxS,MaxW"); } - print_fields_list = list_create(destroy_print_field); - - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - char *tmp_char = NULL; - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Description", object, MAX(command_len, 1))) { - field->type = PRINT_DESC; - field->name = xstrdup("Descr"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("GrpCPUMins", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPCM; - field->name = xstrdup("GrpCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPUs", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpWall", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("GrpWallRaw", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("ID", object, MAX(command_len, 1))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobsPerUser", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobsPerUser", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("MaxWallRaw", object, - MAX(command_len, 8))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Name", object, MAX(command_len, 1))) { - field->type = PRINT_NAME; - field->name = xstrdup("Name"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Preempt", object, - MAX(command_len, 7))) { - field->type = PRINT_PREE; - field->name = xstrdup("Preempt"); - field->len = 10; - field->print_routine = sacctmgr_print_qos_bitstr; - } else if(!strncasecmp("PreemptMode", object, - MAX(command_len, 8))) { - field->type = PRINT_PREEM; - field->name = xstrdup("PreemptMode"); - field->len = 11; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Priority", object, - MAX(command_len, 3))) { - field->type = PRINT_PRIO; - field->name = xstrdup("Priority"); - field->len = 10; - field->print_routine = print_fields_int; - } else if(!strncasecmp("UsageFactor", object, - MAX(command_len, 1))) { - field->type = PRINT_UF; - field->name = xstrdup("UsageFactor"); - field->len = 11; - field->print_routine = print_fields_double; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { diff --git a/src/sacctmgr/sacctmgr.c b/src/sacctmgr/sacctmgr.c index b07968e088ecf5a7cb0f3d8cc01119c24161fe7d..07a65ac58747e63e14a37bcda6a86f9df5505c42 100644 --- a/src/sacctmgr/sacctmgr.c +++ b/src/sacctmgr/sacctmgr.c @@ -58,6 +58,7 @@ int with_assoc_flag = 0; void *db_conn = NULL; uint32_t my_uid = 0; List g_qos_list = NULL; +bool tree_display = 0; static void _add_it (int argc, char *argv[]); static void _archive_it (int argc, char *argv[]); @@ -921,13 +922,12 @@ sacctmgr [<OPTION>] [<COMMAND>] \n\ MaxWall, QOS, ParentID, ParentName, \n\ Partition, RawQOS, RGT, User \n\ \n\ - Cluster - Classification, Cluster, ControlHost, \n\ - ControlPort, CpuCount, DefaultQOS, Fairshare, \n\ - Flags, GrpCPUMins, GrpCPUs, GrpJobs, \n\ + Cluster - Classification, Cluster, ClusterNodes, \n\ + ControlHost, ControlPort, CpuCount, DefaultQOS,\n\ + Fairshare, Flags, GrpCPUMins, GrpCPUs, GrpJobs,\n\ GrpNodes, GrpSubmitJob, MaxCPUMins, \n\ MaxCPUs, MaxJobs, MaxNodes, MaxSubmitJobs, \n\ - MaxWall, NodeCount, NodeNames, PluginIDSelect, \n\ - RPC \n\ + MaxWall, NodeCount, PluginIDSelect, RPC \n\ \n\ Event - Cluster, ClusterNodes, CPUs, Duration, End, \n\ Event, EventRaw, NodeName, Reason, Start, \n\ diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h index e77298d9d965775da0e3b144d33b34bfd49b6b65..4d055ba3e63d2b4859cc1902bbd7b68a4c692561 100644 --- a/src/sacctmgr/sacctmgr.h +++ b/src/sacctmgr/sacctmgr.h @@ -87,6 +87,94 @@ #define CKPT_WAIT 10 #define MAX_INPUT_FIELDS 128 +typedef enum { + /* COMMON */ + PRINT_ACCT, + PRINT_CLUSTER, + PRINT_COORDS, + PRINT_DESC, + PRINT_NAME, + PRINT_PART, + PRINT_QOS, + PRINT_QOS_RAW, + PRINT_USER, + PRINT_WCKEYS, + + /* LIMITS */ + PRINT_FAIRSHARE = 1000, + PRINT_GRPCM, + PRINT_GRPCRM, + PRINT_GRPC, + PRINT_GRPJ, + PRINT_GRPN, + PRINT_GRPS, + PRINT_GRPW, + PRINT_MAXCM, + PRINT_MAXCRM, + PRINT_MAXC, + PRINT_MAXJ, + PRINT_MAXN, + PRINT_MAXS, + PRINT_MAXW, + + /* ASSOCIATION */ + PRINT_DQOS = 2000, + PRINT_ID, + PRINT_LFT, + PRINT_PID, + PRINT_PNAME, + PRINT_RGT, + + /* CLUSTER */ + PRINT_CHOST = 3000, + PRINT_CPORT, + PRINT_CLASS, + PRINT_CPUS, + PRINT_FLAGS, + PRINT_NODECNT, + PRINT_CLUSTER_NODES, + PRINT_RPC_VERSION, + PRINT_SELECT, + + /* ACCT */ + PRINT_ORG = 4000, + + /* USER */ + PRINT_ADMIN = 5000, + PRINT_DACCT, + PRINT_DWCKEY, + + /* QOS */ + PRINT_PREE = 6000, + PRINT_PREEM, + PRINT_PRIO, + PRINT_UF, + + /* PROBLEM */ + PRINT_PROBLEM = 7000, + + /* TXN */ + PRINT_ACTIONRAW = 8000, + PRINT_ACTION, + PRINT_ACTOR, + PRINT_INFO, + PRINT_TS, + PRINT_WHERE, + + /* EVENT */ + PRINT_DURATION, + PRINT_END, + PRINT_EVENTRAW, + PRINT_EVENT, + PRINT_NODENAME, + PRINT_REASON, + PRINT_START, + PRINT_STATERAW, + PRINT_STATE, + +} sacctmgr_print_t; + + extern char *command_name; extern int exit_code; /* sacctmgr's exit code, =1 on any error at any time */ extern int exit_flag; /* program to terminate if =1 */ @@ -99,6 +187,7 @@ extern int readonly_flag; /* make it so you can only run list commands */ extern void *db_conn; extern uint32_t my_uid; extern List g_qos_list; +extern bool tree_display; extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond, char *type, char *value, @@ -106,6 +195,9 @@ extern int sacctmgr_set_association_cond(slurmdb_association_cond_t *assoc_cond, extern int sacctmgr_set_association_rec(slurmdb_association_rec_t *assoc_rec, char *type, char *value, int command_len, int option); +extern void sacctmgr_print_association_rec(slurmdb_association_rec_t *assoc, + print_field_t *field, List tree_list, + bool last); extern int sacctmgr_add_association(int argc, char *argv[]); extern int sacctmgr_add_user(int argc, char *argv[]); @@ -168,6 +260,7 @@ extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos); extern int sacctmgr_remove_assoc_usage(slurmdb_association_cond_t *assoc_cond); extern int sort_coord_list(slurmdb_coord_rec_t *coord_a, slurmdb_coord_rec_t *coord_b); +extern List sacctmgr_process_format_list(List format_list); /* you need to free the objects returned from these functions */ extern slurmdb_association_rec_t *sacctmgr_find_association(char *user, diff --git a/src/sacctmgr/txn_functions.c b/src/sacctmgr/txn_functions.c index 3795eedfa9fcf35b575675fc002e405c80a2413a..8d69f691ab6ad8238aaf6806f412a6cf30e8df9b 100644 --- a/src/sacctmgr/txn_functions.c +++ b/src/sacctmgr/txn_functions.c @@ -170,7 +170,6 @@ extern int sacctmgr_list_txn(int argc, char *argv[]) int i=0; ListIterator itr = NULL; ListIterator itr2 = NULL; - char *object = NULL; int field_count = 0; print_field_t *field = NULL; @@ -178,19 +177,6 @@ extern int sacctmgr_list_txn(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_ACCT, - PRINT_ACTIONRAW, - PRINT_ACTION, - PRINT_ACTOR, - PRINT_CLUSTER, - PRINT_ID, - PRINT_INFO, - PRINT_TS, - PRINT_USER, - PRINT_WHERE - }; - for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); if (!strncasecmp (argv[i], "Where", MAX(command_len, 5)) @@ -205,8 +191,6 @@ extern int sacctmgr_list_txn(int argc, char *argv[]) return SLURM_ERROR; } - print_fields_list = list_create(destroy_print_field); - if(!list_count(format_list)) { slurm_addto_char_list(format_list, "T,Action,Actor,Where,Info"); if(txn_cond->with_assoc_info) @@ -214,88 +198,7 @@ extern int sacctmgr_list_txn(int argc, char *argv[]) "User,Account,Cluster"); } - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - char *tmp_char = NULL; - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Accounts", object, MAX(command_len, 3))) { - field->type = PRINT_ACCT; - field->name = xstrdup("Accounts"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("ActionRaw", object, - MAX(command_len, 7))) { - field->type = PRINT_ACTIONRAW; - field->name = xstrdup("ActionRaw"); - field->len = 10; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Action", object, - MAX(command_len, 4))) { - field->type = PRINT_ACTION; - field->name = xstrdup("Action"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Actor", object, - MAX(command_len, 4))) { - field->type = PRINT_ACTOR; - field->name = xstrdup("Actor"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Clusters", object, - MAX(command_len, 4))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Clusters"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("ID", object, MAX(command_len, 2))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Info", object, MAX(command_len, 2))) { - field->type = PRINT_INFO; - field->name = xstrdup("Info"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("TimeStamp", object, - MAX(command_len, 1))) { - field->type = PRINT_TS; - field->name = xstrdup("Time"); - field->len = 19; - field->print_routine = print_fields_date; - } else if(!strncasecmp("Users", object, MAX(command_len, 4))) { - field->type = PRINT_USER; - field->name = xstrdup("Users"); - field->len = 20; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Where", object, MAX(command_len, 1))) { - field->type = PRINT_WHERE; - field->name = xstrdup("Where"); - field->len = 20; - field->print_routine = print_fields_str; - } else { - exit_code=1; - fprintf(stderr, " Unknown field '%s'\n", object); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c index e0b873f66810beb7c909e766e91c37ee7642366f..f95e427cf50a141193fc0657612502d1ef32b2e2 100644 --- a/src/sacctmgr/user_functions.c +++ b/src/sacctmgr/user_functions.c @@ -1133,8 +1133,6 @@ extern int sacctmgr_list_user(int argc, char *argv[]) ListIterator itr2 = NULL; slurmdb_user_rec_t *user = NULL; slurmdb_association_rec_t *assoc = NULL; - char *object; - char *tmp_char = NULL; print_field_t *field = NULL; int field_count = 0; @@ -1142,38 +1140,6 @@ extern int sacctmgr_list_user(int argc, char *argv[]) List format_list = list_create(slurm_destroy_char); List print_fields_list; /* types are of print_field_t */ - enum { - PRINT_ACCOUNT, - PRINT_ADMIN, - PRINT_CLUSTER, - PRINT_COORDS, - PRINT_DQOS, - PRINT_DACCT, - PRINT_DWCKEY, - PRINT_FAIRSHARE, - PRINT_GRPCM, - PRINT_GRPCRM, - PRINT_GRPC, - PRINT_GRPJ, - PRINT_GRPN, - PRINT_GRPS, - PRINT_GRPW, - PRINT_ID, - PRINT_MAXC, - PRINT_MAXCM, - PRINT_MAXCRM, - PRINT_MAXJ, - PRINT_MAXN, - PRINT_MAXS, - PRINT_MAXW, - PRINT_QOS, - PRINT_QOS_RAW, - PRINT_PID, - PRINT_PNAME, - PRINT_PART, - PRINT_USER - }; - user_cond->with_assocs = with_assoc_flag; for (i=0; i<argc; i++) { @@ -1199,7 +1165,7 @@ extern int sacctmgr_list_user(int argc, char *argv[]) slurm_addto_char_list(format_list, "U,DefaultA,Ad"); if(user_cond->with_assocs) slurm_addto_char_list(format_list, - "Cl,Ac,Part,Shares," + "Cl,Ac,Part,Share," "MaxJ,MaxN,MaxCPUs,MaxS,MaxW," "MaxCPUMins,QOS,DefaultQOS"); if(user_cond->with_coords) @@ -1217,208 +1183,7 @@ extern int sacctmgr_list_user(int argc, char *argv[]) } } - print_fields_list = list_create(destroy_print_field); - - itr = list_iterator_create(format_list); - while((object = list_next(itr))) { - int command_len = 0; - int newlen = 0; - - if((tmp_char = strstr(object, "\%"))) { - newlen = atoi(tmp_char+1); - tmp_char[0] = '\0'; - } - - command_len = strlen(object); - - field = xmalloc(sizeof(print_field_t)); - if(!strncasecmp("Account", object, MAX(command_len, 2)) - || !strncasecmp("Acct", object, MAX(command_len, 4))) { - field->type = PRINT_ACCOUNT; - field->name = xstrdup("Account"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("AdminLevel", object, - MAX(command_len, 2))) { - field->type = PRINT_ADMIN; - field->name = xstrdup("Admin"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Cluster", object, - MAX(command_len, 2))) { - field->type = PRINT_CLUSTER; - field->name = xstrdup("Cluster"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Coordinators", object, - MAX(command_len, 2))) { - field->type = PRINT_COORDS; - field->name = xstrdup("Coord Accounts"); - field->len = 20; - field->print_routine = sacctmgr_print_coord_list; - } else if(!strncasecmp("DefaultAccount", object, - MAX(command_len, 8))) { - field->type = PRINT_DACCT; - field->name = xstrdup("Def Acct"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultWCKey", object, - MAX(command_len, 8))) { - field->type = PRINT_DWCKEY; - field->name = xstrdup("Def WCKey"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("DefaultQOS", object, - MAX(command_len, 8))) { - field->type = PRINT_DQOS; - field->name = xstrdup("Def QOS"); - field->len = 9; - field->print_routine = print_fields_str; - } else if(!strncasecmp("FairShare", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("FairShare"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpCPUMins", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPCM; - field->name = xstrdup("GrpCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPURunMins", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPCRM; - field->name = xstrdup("GrpCPURunMins"); - field->len = 13; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("GrpCPUs", object, - MAX(command_len, 8))) { - field->type = PRINT_GRPC; - field->name = xstrdup("GrpCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPJ; - field->name = xstrdup("GrpJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpNodes", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPN; - field->name = xstrdup("GrpNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPS; - field->name = xstrdup("GrpSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("GrpWall", object, - MAX(command_len, 4))) { - field->type = PRINT_GRPW; - field->name = xstrdup("GrpWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("ID", object, MAX(command_len, 1))) { - field->type = PRINT_ID; - field->name = xstrdup("ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxCPUMinsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCM; - field->name = xstrdup("MaxCPUMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPURunMins", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXCRM; - field->name = xstrdup("MaxCPURunMins"); - field->len = 11; - field->print_routine = print_fields_uint64; - } else if(!strncasecmp("MaxCPUsPerJob", object, - MAX(command_len, 7))) { - field->type = PRINT_MAXC; - field->name = xstrdup("MaxCPUs"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXJ; - field->name = xstrdup("MaxJobs"); - field->len = 7; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxNodesPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXN; - field->name = xstrdup("MaxNodes"); - field->len = 8; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxSubmitJobs", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXS; - field->name = xstrdup("MaxSubmit"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("MaxWallDurationPerJob", object, - MAX(command_len, 4))) { - field->type = PRINT_MAXW; - field->name = xstrdup("MaxWall"); - field->len = 11; - field->print_routine = print_fields_time; - } else if(!strncasecmp("QOSRAWLevel", object, - MAX(command_len, 4))) { - field->type = PRINT_QOS_RAW; - field->name = xstrdup("QOS_RAW"); - field->len = 10; - field->print_routine = print_fields_char_list; - } else if(!strncasecmp("QOSLevel", object, - MAX(command_len, 1))) { - field->type = PRINT_QOS; - field->name = xstrdup("QOS"); - field->len = 20; - field->print_routine = sacctmgr_print_qos_list; - } else if(!strncasecmp("ParentID", object, - MAX(command_len, 7))) { - field->type = PRINT_PID; - field->name = xstrdup("Par ID"); - field->len = 6; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("Partition", object, - MAX(command_len, 4))) { - field->type = PRINT_PART; - field->name = xstrdup("Partition"); - field->len = 10; - field->print_routine = print_fields_str; - } else if(!strncasecmp("Shares", object, - MAX(command_len, 1))) { - field->type = PRINT_FAIRSHARE; - field->name = xstrdup("Shares"); - field->len = 9; - field->print_routine = print_fields_uint; - } else if(!strncasecmp("User", object, MAX(command_len, 1)) - || !strncasecmp("Name", object, - MAX(command_len, 2))) { - field->type = PRINT_USER; - field->name = xstrdup("User"); - field->len = 10; - field->print_routine = print_fields_str; - } else { - exit_code=1; - fprintf(stderr, "Unknown field '%s'\n", object); - xfree(field); - continue; - } - - if(newlen) - field->len = newlen; - - list_append(print_fields_list, field); - } - list_iterator_destroy(itr); + print_fields_list = sacctmgr_process_format_list(format_list); list_destroy(format_list); if(exit_code) { @@ -1452,13 +1217,6 @@ extern int sacctmgr_list_user(int argc, char *argv[]) int curr_inx = 1; while((field = list_next(itr2))) { switch(field->type) { - case PRINT_ACCOUNT: - field->print_routine( - field, - assoc->acct, - (curr_inx == - field_count)); - break; case PRINT_ADMIN: field->print_routine( field, @@ -1468,13 +1226,6 @@ extern int sacctmgr_list_user(int argc, char *argv[]) (curr_inx == field_count)); break; - case PRINT_CLUSTER: - field->print_routine( - field, - assoc->cluster, - (curr_inx == - field_count)); - break; case PRINT_COORDS: field->print_routine( field, @@ -1500,191 +1251,9 @@ extern int sacctmgr_list_user(int argc, char *argv[]) (curr_inx == field_count)); break; - case PRINT_DQOS: - if(!g_qos_list) - g_qos_list = - acct_storage_g_get_qos( - db_conn, - my_uid, - NULL); - tmp_char = slurmdb_qos_str( - g_qos_list, - assoc->def_qos_id); - field->print_routine( - field, - tmp_char, - (curr_inx == - field_count)); - break; - case PRINT_FAIRSHARE: - field->print_routine( - field, - assoc->shares_raw, - (curr_inx == - field_count)); - break; - case PRINT_GRPCM: - field->print_routine( - field, - assoc->grp_cpu_mins, - (curr_inx == - field_count)); - break; - case PRINT_GRPCRM: - field->print_routine( - field, - assoc->grp_cpu_run_mins, - (curr_inx == - field_count)); - break; - case PRINT_GRPC: - field->print_routine( - field, - assoc->grp_cpus, - (curr_inx == - field_count)); - break; - case PRINT_GRPJ: - field->print_routine( - field, - assoc->grp_jobs, - (curr_inx - == field_count)); - break; - case PRINT_GRPN: - field->print_routine( - field, - assoc->grp_nodes, - (curr_inx - == field_count)); - break; - case PRINT_GRPS: - field->print_routine( - field, - assoc->grp_submit_jobs, - (curr_inx - == field_count)); - break; - case PRINT_GRPW: - field->print_routine( - field, - assoc->grp_wall, - (curr_inx - == field_count)); - break; - case PRINT_ID: - field->print_routine( - field, - assoc->id, - (curr_inx == - field_count)); - break; - case PRINT_MAXCM: - field->print_routine( - field, - assoc-> - max_cpu_mins_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXCRM: - field->print_routine( - field, - assoc-> - max_cpu_run_mins, - (curr_inx == - field_count)); - break; - case PRINT_MAXC: - field->print_routine( - field, - assoc->max_cpus_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXJ: - field->print_routine( - field, - assoc->max_jobs, - (curr_inx == - field_count)); - break; - case PRINT_MAXN: - field->print_routine( - field, - assoc-> - max_nodes_pj, - (curr_inx == - field_count)); - break; - case PRINT_MAXS: - field->print_routine( - field, - assoc->max_submit_jobs, - (curr_inx == - field_count)); - break; - case PRINT_MAXW: - field->print_routine( - field, - assoc-> - max_wall_pj, - (curr_inx == - field_count)); - break; - case PRINT_QOS: - if(!g_qos_list) { - g_qos_list = - acct_storage_g_get_qos( - db_conn, - my_uid, - NULL); - } - field->print_routine( - field, - g_qos_list, - assoc->qos_list, - (curr_inx == - field_count)); - break; - case PRINT_QOS_RAW: - field->print_routine( - field, - NULL, - (curr_inx == - field_count)); - break; - case PRINT_PID: - field->print_routine( - field, - assoc->parent_id, - (curr_inx == - field_count)); - break; - case PRINT_PNAME: - field->print_routine( - field, - assoc->parent_acct, - (curr_inx == - field_count)); - break; - case PRINT_PART: - field->print_routine( - field, - assoc->partition, - (curr_inx == - field_count)); - break; - case PRINT_USER: - field->print_routine( - field, - user->name, - (curr_inx == - field_count)); - break; default: - field->print_routine( - field, NULL, + sacctmgr_print_association_rec( + assoc, field, NULL, (curr_inx == field_count)); break; @@ -1699,33 +1268,6 @@ extern int sacctmgr_list_user(int argc, char *argv[]) int curr_inx = 1; while((field = list_next(itr2))) { switch(field->type) { - /* All the association stuff */ - case PRINT_ACCOUNT: - case PRINT_CLUSTER: - case PRINT_DQOS: - case PRINT_FAIRSHARE: - case PRINT_GRPCM: - case PRINT_GRPC: - case PRINT_GRPJ: - case PRINT_GRPN: - case PRINT_GRPS: - case PRINT_GRPW: - case PRINT_ID: - case PRINT_MAXCM: - case PRINT_MAXC: - case PRINT_MAXJ: - case PRINT_MAXN: - case PRINT_MAXS: - case PRINT_MAXW: - case PRINT_QOS_RAW: - case PRINT_PID: - case PRINT_PNAME: - case PRINT_PART: - field->print_routine( - field, - NULL, - (curr_inx == field_count)); - break; case PRINT_QOS: field->print_routine( field, NULL,