char *MAcctShow( mgcred_t *A, /* I */ char *Buf, /* O */ long *BufSize, long Mode) { static char Line[MAX_MLINE]; char FlagLine[MAX_MLINE]; char QALLine[MAX_MLINE]; char QALChar; char ALLine[MAX_MLINE]; char *ptr; const char *FName = "MAcctShow"; DBG(3, fUI) DPrint("%s(%s,Buf,BufSize,%ld)\n", FName, (A != NULL) ? A->Name : "NULL", Mode); ptr = (Buf != NULL) ? Buf : Line; if (A == NULL) { /* build header */ /* NAME PRI FLAG QDEF QLST * PLST TRG LIMITS */ sprintf(ptr, "%-12s %8s %12s %12s %12s%s %20s %6s %7s\n\n", "Name", "Priority", "Flags", "QDef", "QOSList", "*", "PartitionList", "Target", "Limits"); } else { /* build job info line */ MUBMToString(A->F.JobFlags, MJobFlags, ':', FlagLine, NONE); MUStrCpy(QALLine, MQOSBMToString(A->F.QAL), sizeof(QALLine)); if (A->F.QALType == qalAND) QALChar = '&'; else if (A->F.QALType == qalONLY) QALChar = '^'; else QALChar = ' '; MUStrCpy(ALLine, MCredShowAttrs(&A->L.AP, A->L.IP, NULL, NULL, NULL, &A->F, 0, (1 << mcsLimits)), sizeof(ALLine)); /* NAME PRIO FLAG QDEF QLST * PLST FSTARG LIMITS */ sprintf( ptr, "%-12s %8ld %12s %12s %12s%c %20s %6.2lf %7s\n", A->Name, A->F.Priority, FlagLine, ((mqos_t *)A->F.QDef) != NULL ? ((mqos_t *)A->F.QDef)->Name : NONE, (QALLine[0] != '\0') ? QALLine : NONE, QALChar, (A->F.PAL[0] == 0) ? NONE : MUListAttrs(ePartition, A->F.PAL[0]), A->F.FSTarget, (ALLine[0] != '\0') ? ALLine : NONE); } /* END else (A == NULL) */ return (ptr); } /* END MAcctShow() */
char *MGroupShow( mgcred_t *G, /* I */ char *SBuffer, /* O (optional) */ long *SBufSize, /* I */ long Mode) /* I */ { static char Line[MAX_MLINE]; char FlagLine[MAX_MLINE]; char QALLine[MAX_MLINE]; char QALChar; char GLLine[MAX_MLINE]; char *Head; char *BPtr; int BSpace; const char *FName = "MGroupShow"; DBG(3,fUI) DPrint("%s(%s,Buf,BufSize,%ld)\n", FName, (G != NULL) ? G->Name : "NULL", Mode); if (SBuffer != NULL) { BPtr = SBuffer; BSpace = *SBufSize; } else { BPtr = Line; BSpace = sizeof(Line); } BPtr[0] = '\0'; Head = BPtr; if (G == NULL) { /* build header */ /* NAME PRI FLAG QDEF QLST * PLST TRG LIMITS */ MUSNPrintF(&BPtr,&BSpace,"%-12s %8s %12s %12s %12s%s %20s %6s %7s\n\n", "Name", "Priority", "Flags", "QDef", "QOSList", "*", "PartitionList", "Target", "Limits"); } else { /* build job info line */ MUBMToString(G->F.JobFlags,MJobFlags,':',FlagLine,NONE); MUStrCpy(QALLine,MQOSBMToString(G->F.QAL),sizeof(QALLine)); if (G->F.QALType == qalAND) QALChar = '&'; else if (G->F.QALType == qalONLY) QALChar = '^'; else QALChar = ' '; MUStrCpy(GLLine, MCredShowAttrs(&G->L.AP,G->L.IP,NULL,NULL,NULL,&G->F,0,(1 << mcsLimits)),sizeof(GLLine)); /* NAME PRIO FLAG QDEF QLST * PLST FSTARG LIMITS */ MUSNPrintF(&BPtr,&BSpace,"%-12s %8ld %12s %12s %12s%c %20s %6.2lf %7s\n", G->Name, G->F.Priority, FlagLine, ((mqos_t *)G->F.QDef) != NULL ? ((mqos_t *)G->F.QDef)->Name : NONE, (QALLine[0] != '\0') ? QALLine : NONE, QALChar, (G->F.PAL[0] == 0) ? NONE : MUListAttrs(ePartition,G->F.PAL[0]), G->F.FSTarget, (GLLine[0] != '\0') ? GLLine : NONE); /* add group attributes */ if (G->L.APC != NULL) { int cindex; for (cindex = 0; cindex < MAX_MCLASS; cindex++) { if (G->L.APC[cindex].SLimit[mptMaxProc][0] > 0) { MUSNPrintF(&BPtr,&BSpace," MAXPROC[CLASS:%s]=%d,%d\n", MClass[cindex].Name, G->L.APC[cindex].SLimit[mptMaxProc][0], G->L.APC[cindex].HLimit[mptMaxProc][0]); } } /* END for (cindex) */ } /* END if (G->L.APC != NULL) */ if (G->L.APQ != NULL) { int cindex; for (cindex = 0; cindex < MAX_MQOS; cindex++) { if (G->L.APQ[cindex].SLimit[mptMaxProc][0] > 0) { MUSNPrintF(&BPtr,&BSpace," MAXPROC[QOS:%s]=%d,%d\n", MQOS[cindex].Name, G->L.APQ[cindex].SLimit[mptMaxProc][0], G->L.APQ[cindex].HLimit[mptMaxProc][0]); } } /* END for (cindex) */ } /* END if (G->L.APQ != NULL) */ if (Mode & (1 << mcmVerbose)) { char tmpLine[MAX_MLINE]; /* display additional attributes */ MCredConfigLShow( (void *)G, mxoGroup, TRUE, -1, tmpLine); if (tmpLine[0] != '\0') { MUSNPrintF(&BPtr,&BSpace," %s\n", tmpLine); } } /* END if (Mode == Verbose) */ } /* END else (G == NULL) */ return(Head); } /* END MGroupShow() */
int MClassShow( mclass_t *CP, /* I */ char *SBuffer, /* O */ long *SBufSize, /* O */ int DMode) /* I */ { int cindex; int aindex; char tmpLine[MAX_MLINE]; char tmpQALString[MAX_MLINE]; char tmpLString[MAX_MLINE]; int findex; char QALChar; mclass_t *C; int ClAList[] = { mclaOCNode, mclaOCDProcFactor, mclaDefReqFeature, mclaMaxProcPerNode, mclaWCOverrun, -1 }; int CAList[] = { mcaMaxProcPerUser, mcaMaxNodePerUser, mcaDefWCLimit, mcaMaxWCLimit, mcaMaxNodePerJob, mcaMaxProcPerJob, mcaMaxJobPerUser, -1 }; char *BPtr; int BSpace; const char *FName = "MClassShow"; DBG(3,fUI) DPrint("%s(%s,SBuffer,SBufSize,%d)\n", FName, (CP != NULL) ? CP->Name : "NULL", DMode); if (SBuffer == NULL) { return(FAILURE); } BPtr = SBuffer; BSpace = *SBufSize; MUSNPrintF(&BPtr,&BSpace,"Class/Queue Status\n\n"); /* NAME PRI FLAG QDEF QLST M PLST FST Limits */ MUSNPrintF(&BPtr,&BSpace,"%-14s %-8s %-12s %-12s %12s%c %-20s %-6s %s\n\n", "Name", "Priority", "Flags", "QDef", "QOSList", '*', "PartitionList", "Target", "Limits"); for (cindex = 0;cindex < MAX_MCLASS;cindex++) { C = &MClass[cindex]; DBG(8,fUI) DPrint("INFO: checking MClass[%02d]: %s\n", cindex, C->Name); if (C->Name[0] == '\0') continue; if (!strcmp(C->Name,NONE) || !strcmp(C->Name,ALL)) continue; if ((CP != NULL) && (strcmp(CP->Name,NONE) != 0) && (C != CP)) continue; tmpLine[0] = '\0'; for (findex = 0;MJobFlags[findex] != NULL;findex++) { if (!(C->F.JobFlags & (1 << findex))) continue; if (tmpLine[0] != '\0') strcat(tmpLine,":"); strcat(tmpLine,MJobFlags[findex]); } /* END for (findex) */ if (C->F.QALType == qalAND) QALChar = '&'; else if (C->F.QALType == qalONLY) QALChar = '^'; else QALChar = ' '; MUStrCpy(tmpQALString,MQOSBMToString(C->F.QAL),sizeof(tmpQALString)); MUStrCpy(tmpLString, MCredShowAttrs( &C->L.AP, C->L.IP, NULL, NULL, NULL, &C->F, 0, (1 << mcsLimits) | (1 << mcsUsage)), sizeof(tmpLString)); /* NAME PRIO FLAG QDEF QLST M PLST FSTARG Limits */ MUSNPrintF(&BPtr,&BSpace,"%-14s %8ld %-12s %-12s %12s%c %-20s %5.2lf %7s\n", C->Name, C->F.Priority, (tmpLine[0] != '\0') ? tmpLine : NONE, ((mqos_t *)C->F.QDef) != NULL ? ((mqos_t *)C->F.QDef)->Name : NONE, (tmpQALString[0] != '\0') ? tmpQALString : NONE, QALChar, (C->F.PAL[0] == 0) ? NONE : MUListAttrs(ePartition,C->F.PAL[0]), C->F.FSTarget, (tmpLString[0] != '\0') ? tmpLString : NONE); /* list extended class attributes */ tmpLine[0] = '\0'; for (aindex = 0;ClAList[aindex] != -1;aindex++) { if ((MClassAToString(C,ClAList[aindex],tmpLString,mdfString,0) == SUCCESS) && (tmpLString[0] != '\0') && strcmp(tmpLString,NONE)) { sprintf(&tmpLine[strlen(tmpLine)]," %s=%s", MClassAttr[ClAList[aindex]], tmpLString); } } /* END for (aindex) */ /* list extended cred attributes */ for (aindex = 0;CAList[aindex] != -1;aindex++) { if ((MCredAToString((void *)C,mxoClass,CAList[aindex],tmpLString,mdfString) == SUCCESS) && (tmpLString[0] != '\0')) { sprintf(&tmpLine[strlen(tmpLine)]," %s=%s", MCredAttr[CAList[aindex]], tmpLString); } } /* END for (aindex) */ if (tmpLine[0] != '\0') { MUStrNCat(&BPtr,&BSpace,tmpLine); MUStrNCat(&BPtr,&BSpace,"\n"); } } /* END for (cindex) */ return(SUCCESS); } /* END MClassShow() */