P R O G R A M S A L A N L C =========================== C C C COMPONENT: SALANL C --------- C C DATE: 23-OCT-80 C ---- C C AUTHOR: GR JOHNSON C ------ BATTELLE NORTHWEST C P O BOX 999 C RICHLAND WA 99352 C C SOURCE: FORTRAN IV-PLUS C ------ C C C C DESCRIPTION: C ----------- C C C I N S T A L L A T I O N C ======================= C C C C COMPILE: C ------- C C PDS> FORTRAN/LIST:[211,201]SALANL/OBJ:[11,201]SALANL [311,201]SALANL C C C TASK BUILD: C ---------- C C PDS> LINK/OPTIONS/TASK:[11,1]SALANL/MAP:[111,201]SALANL - C > [11,201]SALANL+[1,1]COPIOUS/LIB C OPTION? TASK=$$$SAL C OPTION? UIC=[1,1] C OPTION? ACTFIL=3 C OPTION? LIBR=SYSRES:RO C OPTION? // C C C S A L R E C O R D D E F I N I T I O N S C =========================================== C C C C RECORD BUFFER C ------------- C BYTE SALBF("00:"77) ! RECORD BUFFER C C INTEGER SALRT ! RECORD TYPE C EQUIVALENCE (SALRT,SALBF("00)) C C C C SYSTEM STATISTICS (SST) RECORD DEFINITION C ----------------------------------------- C INTEGER SSTIM(8) ! SYSTEM CLOCK INTEGER*4 SSSET ! SYSTEM ELAPSED TIME INTEGER*4 SSSTS(5) ! SYSTEM TIMES INTEGER SSMEM ! MEMORY SIZE INTEGER SSTPS ! TIMESHARING PARTITION SIZE INTEGER SSTPA ! TIMESHARING PARTITION USED INTEGER SSNOD ! NODE POOL FREE NODES INTEGER SSHOL ! NODE POOL LARGEST HOLE INTEGER SSSFS ! SWAP FILE SIZE INTEGER SSSFA ! SWAP FILE USED INTEGER SSATL ! ACTIVE TASKS (ATL) BYTE SSUTL(4) ! ACTIVE TASKS (UTL) BYTE SSTTN ! TIMESHARING TERMINALS BYTE SSTTA ! TIMESHARING TERMINALS ACTIVE C EQUIVALENCE (SSTIM,SALBF("02)) EQUIVALENCE (SSSET,SALBF("22)) EQUIVALENCE (SSSTS,SALBF("26)) EQUIVALENCE (SSMEM,SALBF("52)) EQUIVALENCE (SSTPS,SALBF("54)) EQUIVALENCE (SSTPA,SALBF("56)) EQUIVALENCE (SSNOD,SALBF("60)) EQUIVALENCE (SSHOL,SALBF("62)) EQUIVALENCE (SSSFS,SALBF("64)) EQUIVALENCE (SSSFA,SALBF("66)) EQUIVALENCE (SSATL,SALBF("70)) EQUIVALENCE (SSUTL,SALBF("72)) EQUIVALENCE (SSTTN,SALBF("76)) EQUIVALENCE (SSTTA,SALBF("77)) C C C SAL RECORD DEFINITIONS - CNTD C C C ACTIVE TERMINAL (ATT) RECORD DEFINITION C --------------------------------------- C INTEGER ATTDN ! TERMINAL DEVICE NAME BYTE ATTUN ! TERMINAL UNIT NUMBER BYTE ATTFL ! TERMINAL FLAGS BYTE BYTE ATNAJ ! ACTIVE JOB COUNT BYTE ATNJB ! ACTIVE JOB NAME BUFFER COUNT INTEGER*4 ATJOB(14) ! ACTIVE JOB NAME BUFFER C EQUIVALENCE (ATTDN,SALBF("02)) EQUIVALENCE (ATTUN,SALBF("04)) EQUIVALENCE (ATTFL,SALBF("05)) EQUIVALENCE (ATNAJ,SALBF("06)) EQUIVALENCE (ATNJB,SALBF("07)) EQUIVALENCE (ATJOB,SALBF("10)) C C C L O C A L P A R A M E T E R S A N D V A R I A B L E S C =========================================================== C C C C FILE SPECIFICATION BUFFERS C -------------------------- C BYTE SALFNM(80) ! SOURCE FILE SPECIFICATION C C C C SAMPLE SELECTION PARAMETERS C --------------------------- C LOGICAL SELCND ! CONDITIONAL SAMPLE SELECT FLAG LOGICAL SELINT ! INTERACTIVE SAMPLE SELECT FLAG C C LOGICAL SELMND ! SELECT DATE FLAG LOGICAL SELMXD ! SELECT DATE FLAG LOGICAL REJDAT ! REJECT DATE FLAG INTEGER MINDAT ! SELECT DATE (MINIMUM) INTEGER MAXDAT ! SELECT DATE (MAXIMUM) C C LOGICAL SELDOW ! SELECT DAY-OF-WEEK FLAG PARAMETER SUNDOW=1 ! DAY-OF-WEEK CODE (SUNDAY) PARAMETER SATDOW=7 ! DAY-OF-WEEK CODE (SATURDAY) C C LOGICAL SELTIM ! SELECT TIME FLAG LOGICAL REJTIM ! REJECT TIME FLAG INTEGER*4 MINTIM ! SELECT TIME (MINIMUM) INTEGER*4 MAXTIM ! SELECT TIME (MAXIMUM) C C LOGICAL SKIP ! REJECT SAMPLE FLAG C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C SAMPLE RECORD COUNTS C -------------------- C INTEGER*4 SSTCNT ! SST RECORD COUNT INTEGER*4 SSTTOD(96) ! SST RECORD COUNT (VS TOD) ! INTEGER*4 ATTCNT ! ATT RECORD COUNT ! INTEGER*4 UNKCNT ! UNKNOWN RECORD COUNT C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C SAMPLE DATE/TIME STATISTICS C --------------------------- C INTEGER IMO,IDA,IYR ! SAMPLE DATE C EQUIVALENCE (IMO,SSTIM(2)) EQUIVALENCE (IDA,SSTIM(3)) EQUIVALENCE (IYR,SSTIM(1)) C C INTEGER IHR,IMN,ISC ! SAMPLE TIME C EQUIVALENCE (IHR,SSTIM(4)) EQUIVALENCE (IMN,SSTIM(5)) EQUIVALENCE (ISC,SSTIM(6)) C C INTEGER DAT ! SAMPLE DATE (HAPO) INTEGER DATMIN ! SAMPLE DATE (MINIMUM) BYTE ADATMN(10) ! INTEGER DATMAX ! SAMPLE DATE (MAXIMUM) BYTE ADATMX(10) ! INTEGER DATOLD ! SAMPLE DATE (LAST ENTRY) C C INTEGER DOW ! SAMPLE DAY-OF-WEEK INDEX C C INTEGER*4 TIM ! SAMPLE TIME (SECONDS) INTEGER*4 TIMMIN ! SAMPLE TIME (MINIMUM) BYTE ATIMMN(9) ! INTEGER*4 TIMMAX ! SAMPLE TIME (MAXIMUM) BYTE ATIMMX(9) ! INTEGER*4 TIMOLD ! SAMPLE TIME (LAST SAMPLE) C C INTEGER TOD ! SAMPLE TIME-OF-DAY INDEX INTEGER TODMIN ! SAMPLE TIME-OF-DAY INDEX (MINIMUM) INTEGER TODMAX ! SAMPLE TIME-OF-DAY INDEX (MAXIMUM) C C INTEGER*4 SETIME ! SYSTEM ELAPSED TIME INTEGER*4 SETOLD ! SYSTEM ELAPSED TIME (LAST ENTRY) C C INTEGER*4 ESTIME ! ELAPSED SAMPLE TIME REAL ESTSUM ! ELAPSED SAMPLE TIME (SUM) INTEGER*4 ESTMIN ! ELAPSED SAMPLE TIME (MINIMUM) INTEGER*4 ESTMAX ! ELAPSED SAMPLE TIME (MAXIMUM) INTEGER*4 ESTAVG ! ELAPSED SAMPLE TIME (MEAN) C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C REBOOT (UPTIME/DOWNTIME) STATISTICS C ----------------------------------- C INTEGER*4 BOOCNT ! REBOOT COUNT C C INTEGER*4 UPTIME ! SYSTEM UPTIME INTEGER*4 UPTSUM ! SYSTEM UPTIME (SUM) INTEGER*4 UPTMIN ! SYSTEM UPTIME (MINIMUM) INTEGER*4 UPTMAX ! SYSTEM UPTIME (MAXIMUM) INTEGER*4 UPTAVG ! SYSTEM UPTIME (MEAN) REAL UPTPCT ! SYSTEM UPTIME (PERCENT) C C INTEGER*4 DNTIME ! SYSTEM DOWNTIME INTEGER*4 DNTSUM ! SYSTEM DOWNTIME (SUM) INTEGER*4 DNTMIN ! SYSTEM DOWNTIME (MINIMUM) INTEGER*4 DNTMAX ! SYSTEM DOWNTIME (MAXIMUM) INTEGER*4 DNTAVG ! SYSTEM DOWNTIME (MEAN) REAL DNTPCT ! SYSTEM DOWNTIME (PERCENT) C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C SYSTEM TIME STATISTICS C ---------------------- C REAL CPUTOD(96) ! CPU ACTIVITY (VS TOD) REAL CPUSUM ! CPU ACTIVITY (SUM) REAL CPUSSQ ! CPU ACTIVITY (SUM OF SQUARES) REAL CPUMIN ! CPU ACTIVITY (MINIMUM) REAL CPUMAX ! CPU ACTIVITY (MAXIMUM) REAL CPUAVG ! CPU ACTIVITY (MEAN) REAL CPUSTD ! CPU ACTIVITY (STD DEVIATION) REAL CPUDST(10) ! CPU ACTIVITY (DISTRIBUTION) C C REAL STSSUM(4) ! SYSTEM TIMES (SUM) REAL STSSSQ(4) ! SYSTEM TIMES (SUM OF SQUARES) REAL STSMIN(4) ! SYSTEM TIMES (MINIMUM) REAL STSMAX(4) ! SYSTEM TIMES (MAXIMUM) REAL STSAVG(4) ! SYSTEM TIMES (MEAN) REAL STSSTD(4) ! SYSTEM TIMES (STD DEVIATION) REAL STSDST(4,10) ! SYSTEM TIMES (DISTRIBUTION) C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C TIMESHARING PARTITION STATISTICS C -------------------------------- C REAL TPATOD(96) ! PARTITION USED (VS TOD) REAL TPASUM ! PARTITION USED (SUM) REAL TPASSQ ! PARTITION USED (SUM OF SQUARES) REAL TPAMIN ! PARTITION USED (MINIMUM) INTEGER TPAAMN,TPSAMN ! REAL TPAMAX ! PARTITION USED (MAXIMUM) INTEGER TPAAMX,TPSAMX ! REAL TPAAVG ! PARTITION USED (MEAN) REAL TPASTD ! PARTITION USED (STD DEVIATION) REAL TPADST(10) ! PARTITION USED (DISTRIBUTION) C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C NODE POOL STATISTICS C -------------------- C REAL NODSUM ! FREE NODES (SUM) REAL NODSSQ ! FREE NODES (SUM OF SQUARES) REAL NODMIN ! FREE NODES (MINIMUM) REAL NODMAX ! FREE NODES (MAXIMUM) REAL NODAVG ! FREE NODES (MEAN) REAL NODSTD ! FREE NODES (STD DEVIATION) C C REAL HOLSUM ! LARGEST HOLE (SUM) REAL HOLSSQ ! LARGEST HOLE (SUM OF SQUARES) REAL HOLMIN ! LARGEST HOLE (MINIMUM) REAL HOLMAX ! LARGEST HOLE (MAXIMUM) REAL HOLAVG ! LARGEST HOLE (MEAN) REAL HOLSTD ! LARGEST HOLE (STD DEVIATION) C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C ACTIVE TASK STATISTICS C ---------------------- C REAL ATLSUM ! ATL ENTRIES (SUM) REAL ATLSSQ ! ATL ENTRIES (SUM OF SQUARES) REAL ATLMIN ! ATL ENTRIES (MINIMUM) REAL ATLMAX ! ATL ENTRIES (MAXIMUM) REAL ATLAVG ! ATL ENTRIES (MEAN) REAL ATLSTD ! ATL ENTRIES (STD DEVIATION) REAL ATLDST(10) ! ATL ENTRIES (DISTRIBUTION) C C REAL UTLSUM ! UTL ENTRIES (SUM) REAL UTLSSQ ! UTL ENTRIES (SUM OF SQUARES) REAL UTLMIN ! UTL ENTRIES (MINIMUM) REAL UTLMAX ! UTL ENTRIES (MAXIMUM) REAL UTLAVG ! UTL ENTRIES (MEAN) REAL UTLSTD ! UTL ENTRIES (STD DEVIATION) REAL UTLDST(10) ! UTL ENTRIES (DISTRIBUTION) C C REAL LVLSUM(4) ! UTL LEVEL ENTRIES (SUM) REAL LVLSSQ(4) ! UTL LEVEL ENTRIES (SUM OF SQUARES) REAL LVLMIN(4) ! UTL LEVEL ENTRIES (MINIMUM) REAL LVLMAX(4) ! UTL LEVEL ENTRIES (MAXIMUM) REAL LVLAVG(4) ! UTL LEVEL ENTRIES (MEAN) REAL LVLSTD(4) ! UTL LEVEL ENTRIES (STD DEVIATION) REAL LVLDST(4,10) ! UTL LEVEL ENTRIES (DISTRIBUTION) C C REAL JOBDST(128) ! ACTIVE JOB COUNT VS TASK NAME INTEGER*4 JOBNAM(128) ! ACTIVE TASK NAMES (RAD50) INTEGER JOBNUM ! ACTIVE TASK NAMES COUNT C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C ACTIVE TERMINAL STATISTICS C -------------------------- C REAL TTATOD(96) ! ACTIVE TERMINALS (VS TOD) REAL TTASUM ! ACTIVE TERMINALS (SUM) REAL TTASSQ ! ACTIVE TERMINALS (SUM OF SQUARES) REAL TTAMIN ! ACTIVE TERMINALS (MINIMUM) REAL TTAMAX ! ACTIVE TERMINALS (MAXIMUM) REAL TTAAVG ! ACTIVE TERMINALS (MEAN) REAL TTASTD ! ACTIVE TERMINALS (STD DEVIATION) REAL TTADST(10) ! ACTIVE TERMINALS (DISTRIBUTION) C C INTEGER TUNMAX ! TERMINAL UNIT NUMBER (MAXIMUM) C C REAL TTYDST(64) ! CONNECT TIME VS TERMINAL C C REAL CHADST(4) ! CONNECT TIME VS CHANNEL TYPE C C C LOCAL PARAMETERS AND VARIABLES - CNTD C C C MISCELLANEOUS C ------------- C BYTE IBUF(80) ! L*1 TEMPORARY INTEGER ITMP ! I*2 TEMPORARY INTEGER*4 I4TMP ! I*4 TEMPORARY REAL XTMP ! R*4 TEMPORARY C BYTE HISTOG(21) ! HISTOGRAM DATA C REAL*8 ASCJOB ! ACTIVE TASK NAME (ASCII) C REAL STSTMP(5) ! SYSTEM TIMES (TEMPORARY STORAGE) INTEGER*4 STSOLD(5) ! SYSTEM TIMES (PERVIOUS ENTRY) C C C I N I T I A L I Z A T I O N C =========================== C C C C INITIALIZE MISCELLANEOUS VARIABLES C ---------------------------------- C DATA CPUMIN/1.0/ DATA STSMIN/1.0,1.0,1.0,1.0/ DATA TPAMIN/1.0/ C DATA JOBNUM/1/ C DATA HISTOG/0,20*'*'/ C C C C INITIALIZE FCS ERROR PROCESSING C ------------------------------- C CALL IOERRS C C C P R E L I M I N A R Y C ===================== C C C C OPEN REPORT FILE C ---------------- C 10 CALL GCMDP(5,'Report file? ',SALFNM,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.NE.0) GO TO 1002 C OPEN( UNIT=6, 2 NAME='SP:[1,4]SALANL.RPT', 3 DISPOSE='PRINT', 4 ERR=1004) C GO TO 1008 C C 1002 CALL FILNAM(SALFNM,,,'SALANL','RPT',,ISW) IF(ISW.NE.0) GO TO 1004 C OPEN( UNIT=6, 2 NAME=SALFNM, 3 ERR=1006) C GO TO 1008 C C 1004 WRITE(5,*) 'Invalid file specification' GO TO 10 C 1006 WRITE(5,*) 'Input file open error' GO TO 10 C C C PRELIMINARY - CNTD C C C OPEN SOURCE FILE C ---------------- C 1008 CALL GCMDP(5,'Source file? ',SALFNM,ILEN) IF(ILEN.LT.0) CALL EXIT C IF(ILEN.EQ.0) CALL FILNAM(SALFNM,'LB','[1,1]','SAL','LOG',,ISW) IF(ILEN.GT.0) CALL FILNAM(SALFNM, , ,'SAL','LOG',,ISW) C IF(ISW.NE.0) GO TO 1010 C OPEN( UNIT=1, 2 NAME=SALFNM, 3 TYPE='OLD', 4 READONLY,SHARED, 5 ERR=1012) C GO TO 1014 C C 1010 WRITE(5,*) 'Invalid file specification' GO TO 1008 C 1012 CALL ERRSNS(ISW,IFCS) IF(ISW.EQ.29) WRITE(5,*) 'No such file' IF(ISW.NE.29) WRITE(5,*) 'Input file open error' GO TO 1008 C C C PRELIMINARY - CNTD C C C INPUT SAMPLE SELECTION MODE C --------------------------- C 1014 CALL GCMDP(5,'Select samples interactively? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1016 C IF(IBUF(1).EQ.'N') GO TO 1016 IF(IBUF(1).NE.'Y') GO TO 1014 C SELINT=.TRUE. C CALL PAGE WRITE(6,1040) CALL LINE(3) C GO TO 20 C C C 1016 CALL GCMDP(5,'Select samples conditionally? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1018 C IF(IBUF(1).EQ.'N') GO TO 1018 IF(IBUF(1).NE.'Y') GO TO 1016 C SELCND=.TRUE. C GO TO 1020 C C C 1018 CALL PAGE C GO TO 20 C C C PRELIMINARY - CNTD C C C PROMPT/INPUT/PARSE SAMPLE SELECT CONDITIONS - DATE(S) C ----------------------------------------------------- C 1020 CALL GCMDP(5,'* Minimum sample date? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1024 C CALL CVTDAT(IBUF,IMO,IDA,IYR,1,ISW) IF(ISW.EQ.0) GO TO 1022 C WRITE(5,*) 'Invalid date' GO TO 1020 C 1022 CALL HAPO (MINDAT,IMO,IDA,IYR,0,ISW) CALL CVTDAT(ADATMN,IMO,IDA,IYR,0,ISW) C SELMND=.TRUE. C C C 1024 CALL GCMDP(5,'* Maximum sample date? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1028 C CALL CVTDAT(IBUF,IMO,IDA,IYR,1,ISW) IF(ISW.EQ.0) GO TO 1026 C WRITE(5,*) 'Invalid date' GO TO 1024 C 1026 CALL HAPO (MAXDAT,IMO,IDA,IYR,0,ISW) CALL CVTDAT(ADATMX,IMO,IDA,IYR,0,ISW) C SELMXD=.TRUE. C C C PRELIMINARY - CNTD C C C PROMPT/INPUT/PARSE SAMPLE SELECT CONDITIONS - TIME FRAME C -------------------------------------------------------- C 1028 CALL GCMDP(5,'* Minimum sample time? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1036 C CALL CVTTIM(IBUF,IHR,IMN,ISC,1,ISW) IF(ISW.EQ.0) GO TO 1030 C WRITE(5,*) 'Invalid time' GO TO 1028 C 1030 MINTIM=IHR MINTIM=3600*MINTIM+60*IMN+ISC C CALL CVTTIM(ATIMMN,IHR,IMN,ISC,0,ISW) C C C 1032 CALL GCMDP(5,'* Maximum sample time? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT C CALL CVTTIM(IBUF,IHR,IMN,ISC,1,ISW) IF(ISW.EQ.0) GO TO 1034 C WRITE(5,*) 'Invalid time' GO TO 1032 C 1034 MAXTIM=IHR MAXTIM=3600*MAXTIM+60*IMN+ISC C CALL CVTTIM(ATIMMX,IHR,IMN,ISC,0,ISW) C SELTIM=MINTIM.LT.MAXTIM REJTIM=MINTIM.GT.MAXTIM C C C PRELIMINARY - CNTD C C C PROMPT/INPUT/PARSE SAMPLE SELECT CONDITIONS - WEEKENDS C ------------------------------------------------------ C 1036 CALL GCMDP(5,'* Exclude Sat/Sundays? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 1038 C IF(IBUF(1).EQ.'N') GO TO 1038 IF(IBUF(1).NE.'Y') GO TO 1036 C SELDOW=.TRUE. C C C 1038 SELCND=SELMND.OR.SELMXD.OR.SELTIM.OR.REJTIM.OR.SELDOW C IF(.NOT.SELCND) GO TO 20 C C C PRELIMINARY - CNTD C C C OUTPUT SAMPLE SELECT CONDITIONS C ------------------------------- C CALL PAGE C WRITE(6,1040) 1040 FORMAT( T11,'Sample Select Conditions'/ 1 T11,'========================'/) C C IF((SELMND.AND.SELMXD).AND.(MINDAT.EQ.MAXDAT)) GO TO 1052 C C IF(SELMND) WRITE(6,1042) ADATMN 1042 FORMAT( T13,'* Minimum sample date',T38,10A1) C IF(SELMXD) WRITE(4,1044) ADATMX 1044 FORMAT( T13,'* Maximum sample date',T38,10A1) C IF(SELTIM) WRITE(6,1046) ATIMMN,ATIMMX 1046 FORMAT( T13,'* Select sample times',T38,9A1,' to ',9A1) C IF(REJTIM) WRITE(6,1048) ATIMMX,ATIMMN 1048 FORMAT( T13,'* Reject sample times',T38,9A1,' to ',9A1) C IF(SELDOW) WRITE(6,1050) 1050 FORMAT( T13,'* Weekends excluded') C GO TO 20 C C 1052 CALL WKDAY(DOW,IMO,IDA,IYR) C IF(.NOT.(SELTIM.OR.REJTIM)) WRITE(6,1054) ADATMN,ADOW(DOW) IF( (SELTIM.OR.REJTIM)) WRITE(6,1054) ADATMN,ADOW(DOW), 1 ATIMMN,ATIMMX C 1054 FORMAT( T13,'* Select ',10A1,' (',A3,')',:,T39,9A1,' to ',9A1) C C C I N P U T S A L L O G D A T A C ================================= C C C C INPUT NEXT RECORD C ----------------- C 20 READ(1,2002,END=50) SALBF 2002 FORMAT(64A1) C C C C DISPATCH FOR RECORD PROCESSING C ------------------------------ C IF(SALRT.EQ."001) GO TO 30 ! "SST" IF(SKIP) GO TO 20 IF(SALRT.EQ."002) GO TO 40 ! "ATT" C UNKCNT=UNKCNT+1 ! UNKNOWN GO TO 20 C C C P R O C E S S S S T R E C O R D S C ===================================== C C C C COMPUTE SAMPLE DATE & DAY-OF-WEEK C --------------------------------- C 30 CALL HAPO (DAT,IMO,IDA,IYR,0,ISW) C CALL WKDAY(DOW,IMO,IDA,IYR) C C C C COMPUTE SAMPLE TIME & TIME-OF-DAY INDEX (TOD) C --------------------------------------------- C TIM=IHR TIM=3600*TIM+60*IMN+ISC C TOD=4*IHR+IMN/15+1 C C C C SCALE SYSTEM ELAPSED TIME C ------------------------- C SETIME=SSSET/SSTIM(8) C C C C COMPUTE ELAPSED SAMPLE TIME C --------------------------- C ESTIME=3600*24*(DAT-DATOLD)+(TIM-TIMOLD) C IF(ESTIME.GT.0) GO TO 3002 C WRITE(5,*) 'Warning - sample sequence error' GO TO 3036 C C C PROCESS SST RECORDS - CNTD C C C SELECT SAMPLE DATES INTERACTIVELY C --------------------------------- C 3002 IF(.NOT.SELINT) GO TO 3016 C IF(DAT.EQ.DATOLD) GO TO 3016 C REJDAT=.FALSE. SELTIM=.FALSE. REJTIM=.FALSE. C C C 3004 CALL CVTDAT(ADATMN,IMO,IDA,IYR,0,ISW) C CALL CONCAT(IBUF,'* Select ',ADATMN,' (',ADOW(DOW),')? ') C CALL GCMDP(5,IBUF,IBUF,ILEN) IF(ILEN.LT.0) GO TO 50 C IF(IBUF(1).EQ.'Y') GO TO 3006 IF(IBUF(1).NE.'N') GO TO 3004 C REJDAT=.TRUE. GO TO 3016 C C C PROCESS SST RECORDS - CNTD C C C PROMPT/INPUT/PARSE TIME FRAME FOR CURRENT SAMPLE DATE C ----------------------------------------------------- C 3006 CALL GCMDP(5,'* Minimum sample time? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT IF(ILEN.EQ.0) GO TO 3014 C CALL CVTTIM(IBUF,IHR,IMN,ISC,1,ISW) IF(ISW.EQ.0) GO TO 3008 C WRITE(5,*) 'Invalid time' GO TO 3006 C 3008 MINTIM=IHR MINTIM=3600*MINTIM+60*IMN+ISC C CALL CVTTIM(ATIMMN,IHR,IMN,ISC,0,ISW) C C C 3010 CALL GCMDP(5,'* Maximum sample time? ',IBUF,ILEN) IF(ILEN.LT.0) CALL EXIT C CALL CVTTIM(IBUF,IHR,IMN,ISC,1,ISW) IF(ISW.EQ.0) GO TO 3012 C WRITE(5,*) 'Invalid time' GO TO 3010 C 3012 MAXTIM=IHR MAXTIM=3600*MAXTIM+60*IMN+ISC C CALL CVTTIM(ATIMMX,IHR,IMN,ISC,0,ISW) C SELTIM=MINTIM.LT.MAXTIM REJTIM=MINTIM.GT.MAXTIM C C C C OUTPUT INTERACTIVE SAMPLE SELECT CONDITIONS C ------------------------------------------- C 3014 IF(.NOT.(SELTIM.OR.REJTIM)) WRITE(6,1054) ADATMN,ADOW(DOW) IF( (SELTIM.OR.REJTIM)) WRITE(6,1054) ADATMN,ADOW(DOW), 1 ATIMMN,ATIMMX C C FORMAT( T13,'* Select ',10A1,' (',A3,')',:,T39,9A1,' to ',9A1) C CALL LINE(1) C C C PROCESS SST RECORDS - CNTD C C C SELECT SAMPLE RECORDS C --------------------- C 3016 IF(SELMXD.AND.(DAT.GT.MAXDAT)) GO TO 50 C C SKIP = (REJDAT.OR. 1 (SELMND.AND.(DAT.LT.MINDAT)).OR. 1 (SELDOW.AND.(DOW.EQ.SUNDOW)).OR. 1 (SELDOW.AND.(DOW.EQ.SATDOW)).OR. 1 (SELTIM.AND.(TIM.LT.MINTIM)).OR. 1 (SELTIM.AND.(TIM.GT.MAXTIM)).OR. 1 (REJTIM.AND.(TIM.GE.MAXTIM).AND.(TIM.LE.MINTIM))) C C IF(SKIP) GO TO 3036 C C C PROCESS SST RECORDS - CNTD C C C TALLY REBOOT (UPTIME/DOWNTIME) STATISTICS C ----------------------------------------- C IF(SETIME.GT.SETOLD) GO TO 3020 C C BOOCNT=BOOCNT+1 C UPTIME=SETOLD DNTIME=ESTIME C C IF(BOOCNT.GT.1) GO TO 3018 C UPTMIN=UPTIME UPTMAX=UPTIME C DNTMIN=DNTIME DNTMAX=DNTIME C C 3018 UPTSUM=UPTSUM+UPTIME C IF(UPTIME.LT.UPTMIN) UPTMIN=UPTIME IF(UPTIME.GT.UPTMAX) UPTMAX=UPTIME C C DNTSUM=DNTSUM+DNTIME C IF(DNTIME.LT.DNTMIN) DNTMIN=DNTIME IF(DNTIME.GT.DNTMAX) DNTMAX=DNTIME C C SKIP=.TRUE. C C GO TO 3036 C C C PROCESS SST RECORDS - CNTD C C C INCREMENT RECORD COUNTS C ----------------------- C 3020 IF(SSTCNT.GT.0) GO TO 3022 C SSTCNT=1 C DATMIN=DAT TIMMIN=TIM C TODMIN=TOD C ESTMIN=ESTIME C NODMIN=SSNOD HOLMIN=SSHOL C ATLMIN=SSATL UTLMIN=SSUTL(1)+SSUTL(2)+SSUTL(3)+SSUTL(4) C LVLMIN(1)=SSUTL(1) LVLMIN(2)=SSUTL(2) LVLMIN(3)=SSUTL(3) LVLMIN(4)=SSUTL(4) C TTAMIN=SSTTA C GO TO 3036 C C C 3022 SSTCNT=SSTCNT+1 SSTTOD(TOD)=SSTTOD(TOD)+1 C C C PROCESS SST RECORDS - CNTD C C C TALLY SAMPLE DATE/TIME STATISTICS C --------------------------------- C DATMAX=DAT TIMMAX=TIM C IF(TOD.LT.TODMIN) TODMIN=TOD IF(TOD.GT.TODMAX) TODMAX=TOD C ESTSUM=ESTSUM+ESTIME C C C PROCESS SST RECORDS - CNTD C C C TALLY SYSTEM TIME STATISTICS (CPU ACTIVITY) C ------------------------------------------- C XTMP=SSSTS(1)-STSOLD(1) C IF(XTMP.EQ.0) GO TO 3026 C STSTMP(1)=1.0-((SSSTS(2)-STSOLD(2))+(SSSTS(3)-STSOLD(3)))/XTMP ! REAL STSTMP(2)= ((SSSTS(3)-STSOLD(3))-(SSSTS(5)-STSOLD(5)))/XTMP ! PDS STSTMP(3)= ((SSSTS(5)-STSOLD(5)) )/XTMP ! BATCH STSTMP(4)= ((SSSTS(4)-STSOLD(4)) )/XTMP ! SWAP C D DO 3301 I=1,4 D IF(STSTMP(I).LT.0) STSTMP(I)=0 D IF(STSTMP(I).GT.1) STSTMP(I)=1 D3301 CONTINUE C C C XTMP=STSTMP(1)+STSTMP(2)+STSTMP(3)+STSTMP(4) C CPUTOD(TOD)=CPUTOD(TOD)+XTMP C CPUSUM=CPUSUM+XTMP CPUSSQ=CPUSSQ+XTMP**2 C IF(XTMP.LT.CPUMIN) CPUMIN=XTMP IF(XTMP.GT.CPUMAX) CPUMAX=XTMP C ITMP=XTMP/0.1+1 ITMP=MIN(ITMP,10) CPUDST(ITMP)=CPUDST(ITMP)+1 C C C DO 3024 I=1,4 C XTMP=STSTMP(I) C STSSUM(I)=STSSUM(I)+XTMP STSSSQ(I)=STSSSQ(I)+XTMP**2 C IF(XTMP.LT.STSMIN(I)) STSMIN(I)=XTMP IF(XTMP.GT.STSMAX(I)) STSMAX(I)=XTMP C ITMP=XTMP/0.1+1 ITMP=MIN(ITMP,10) STSDST(I,ITMP)=STSDST(I,ITMP)+1 C 3024 CONTINUE C C C PROCESS SST RECORDS - CNTD C C C TALLY TIMESHARING PARTITION STATISTICS C -------------------------------------- C 3026 IF(SSTPS.EQ.0) GO TO 3032 C XTMP=SSTPA XTMP=XTMP/SSTPS C TPATOD(TOD)=TPATOD(TOD)+XTMP C TPASUM=TPASUM+XTMP TPASSQ=TPASSQ+XTMP**2 C IF(XTMP.GE.TPAMIN) GO TO 3028 C TPAMIN=XTMP TPAAMN=SSTPA TPSAMN=SSTPS C 3028 IF(XTMP.LE.TPAMAX) GO TO 3030 C TPAMAX=XTMP TPAAMX=SSTPA TPSAMX=SSTPS C 3030 ITMP=XTMP/0.1+1 ITMP=MIN(ITMP,10) TPADST(ITMP)=TPADST(ITMP)+1 C C C PROCESS SST RECORDS - CNTD C C C TALLY NODE POOL STATISTICS C -------------------------- C 3032 XTMP=SSNOD C NODSUM=NODSUM+XTMP NODSSQ=NODSSQ+XTMP**2 C IF(XTMP.LT.NODMIN) NODMIN=XTMP IF(XTMP.GT.NODMAX) NODMAX=XTMP C C C XTMP=SSHOL C HOLSUM=HOLSUM+XTMP HOLSSQ=HOLSSQ+XTMP**2 C IF(XTMP.LT.HOLMIN) HOLMIN=XTMP IF(XTMP.GT.HOLMAX) HOLMAX=XTMP C C C PROCESS SST RECORDS - CNTD C C C TALLY TASK ACTIVITY STATISTICS (ATL) C ------------------------------------ C XTMP=SSATL C ATLSUM=ATLSUM+XTMP ATLSSQ=ATLSSQ+XTMP**2 C IF(XTMP.LT.ATLMIN) ATLMIN=XTMP IF(XTMP.GT.ATLMAX) ATLMAX=XTMP C ITMP=(XTMP+7)/8+1 ITMP=MIN(ITMP,10) ATLDST(ITMP)=ATLDST(ITMP)+1 C C C PROCESS SST RECORDS - CNTD C C C TALLY TASK ACTIVITY STATISTICS (UTL) C ------------------------------------ C XTMP=SSUTL(1)+SSUTL(2)+SSUTL(3)+SSUTL(4) C UTLSUM=UTLSUM+XTMP UTLSSQ=UTLSSQ+XTMP**2 C IF(XTMP.LT.UTLMIN) UTLMIN=XTMP IF(XTMP.GT.UTLMAX) UTLMAX=XTMP C ITMP=(XTMP+3)/4+1 ITMP=MIN(ITMP,10) UTLDST(ITMP)=UTLDST(ITMP)+1 C C C PROCESS SST RECORDS - CNTD C C C TALLY TASK ACTIVITY STATISTICS (SCHEDULER LEVELS) C ------------------------------------------------- C XTMP=SSUTL(1)+SSUTL(2)+SSUTL(3)+SSUTL(4) C DO 3034 I=1,4 C XTMP=SSUTL(I) C LVLSUM(I)=LVLSUM(I)+XTMP LVLSSQ(I)=LVLSSQ(I)+XTMP**2 C IF(XTMP.LT.LVLMIN(I)) LVLMIN(I)=XTMP IF(XTMP.GT.LVLMAX(I)) LVLMAX(I)=XTMP C ITMP=(SSUTL(I)+3)/4+1 ITMP=MIN(ITMP,10) LVLDST(I,ITMP)=LVLDST(I,ITMP)+1 C 3034 CONTINUE C C C PROCESS SST RECORDS - CNTD C C C TALLY ACTIVE TERMINAL STATISTICS C -------------------------------- C IF(SSTTN.EQ.0) GO TO 3036 C XTMP=SSTTA C TTATOD(TOD)=TTATOD(TOD)+XTMP C TTASUM=TTASUM+XTMP TTASSQ=TTASSQ+XTMP**2 C IF(XTMP.LT.TTAMIN) TTAMIN=XTMP IF(XTMP.GT.TTAMAX) TTAMAX=XTMP C ITMP=(SSTTA+3)/4+1 ITMP=MIN(ITMP,10) TTADST(ITMP)=TTADST(ITMP)+1 C C C PROCESS SST RECORDS - CNTD C C C SAVE SELECTED RECORD ITEMS C -------------------------- C 3036 DATOLD=DAT TIMOLD=TIM C SETOLD=SETIME C DO 3038 I=1,5 STSOLD(I)=SSSTS(I) 3038 CONTINUE C C GO TO 20 C C C P R O C E S S A T T R E C O R D S C ====================================== C C C 40 ATTCNT=ATTCNT+1 C C C C TALLY ACTIVE TASK STATISTICS C ---------------------------- C C IF(ATNAJ.EQ.0) JOBDST(1)=JOBDST(1)+1 C C IF(ATNJB.EQ.0) GO TO 4008 C DO 4006 I=1,ATNJB C CALL R50ASC(6,ATJOB(I),IBUF) C IF((IBUF(1).EQ.'J').AND. 1 (IBUF(2).EQ.'O').AND. 1 (IBUF(3).EQ.'B').AND. 1(((IBUF(4).GE.'0').AND.(IBUF(4).LE.'9')).OR.(IBUF(4).EQ.' ')).AND. 1(((IBUF(5).GE.'0').AND.(IBUF(5).LE.'9')).OR.(IBUF(5).EQ.' ')).AND. 1(((IBUF(6).GE.'0').AND.(IBUF(6).LE.'9')).OR.(IBUF(6).EQ.' '))) 1 ATJOB(I)="23166040332 C IF(JOBNUM.EQ.1) GO TO 4004 C DO 4002 J=2,JOBNUM C IF(ATJOB(I).NE.JOBNAM(J)) GO TO 4002 JOBDST(J)=JOBDST(J)+1 GO TO 4006 C 4002 CONTINUE C 4004 JOBNUM=JOBNUM+1 JOBNAM(JOBNUM)=ATJOB(I) JOBDST(JOBNUM)=JOBDST(JOBNUM)+1 C JOBNUM=MIN(JOBNUM,127) C 4006 CONTINUE C C 4008 JOBDST(128)=JOBDST(128)+(ATNAJ-ATNJB) C C C PROCESS ATT RECORDS - CNTD C C C TALLY CHANNEL STATISTICS C ------------------------ C IF((ATTFL.AND."200).EQ.0) GO TO 4010 CHADST(2)=CHADST(2)+1 ! BATCH GO TO 20 C C 4010 IF((ATTFL.AND."020).EQ.0) GO TO 4012 CHADST(1)=CHADST(1)+1 ! CONSOLE GO TO 20 C C 4012 IF((ATTFL.AND."100).NE.0) CHADST(3)=CHADST(3)+1 ! DIALUP IF((ATTFL.AND."100).EQ.0) CHADST(4)=CHADST(4)+1 ! DEDICATED C TTYDST(ATTUN)=TTYDST(ATTUN)+1 C IF(ATTUN.GT.TUNMAX) TUNMAX=ATTUN C C GO TO 20 C C C E D I T C O M P I L E D D A T A C =================================== C C C C C CLOSE SOURCE FILE C ----------------- C 50 CLOSE(UNIT=1) C C IF(SSTCNT.LT.2) STOP 'Insufficient sample count' SSTCNT=SSTCNT-1 C C C C CONVERT SAMPLE DATES C -------------------- C CALL HAPO (DATMIN,IMO,IDA,IYR,1,ISW) CALL CVTDAT(ADATMN,IMO,IDA,IYR,0,ISW) C IHR=TIMMIN/3600 IMN=MOD(TIMMIN/60,60) ISC=MOD(TIMMIN,60) CALL CVTTIM(ATIMMN,IHR,IMN,ISC,0,ISW) C CALL HAPO (DATMAX,IMO,IDA,IYR,1,ISW) CALL CVTDAT(ADATMX,IMO,IDA,IYR,0,ISW) C IHR=TIMMAX/3600 IMN=MOD(TIMMAX/60,60) ISC=MOD(TIMMAX,60) CALL CVTTIM(ATIMMX,IHR,IMN,ISC,0,ISW) C C C C COMPUTE AVERAGE SAMPLE TIME C --------------------------- C ESTAVG=ESTSUM/SSTCNT C C C EDIT COMPILED DATA - CNTD C C C COMPUTE REBOOT (UPTIME/DOWNTIME) STATISTICS C ------------------------------------------- C IF(SKIP) GO TO 5002 C C UPTIME=SETOLD C UPTSUM=UPTSUM+UPTIME C IF((BOOCNT.EQ.0).OR.(UPTIME.LT.UPTMIN)) UPTMIN=UPTIME IF((BOOCNT.EQ.0).OR.(UPTIME.GT.UPTMAX)) UPTMAX=UPTIME C C 5002 UPTPCT=100.0*UPTSUM/(UPTSUM+DNTSUM) DNTPCT=100.0-UPTPCT C UPTAVG=UPTSUM/(BOOCNT+1) C IF(BOOCNT.GT.0) DNTAVG=DNTSUM/BOOCNT C C C EDIT COMPILED DATA - CNTD C C C COMPUTE SYSTEM TIME STATISTICS (CPU ACTIVITY) C --------------------------------------------- C CPUAVG=100.0*CPUSUM/SSTCNT CPUSTD=100.0*STDDEV(CPUSUM,CPUSSQ,SSTCNT) C CPUMIN=100.0*CPUMIN CPUMAX=100.0*CPUMAX C DO 5004 J=1,10 CPUDST(J)=100.0*CPUDST(J)/SSTCNT 5004 CONTINUE C C C DO 5008 I=1,4 C STSAVG(I)=100.0*STSSUM(I)/SSTCNT STSSTD(I)=100.0*STDDEV(STSSUM(I),STSSSQ(I),SSTCNT) C STSMIN(I)=100.0*STSMIN(I) STSMAX(I)=100.0*STSMAX(I) C DO 5006 J=1,10 STSDST(I,J)=100.0*STSDST(I,J)/SSTCNT 5006 CONTINUE C 5008 CONTINUE C C C EDIT COMPILED DATA - CNTD C C C COMPUTE TIMESHARING PARTITION STATISTICS C ---------------------------------------- C TPAAVG=100.0*TPASUM/SSTCNT TPASTD=100.0*STDDEV(TPASUM,TPASSQ,SSTCNT) C TPAMIN=100.0*TPAMIN TPAAMN=TPAAMN/32 TPSAMN=TPSAMN/32 C TPAMAX=100.0*TPAMAX TPAAMX=TPAAMX/32 TPSAMX=TPSAMX/32 C DO 5010 J=1,10 TPADST(J)=100.0*TPADST(J)/SSTCNT 5010 CONTINUE C C C EDIT COMPILED DATA - CNTD C C C COMPUTE NODE POOL STATISTICS C ---------------------------- C NODAVG=NODSUM/SSTCNT NODSTD=STDDEV(NODSUM,NODSSQ,SSTCNT) C HOLAVG=HOLSUM/SSTCNT HOLSTD=STDDEV(HOLSUM,HOLSSQ,SSTCNT) C C C EDIT COMPILED DATA - CNTD C C C COMPUTE ACTIVE TASK STATISTICS C ------------------------------ C ATLAVG=ATLSUM/SSTCNT ATLSTD=STDDEV(ATLSUM,ATLSSQ,SSTCNT) C DO 5012 J=1,10 ATLDST(J)=100.0*ATLDST(J)/SSTCNT 5012 CONTINUE C C UTLAVG=UTLSUM/SSTCNT UTLSTD=STDDEV(UTLSUM,UTLSSQ,SSTCNT) C DO 5014 J=1,10 UTLDST(J)=100.0*UTLDST(J)/SSTCNT 5014 CONTINUE C C DO 5018 I=1,4 C LVLAVG(I)=LVLSUM(I)/SSTCNT LVLSTD(I)=STDDEV(LVLSUM,LVLSSQ,SSTCNT) C DO 5016 J=1,10 LVLDST(I,J)=100.0*LVLDST(I,J)/SSTCNT 5016 CONTINUE C 5018 CONTINUE C C IF(ATTCNT.EQ.0) GO TO 5026 C DO 5022 I=2,JOBNUM-1 DO 5020 J=I+1,JOBNUM C IF(JOBDST(I).GE.JOBDST(J)) GO TO 5020 CALL SWAPB(JOBDST(I),JOBDST(J),4) CALL SWAPB(JOBNAM(I),JOBNAM(J),4) C 5020 CONTINUE 5022 CONTINUE C DO 5024 I=1,JOBNUM JOBDST(I)=100.0*JOBDST(I)/ATTCNT 5024 CONTINUE C JOBDST(128)=100.0*JOBDST(128)/ATTCNT C C C EDIT COMPILED DATA - CNTD C C C COMPUTE ACTIVE TERMINAL STATISTICS C ---------------------------------- 5026 TTAAVG=TTASUM/SSTCNT TTASTD=STDDEV(TTASUM,TTASSQ,SSTCNT) C DO 5028 J=1,10 TTADST(J)=100.0*TTADST(J)/SSTCNT 5028 CONTINUE C C IF(ATTCNT.EQ.0) GO TO 5034 C C DO 5030 J=1,64 TTYDST(J)=100.0*TTYDST(J)/ATTCNT 5030 CONTINUE C C DO 5032 J=1,4 CHADST(J)=100.0*CHADST(J)/ATTCNT 5032 CONTINUE C C 5034 CONTINUE C C C EDIT COMPILED DATA - CNTD C C C SCALE TIME-OF-DAY STATISTICS C ---------------------------- C DO 5036 TOD=TODMIN,TODMAX IF(SSTTOD(TOD).LE.0) GO TO 5036 C CPUTOD(TOD)=100.0*CPUTOD(TOD)/SSTTOD(TOD) TPATOD(TOD)=100.0*TPATOD(TOD)/SSTTOD(TOD) C TTATOD(TOD)=TTATOD(TOD)/SSTTOD(TOD) C 5036 CONTINUE C C C O U T P U T S Y S T E M A C T I V I T Y R E P O R T C ========================================================= C C C C OUTPUT SOURCE FILE STATISTICS C ----------------------------- C 60 IF(SELINT) CALL TPAGE(16) C C WRITE(6,6002) 6002 FORMAT(//) C C WRITE(6,6004) SALFNM, 1 ATIMMN,ADATMN, 1 ATIMMX,ADATMX, 1 SSTCNT, 1 ATTCNT, 1 UNKCNT, 1 ESTAVG/3600,IDEC(MOD(ESTAVG/60,60)) C 6004 FORMAT( T11,'Source File Statistics'/ 1 T11,'======================'// 1 T13,'Source file',T38,80A1// 1 T13,'Date of first entry',T38,9A1,1X,10A1/ 1 T13,'Date of last entry',T38,9A1,1X,10A1// 1 T13,'SST entries processed',T38,I8/ 1 T13,'ATT entries processed',T38,I8/ 1 T13,'Unknown entries',T38,I8// 1 T13,'Average sample period',T38,I5,':',A2///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT REBOOT (UPTIME/DOWNTIME) STATISTICS C ------------------------------------------ C IF(SELINT.OR.SELTIM.OR.REJTIM.OR.SELDOW) GO TO 6008 C C WRITE(6,6006) UPTSUM/3600,IDEC(MOD(UPTSUM/60,60)),UPTPCT, 1 DNTSUM/3600,IDEC(MOD(UPTSUM/60,60)),DNTPCT, 1 BOOCNT, 1 UPTMIN/3600,IDEC(MOD(UPTMIN/60,60)), 1 UPTMAX/3600,IDEC(MOD(UPTMAX/60,60)), 1 UPTAVG/3600,IDEC(MOD(UPTAVG/60,60)), 1 DNTMIN/3600,IDEC(MOD(DNTMIN/60,60)), 1 DNTMAX/3600,IDEC(MOD(DNTMAX/60,60)), 1 DNTAVG/3600,IDEC(MOD(DNTAVG/60,60)) C 6006 FORMAT( T11,'Reboot (Uptime/Downtime) Statistics'/ 1 T11,'==================================='// 1 T13,'Uptime',T38,I5,':',A2,2X,'(',F5.1,'%)'/ 1 T13,'Downtime',T38,I5,':',A2,2X,'(',F5.1,'%)'// 1 T13,'Reboots', T38,I8// 1 T13,'Minimum Uptime',T38,I5,':',A2/ 1 T13,'Maximum Uptime',T38,I5,':',A2/ 1 T13,'Mean Uptime',T38,I5,':',A2// 1 T13,'Minimum Downtime',T38,I5,':',A2/ 1 T13,'Maximum Downtime',T38,I5,':',A2/ 1 T13,'Mean Downtime',T38,I5,':',A2///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT SYSTEM TIME STATISTICS (CPU ACTIVITY) C -------------------------------------------- C 6008 CALL PAGE C C WRITE(6,6010) CPUMIN, 1 CPUMAX, 1 CPUAVG, 1 CPUSTD, 1 (CPUDST(I), 1 (HISTOG(J),J=1,(LHISTO(CPUDST(I),ITMP))),I=1,10) C 6010 FORMAT( T11,'System Time Statistics (CPU Activity)'/ 1 T11,'====================================='// 1 T13,'CPU Utilization (% of capacity)'// 1 T16,'Minimum',T36,F6.1,'%'/ 1 T16,'Maximum',T36,F6.1,'%'/ 1 T16,'Mean',T36,F6.1,'%'/ 1 T16,'Std Deviation',T36,F6.1,'%'/// 1 T13,'Distribution'// 1 T16,'% capacity',T29,'% of samples (time)'/ 1 T16,'----------',T29,'-------------------'/ 1 T16,' 0 -> 10%',T29,F6.1,'%',3X,A1/ 1 T16,'10 -> 20%',T29,F6.1,'%',3X,A1/ 1 T16,'20 -> 30%',T29,F6.1,'%',3X,A1/ 1 T16,'30 -> 40%',T29,F6.1,'%',3X,A1/ 1 T16,'40 -> 50%',T29,F6.1,'%',3X,A1/ 1 T16,'50 -> 60%',T29,F6.1,'%',3X,A1/ 1 T16,'60 -> 70%',T29,F6.1,'%',3X,A1/ 1 T16,'70 -> 80%',T29,F6.1,'%',3X,A1/ 1 T16,'80 -> 90%',T29,F6.1,'%',3X,A1/ 1 T16,'90 -> 100%',T29,F6.1,'%',3X,A1///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT SYSTEM TIME STATISTICS (CPU ACTIVITY) - CNTD C --------------------------------------------------- C WRITE(6,6012) STSMIN, 1 STSMAX, 1 STSAVG, 1 STSSTD, 1 STSDST C 6012 FORMAT( T13,'Task Catagories'/ 1 T16,' Real PDS Batch Swap'/ 1 T16,'-----------------------------------------'/ 1 T16,'Minimum',T29,4(F6.1,'%')/ 1 T16,'Maximum',T29,4(F6.1,'%')/ 1 T16,'Mean',T29,4(F6.1,'%')/ 1 T16,'Std Deviation',T29,4(F6.1,'%')/// 1 T13,'Distribution'// 1 T16,'% capacity',T29,' % of samples (time)'/ 1 T16,'----------',T29,'----------------------------'/ 1 T16,' 0 -> 10%',T29,4(F6.1,'%')/ 1 T16,'10 -> 20%',T29,4(F6.1,'%')/ 1 T16,'20 -> 30%',T29,4(F6.1,'%')/ 1 T16,'30 -> 40%',T29,4(F6.1,'%')/ 1 T16,'40 -> 50%',T29,4(F6.1,'%')/ 1 T16,'50 -> 60%',T29,4(F6.1,'%')/ 1 T16,'60 -> 70%',T29,4(F6.1,'%')/ 1 T16,'70 -> 80%',T29,4(F6.1,'%')/ 1 T16,'80 -> 90%',T29,4(F6.1,'%')/ 1 T16,'90 -> 100%',T29,4(F6.1,'%')///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT TIMESHARING PARTITION STATISTICS C --------------------------------------- C CALL PAGE C C WRITE(6,6014) TPAMIN,TPAAMN,TPSAMN, 1 TPAMAX,TPAAMX,TPSAMX, 1 TPAAVG, 1 TPASTD, 1 (TPADST(I), 1 (HISTOG(J),J=1,(LHISTO(TPADST(I),ITMP))),I=1,10) C 6014 FORMAT( T11,'Timesharing Partition Statistics'/ 1 T11,'================================'// 1 T13,'Memory Utilization (% of capacity)'// 1 T16,'Minimum',T36,F6.1,'%',I5,'K /',I4,'K'/ 1 T16,'Maximum',T36,F6.1,'%',I5,'K /',I4,'K'/ 1 T16,'Mean',T36,F6.1,'%'/ 1 T16,'Std Deviation',T36,F6.1,'%'/// 1 T13,'Distribution'// 1 T16,'% capacity',T29,'% of samples (time)'/ 1 T16,'----------',T29,'-------------------'/ 1 T16,' 0 -> 10%',T29,F6.1,'%',3X,A1/ 1 T16,'10 -> 20%',T29,F6.1,'%',3X,A1/ 1 T16,'20 -> 30%',T29,F6.1,'%',3X,A1/ 1 T16,'30 -> 40%',T29,F6.1,'%',3X,A1/ 1 T16,'40 -> 50%',T29,F6.1,'%',3X,A1/ 1 T16,'50 -> 60%',T29,F6.1,'%',3X,A1/ 1 T16,'60 -> 70%',T29,F6.1,'%',3X,A1/ 1 T16,'70 -> 80%',T29,F6.1,'%',3X,A1/ 1 T16,'80 -> 90%',T29,F6.1,'%',3X,A1/ 1 T16,'90 -> 100%',T29,F6.1,'%',3X,A1///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT NODE POOL STATISTICS C --------------------------- C CALL PAGE C C WRITE(6,6016) NODMIN,NODMAX,NODAVG,NODSTD, 1 HOLMIN,HOLMAX,HOLAVG,HOLSTD C 6016 FORMAT( T11,'System Common Area (Node Pool) Statistics'/ 1 T11,'========================================='// 1 T13,'Minimum Free Nodes',T36,F7.0/ 1 T13,'Maximum Free Nodes',T36,F7.0/ 1 T13,'Mean',T36,F7.0/ 1 T13,'Std Deviation',T36,F7.0// 1 T13,'Minimum Largest Hole',T36,F7.0/ 1 T13,'Maximum Largest Hole',T36,F7.0/ 1 T13,'Mean',T36,F7.0/ 1 T13,'Std Deviation',T36,F7.0///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TASK STATISTICS C ----------------------------- C CALL PAGE C C WRITE(6,6018) ATLMIN, 1 ATLMAX, 1 ATLAVG, 1 ATLSTD, 1 (ATLDST(I), 1 (HISTOG(J),J=1,LHISTO(ATLDST(I),ITMP)),I=1,10) C 6018 FORMAT( T11,'Task Activity Statistics (ATL entries)'/ 1 T11,'======================================'// 1 T13,'Task Activity (# of ATL entries)'// 1 T16,'Minimum',T36,F7.0/ 1 T16,'Maximum',T36,F7.0/ 1 T16,'Mean',T36,F7.0/ 1 T16,'Std Deviation',T36,F7.0/// 1 T13,'Distribution'// 1 T16,'# of Tasks',T29,'% of samples (time)'/ 1 T16,'----------',T29,'-------------------'/ 1 T16,' -> 0',T29,F6.1,'%',3X,A1/ 1 T16,' 1 -> 8',T29,F6.1,'%',3X,A1/ 1 T16,' 9 -> 16',T29,F6.1,'%',3X,A1/ 1 T16,' 17 -> 24',T29,F6.1,'%',3X,A1/ 1 T16,' 25 -> 32',T29,F6.1,'%',3X,A1/ 1 T16,' 33 -> 40',T29,F6.1,'%',3X,A1/ 1 T16,' 41 -> 48',T29,F6.1,'%',3X,A1/ 1 T16,' 49 -> 56',T29,F6.1,'%',3X,A1/ 1 T16,' 57 -> 64',T29,F6.1,'%',3X,A1/ 1 T16,' 65 -> ',T29,F6.1,'%',3X,A1///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TASK STATISTICS - CNTD C ------------------------------------ C CALL PAGE C C WRITE(6,6020) UTLMIN, 1 UTLMAX, 1 UTLAVG, 1 UTLSTD, 1 (UTLDST(I), 1 (HISTOG(J),J=1,LHISTO(UTLDST(I),ITMP)),I=1,10) C 6020 FORMAT( T11,'Task Activity Statistics (UTL entries)'/ 1 T11,'======================================'// 1 T13,'Task Activity (# of UTL entries)'// 1 T16,'Minimum',T36,F7.0/ 1 T16,'Maximum',T36,F7.0/ 1 T16,'Mean',T36,F7.0/ 1 T16,'Std Deviation',T36,F7.0/// 1 T13,'Distribution'// 1 T16,'# of Tasks',T29,'% of samples (time)'/ 1 T16,'----------',T29,'-------------------'/ 1 T16,' -> 0',T29,F6.1,'%',3X,A1/ 1 T16,' 1 -> 4',T29,F6.1,'%',3X,A1/ 1 T16,' 5 -> 8',T29,F6.1,'%',3X,A1/ 1 T16,' 9 -> 12',T29,F6.1,'%',3X,A1/ 1 T16,' 13 -> 16',T29,F6.1,'%',3X,A1/ 1 T16,' 17 -> 20',T29,F6.1,'%',3X,A1/ 1 T16,' 21 -> 24',T29,F6.1,'%',3X,A1/ 1 T16,' 25 -> 28',T29,F6.1,'%',3X,A1/ 1 T16,' 29 -> 32',T29,F6.1,'%',3X,A1/ 1 T16,' 33 -> ',T29,F6.1,'%',3X,A1///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TASK STATISTICS - CNTD C ------------------------------------ C WRITE(6,6022) LVLMIN, 1 LVLMAX, 1 LVLAVG, 1 LVLSTD, 1 LVLDST C 6022 FORMAT( T13,'Scheduler Levels'/ 1 T16,' TTY I/O CPU Batch'/ 1 T16,'-----------------------------------------'/ 1 T16,'Minimum',T29,4F7.0/ 1 T16,'Maximum',T29,4F7.0/ 1 T16,'Mean',T29,4F7.0/ 1 T16,'Std Deviation',T29,4F7.0/// 1 T13,'Distribution'// 1 T16,'# of Tasks',T29,' % of samples (time)'/ 1 T16,'----------',T29,'----------------------------'/ 1 T16,' -> 0',T29,4(F6.1,'%')/ 1 T16,' 1 -> 4',T29,4(F6.1,'%')/ 1 T16,' 5 -> 8',T29,4(F6.1,'%')/ 1 T16,' 9 -> 12',T29,4(F6.1,'%')/ 1 T16,' 13 -> 16',T29,4(F6.1,'%')/ 1 T16,' 17 -> 20',T29,4(F6.1,'%')/ 1 T16,' 21 -> 24',T29,4(F6.1,'%')/ 1 T16,' 25 -> 28',T29,4(F6.1,'%')/ 1 T16,' 29 -> 32',T29,4(F6.1,'%')/ 1 T16,' 33 -> ',T29,4(F6.1,'%')///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TASK STATISTICS - CNTD C ------------------------------------ C CALL PAGE C C WRITE(6,6024) JOBDST(1) 6024 FORMAT( T11,'Task Activity Statistics'/ 1 T11,'========================'// 1 T13,'Task Activity (% of connect-time)'// 1 T16,'Idle',F8.2,'%'/) C C IF(JOBNUM.EQ.0) GO TO 6030 C DO 6028 I=2,MIN(42,JOBNUM) C WRITE(6,6026) ((ASCJOB(JOBNAM(J)),JOBDST(J)),J=I,JOBNUM,42) 6026 FORMAT( T13,3(3X,A6,F6.2,'%',:)) C 6028 CONTINUE C C 6030 IF(JOBDST(128).GT.0) WRITE(6,6032) JOBDST(128) 6032 FORMAT(/T16,'Other',F7.2,'%') C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TERMINAL STATISTICS C --------------------------------- C CALL PAGE C C WRITE(6,6034) TTAMIN, 1 TTAMAX, 1 TTAAVG, 1 TTASTD, 1 (TTADST(I), 1 (HISTOG(J),J=1,LHISTO(TTADST(I),ITMP)),I=1,10) C 6034 FORMAT( T11,'Terminal Activity Statistics'/ 1 T11,'============================'// 1 T13,'Terminal Activity (# of active terminals)'// 1 T16,'Minimum',T36,F7.0/ 1 T16,'Maximum',T36,F7.0/ 1 T16,'Mean',T36,F7.0/ 1 T16,'Std Deviation',T36,F7.0/// 1 T13,'Distribution'// 1 T16,'# of TTYs',T29,'% of samples (time)'/ 1 T16,'----------',T29,'-------------------'/ 1 T16,' -> 0',T29,F6.1,'%',3X,A1/ 1 T16,' 1 -> 4',T29,F6.1,'%',3X,A1/ 1 T16,' 5 -> 8',T29,F6.1,'%',3X,A1/ 1 T16,' 9 -> 12',T29,F6.1,'%',3X,A1/ 1 T16,' 13 -> 16',T29,F6.1,'%',3X,A1/ 1 T16,' 17 -> 20',T29,F6.1,'%',3X,A1/ 1 T16,' 21 -> 24',T29,F6.1,'%',3X,A1/ 1 T16,' 25 -> 28',T29,F6.1,'%',3X,A1/ 1 T16,' 29 -> 32',T29,F6.1,'%',3X,A1/ 1 T16,' 33 -> ',T29,F6.1,'%',3X,A1///) C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C OUTPUT ACTIVE TERMINAL STATISTICS - CNTD C ---------------------------------------- C WRITE(6,6036) CHADST C 6036 FORMAT( T13,'Channel activity (% of connect-time)'// 1 T16,'Console',T36,F6.1,'%'/ 1 T16,'Batch',T36,F6.1,'%'/ 1 T16,'Dialup',T36,F6.1,'%'/ 1 T16,'Dedicated',T36,F6.1,'%'//) C C IF(TUNMAX.LT."01) GO TO 6042 C DO 6040 I="01,MIN("20,TUNMAX) C WRITE(6,6038) ((IOCT(J),TTYDST(J)),J=I,TUNMAX,"20) 6038 FORMAT( T13,4(3X,'TT',A2,':',F5.1,'%',:)) C 6040 CONTINUE C C C OUTPUT SYSTEM ACTIVITY REPORT - CNTD C C C CLOSE REPORT FILE C ----------------- C 6042 CALL PAGE C WRITE(6,6044) 6044 FORMAT( 10(/),T26,'CPU Utilization vs Time-of-Day' 1 25(/),T25,'Memory Utilization vs Time-of-Day') C C CALL PAGE C WRITE(6,6046) 6046 FORMAT( 10(/),T25,'Terminal Activity vs Time-of-Day') C C WRITE(6,6048) 6048 FORMAT(1H1) C C CLOSE(UNIT=6) C C C E X I T C ======= C C 80 CALL EXIT C C END FUNCTION STDDEV(SUM,SSQ,N) C ========================== C REAL SUM REAL SSQ INTEGER*4 N C C IF(N.LE.1) STDDEV=0.0 IF(N.GT.1) STDDEV=SQRT((SSQ-SUM**2/N)/(N-1)) C RETURN END SUBROUTINE LINE(N) C ================== C INTEGER ILINE INTEGER IPAGE INTEGER IDIGS BYTE ADATE(10) BYTE ATIME(9) C C ILINE=ILINE+N C IF(ILINE.GT.60) GO TO 10 RETURN C C C ENTRY TPAGE(N) C =============== C IF((ILINE+N).GT.60) GO TO 10 RETURN C C C ENTRY PAGE C ========== C 10 IF(IPAGE.EQ.0) CALL DAYTIM(ADATE,ITMP,ATIME) C IPAGE=IPAGE+1 IDIGS=LOG10(FLOAT(IPAGE))+1 C C WRITE(6,1002) IPAGE, 1 ATIME,ADATE C 1002 FORMAT( 1H1/ 1 T11,60('*')/ 1 T11,'System Activity Log (SALLOG) Analysis Report', 1 T<65-IDIGS>,'Page ',I,'.'/ 1 T11,'Compiled ',9A1,1X,10A1/ 1 T11,60('*')///) C ILINE=11 C RETURN END REAL*8 FUNCTION ASCJOB(R50JOB) C ============================== C INTEGER R50JOB C CALL R50ASC(6,R50JOB,ASCJOB) C RETURN END FUNCTION IDEC(I) C ================ C CALL ACNVT(I,IDEC,2,10,'0') C RETURN END FUNCTION IOCT(I) C ================ C CALL ACNVT(I,IOCT,2,8,'0') C RETURN END FUNCTION LHISTO(PCT,ILEN) C ========================= C ILEN=PCT/5.0+1.5 C LHISTO=ILEN C RETURN END