static int pretty_print_vpids(orte_job_t *job) { int len_o_proc_name = 0, len_proc_name = 0, len_rank = 0, len_pid = 0, len_state = 0, len_node = 0, len_ckpt_s = 0, len_ckpt_r = 0, len_ckpt_l = 0; int i, line_len; orte_vpid_t v; orte_proc_t *vpid; orte_app_context_t *app; char *o_proc_name; #if OPAL_ENABLE_FT_CR == 1 char *state_str = NULL; #endif /* * Caculate segment lengths */ len_o_proc_name = (int)strlen("ORTE Name"); len_proc_name = (int)strlen("Process Name"); len_rank = (int)strlen("Local Rank"); len_pid = 6; len_state = 0; len_node = 0; #if OPAL_ENABLE_FT_CR == 1 len_ckpt_s = strlen("Ckpt State"); len_ckpt_r = strlen("Ckpt Ref"); len_ckpt_l = strlen("Ckpt Loc"); #else len_ckpt_s = -3; len_ckpt_r = -3; len_ckpt_l = -3; #endif for(v=0; v < job->num_procs; v++) { char *rankstr; vpid = (orte_proc_t*)job->procs->addr[v]; /* * Find my app context */ if( 0 >= (int)job->num_apps ) { if( 0 == vpid->name.vpid ) { if( (int)strlen("orterun") > len_proc_name) len_proc_name = strlen("orterun"); } else { if( (int)strlen("orted") > len_proc_name) len_proc_name = strlen("orted"); } } for( i = 0; i < (int)job->num_apps; ++i) { app = (orte_app_context_t*)job->apps->addr[i]; if( app->idx == vpid->app_idx ) { if( (int)strlen(app->app) > len_proc_name) len_proc_name = strlen(app->app); break; } } o_proc_name = orte_util_print_name_args(&vpid->name); if ((int)strlen(o_proc_name) > len_o_proc_name) len_o_proc_name = strlen(o_proc_name); asprintf(&rankstr, "%u", (uint)vpid->local_rank); if ((int)strlen(rankstr) > len_rank) len_rank = strlen(rankstr); free(rankstr); if( NULL != vpid->nodename && (int)strlen(vpid->nodename) > len_node) { len_node = strlen(vpid->nodename); } else if ((int)strlen("Unknown") > len_node) { len_node = strlen("Unknown"); } if( (int)strlen(orte_proc_state_to_str(vpid->state)) > len_state) len_state = strlen(orte_proc_state_to_str(vpid->state)); #if OPAL_ENABLE_FT_CR == 1 orte_snapc_ckpt_state_str(&state_str, vpid->ckpt_state); if( (int)strlen(state_str) > len_ckpt_s) len_ckpt_s = strlen(state_str); if( NULL != vpid->ckpt_snapshot_ref && (int)strlen(vpid->ckpt_snapshot_ref) > len_ckpt_r) len_ckpt_r = strlen(vpid->ckpt_snapshot_ref); if( NULL != vpid->ckpt_snapshot_loc && (int)strlen(vpid->ckpt_snapshot_loc) > len_ckpt_l) len_ckpt_l = strlen(vpid->ckpt_snapshot_loc); #endif } line_len = (len_o_proc_name + 3 + len_proc_name + 3 + len_rank + 3 + len_pid + 3 + len_state + 3 + len_node + 3 + len_ckpt_s + 3 + len_ckpt_r + 3 + len_ckpt_l) + 2; /* * Print Header */ printf("\t"); printf("%*s | ", len_proc_name , "Process Name"); printf("%*s | ", len_o_proc_name , "ORTE Name"); printf("%*s | ", len_rank , "Local Rank"); printf("%*s | ", len_pid , "PID"); printf("%*s | ", len_node , "Node"); printf("%*s | ", len_state , "State"); #if OPAL_ENABLE_FT_CR == 1 printf("%*s | ", len_ckpt_s , "Ckpt State"); printf("%*s | ", len_ckpt_r , "Ckpt Ref"); printf("%*s |", len_ckpt_l , "Ckpt Loc"); #endif printf("\n"); printf("\t"); pretty_print_dashed_line(line_len); /* * Print Info */ for(v=0; v < job->num_procs; v++) { vpid = (orte_proc_t*)job->procs->addr[v]; printf("\t"); if( 0 >= (int)job->num_apps ) { if( 0 == vpid->name.vpid ) { printf("%*s | ", len_proc_name, "orterun"); } else { printf("%*s | ", len_proc_name, "orted"); } } for( i = 0; i < (int)job->num_apps; ++i) { app = (orte_app_context_t*)job->apps->addr[i]; if( app->idx == vpid->app_idx ) { printf("%*s | ", len_proc_name, app->app); break; } } o_proc_name = orte_util_print_name_args(&vpid->name); printf("%*s | ", len_o_proc_name, o_proc_name); printf("%*u | ", len_rank , (uint)vpid->local_rank); printf("%*d | ", len_pid , vpid->pid); printf("%*s | ", len_node , (NULL == vpid->nodename) ? "Unknown" : vpid->nodename); printf("%*s | ", len_state , orte_proc_state_to_str(vpid->state)); #if OPAL_ENABLE_FT_CR == 1 printf("%*s | ", len_ckpt_s, state_str); printf("%*s | ", len_ckpt_r, (NULL == vpid->ckpt_snapshot_ref ? "" : vpid->ckpt_snapshot_ref)); printf("%*s |", len_ckpt_l, (NULL == vpid->ckpt_snapshot_loc ? "" : vpid->ckpt_snapshot_loc)); #endif printf("\n"); } return ORTE_SUCCESS; }
static int pretty_print_vpids(orte_job_t *job) { int len_o_proc_name = 0, len_proc_name = 0, len_rank = 0, len_pid = 0, len_state = 0, len_node = 0, len_ckpt_s = 0, len_ckpt_r = 0, len_ckpt_l = 0; int i, line_len; orte_vpid_t v; orte_proc_t *vpid; orte_app_context_t *app; char *o_proc_name; char **nodename = NULL; if (0 == job->num_procs) { return ORTE_SUCCESS; } /* * Caculate segment lengths */ len_o_proc_name = (int)strlen("ORTE Name"); len_proc_name = (int)strlen("Process Name"); len_rank = (int)strlen("Local Rank"); len_pid = 6; len_state = 0; len_node = 0; len_ckpt_s = -3; len_ckpt_r = -3; len_ckpt_l = -3; nodename = (char **) malloc(job->num_procs * sizeof(char *)); for(v=0; v < job->num_procs; v++) { char *rankstr; vpid = (orte_proc_t*)job->procs->addr[v]; /* * Find my app context */ if( 0 >= (int)job->num_apps ) { if( 0 == vpid->name.vpid ) { if( (int)strlen("orterun") > len_proc_name) len_proc_name = strlen("orterun"); } else { if( (int)strlen("orted") > len_proc_name) len_proc_name = strlen("orted"); } } for( i = 0; i < (int)job->num_apps; ++i) { app = (orte_app_context_t*)job->apps->addr[i]; if( app->idx == vpid->app_idx ) { if( (int)strlen(app->app) > len_proc_name) len_proc_name = strlen(app->app); break; } } o_proc_name = orte_util_print_name_args(&vpid->name); if ((int)strlen(o_proc_name) > len_o_proc_name) len_o_proc_name = strlen(o_proc_name); asprintf(&rankstr, "%u", (uint)vpid->local_rank); if ((int)strlen(rankstr) > len_rank) len_rank = strlen(rankstr); free(rankstr); nodename[v] = NULL; if( orte_get_attribute(&vpid->attributes, ORTE_PROC_NODENAME, (void**)&nodename[v], OPAL_STRING) && (int)strlen(nodename[v]) > len_node) { len_node = strlen(nodename[v]); } else if ((int)strlen("Unknown") > len_node) { len_node = strlen("Unknown"); } if( (int)strlen(orte_proc_state_to_str(vpid->state)) > len_state) len_state = strlen(orte_proc_state_to_str(vpid->state)); } line_len = (len_o_proc_name + 3 + len_proc_name + 3 + len_rank + 3 + len_pid + 3 + len_state + 3 + len_node + 3 + len_ckpt_s + 3 + len_ckpt_r + 3 + len_ckpt_l) + 2; /* * Print Header */ printf("\t"); printf("%*s | ", len_proc_name , "Process Name"); printf("%*s | ", len_o_proc_name , "ORTE Name"); printf("%*s | ", len_rank , "Local Rank"); printf("%*s | ", len_pid , "PID"); printf("%*s | ", len_node , "Node"); printf("%*s | ", len_state , "State"); printf("\n"); printf("\t"); pretty_print_dashed_line(line_len); /* * Print Info */ for(v=0; v < job->num_procs; v++) { vpid = (orte_proc_t*)job->procs->addr[v]; printf("\t"); if( 0 >= (int)job->num_apps ) { if( 0 == vpid->name.vpid ) { printf("%*s | ", len_proc_name, "orterun"); } else { printf("%*s | ", len_proc_name, "orted"); } } for( i = 0; i < (int)job->num_apps; ++i) { app = (orte_app_context_t*)job->apps->addr[i]; if( app->idx == vpid->app_idx ) { printf("%*s | ", len_proc_name, app->app); break; } } o_proc_name = orte_util_print_name_args(&vpid->name); printf("%*s | ", len_o_proc_name, o_proc_name); printf("%*u | ", len_rank , (uint)vpid->local_rank); printf("%*d | ", len_pid , vpid->pid); printf("%*s | ", len_node , (NULL == nodename[v]) ? "Unknown" : nodename[v]); printf("%*s | ", len_state , orte_proc_state_to_str(vpid->state)); if (NULL != nodename[v]) { free(nodename[v]); } printf("\n"); } if (NULL != nodename) { free(nodename); } return ORTE_SUCCESS; }