1 ! ! RSTS/E SYSTEM PERFORMANCE MEASUREMENT - V5B-24 ! WRITTEN BY: I.F. (BUD) DAWSON MACMILLAN BLOEDEL LTD. 1075 W. GEORGIA STREET VANCOUVER, B.C. CANADA V6E3R9 2! RELATED PROGRAMS LOGTIM - CREATES INPUT FILES TO THIS PROGRAM PRTIME - READS SAME INPUT FILES AS THIS PROGRAM AND PRINTS TABULAR OUTPUT SUMGPH - READS SAME INPUT FILES, SUMMARIZES THEM AND PRINTS GRAPH OUTPUT 3! DATE WRITTEN : MARCH, 1975 'LOGTIM' WILL HAVE CREATED A VIRTUAL ARRAY OF SYSTEM STATISTICS FOR EACH DAY THAT IS WAS RUNNING. THIS PROGRAM WILL PRINT THOSE STATISTICS DEALING WITH CPU TIME IN A GRAPH FORM, ONE PAGE (FILE) 4! FOR EACH DAY. THE '*' MAY BE CONNECTED TO GET A LINE SHOWING 'CPU TIME CHARGED TO USERS', BY HOUR WITHIN THE DAY. THE '+' MAY BE CONNECTED TO GET A LINE SHOWING 'TOTAL CPU TIME USED', (IE INC- 5! LUDING SYSTEM OVERHEAD), FOR EACH HOUR WITHIN THE DAY. PART OR ALL DAYS OF ANY MONTH BE PRINTED. SUBSEQUENT MONTH'S FILES MAY BE PRINTED BY SUBSEQUENT RUNS OF THIS JOB. 100 DIM #1%, T$(32%) = 128% 110 INPUT 'ENTER MONTH TO DUMP AS XXX'; M$ : IF LEN(M$) <> 3% THEN &'INVALID MONTH - USE JAN FOR JANUARY, FOR EXAMPLE' : GOTO 110 120 INPUT 'FULL MONTH (F) OR PARTIAL MONTH (P)'; M1$ : IF LEFT(M1$,1%) = 'F' THEN 130 ELSE IF LEFT(M1$,1%) <> 'P' THEN 120 ELSE INPUT 'START DAY'; S8% : INPUT 'STOP DAY '; S9% : GOTO 140 ! GET RANGE TO REPORT ON 130 S8% = 1% : S9% = 31% ! SET RANGE FOR FULL MONTH 140 IF S8% > S9% THEN &'STOP DAY MUST BE GREATER THAN START DAY' : GOTO 120 150 FOR J% = S8% TO S9% : GOSUB 1000 ! DO REQUESTED RANGE OR FULL MONTH 160 IF E% = 1% THEN E% = 0% : GOTO 230 ! NO FILE FOR THAT DAY - CONTINUE 170 FOR I% = 8% TO 32% ! ONLY LOOK AT ACTUAL DATA LINES 180 P$ = T$(I%) : IF LEFT(P$,4%) = '****' THEN GOTO 200 ! NO DATA FOR THAT HOUR 190 GOSUB 2000 ! PRINT A LINE ON THE REPORT 200 NEXT I% 210 CLOSE 1%, 2% ! CLOSE INPUT AND OUTPUT FILES 220 GOSUB 32100 ! SEND TEMP FILE TO SPOOLER 230 NEXT J% ! GET NEXT DAY'S FILE 240 GOTO 32767 1000 ! ! ESTABLISH NAMES OF FILES USING MONTH FROM M$ AND DATES FROM ! 1 TO 31 IN FORMAT 'MMMDD.' ALSO OPEN CORRESPONDING TEMP. DISK ! FILE TO SEND TO SPOOLER FOR EACH DAY, IN FORMAT 'MMMDD.GPH' ! 1010 J$ = NUM$(J%) : J$ = RIGHT(J$,2%) : IF J% < 10% THEN J$ = '0' + J$ 1012 J$ = M$ + LEFT(J$,2%) ! PUT MONTH AND DAY TOGETHER FOR NAME 1015 ON ERROR GO TO 1100 1020 OPEN '[10,2]' + J$ FOR INPUT AS FILE 1% 1030 L$ = J$ + '.GPH' 1040 OPEN L$ FOR OUTPUT AS FILE 2% 1050 PRINT #2%, CHR$(12%) ! SKIP TO NEW PAGE 1052 PRINT #2%, TAB(10%); 1053 PRINT #2%, "CPU TIME CHARGED TO USER'S, (*), AND TOTAL CPU TIME USED, (+)"; 1054 PRINT #2%, ' WITH '; MID(T$(1%),67%,28%) : PRINT #2% : PRINT #2% 1055 PRINT #2%, TAB(6%); 'AVG USERS 0'; ! PRINT HEADING FOR AVG # USERS & 0% 1060 PRINT #2%, '....5...10...15...20...25...30...35...40...45...50'; '...55...60...65...70...75...80...85...90...95..100' 1065 PRINT #2% 1099 RETURN 1100 ! ! TRAP IF NO INPUT FILE FOR A CERTAIN DAY ! 1110 IF ERR = 5% AND ERL = 1020 THEN E% = 1% : RESUME 1099 ! SET SWITCH TO SAY 'NO FILE' 1120 ON ERROR GO TO 0 2000 ! ! PRINT TWO SYMBOLS ON THE GRAPH FOR EACH HOUR. THE FIRST, '*', ! REPRESENTS 'CPU TIME LOGGED BY ALL USERS', AND THE OTHER, '+', ! REPRESENTS THAT TIME PLUS SYSTEM OVERHEAD, (IE. ALL TIME USED). ! 2010 T1$ = T$(I%) ! GET NEXT HOUR'S LINE 2015 IF INSTR(1%,T1$,':') = 3% THEN GOTO 2025 ! IF NO AVER # USERS ON THIS REPORT 2019 B2% = 1% ! SET SWITCH FOR LATER 2020 PRINT #2%, MID(T1$,3%,5%); ! PRINT TIME OF SAMPLE 2022 PRINT #2%, ' '; LEFT(T1$,2%); ! PRINT AVERAGE # OF USERS IN PREV HOUR, TO WHICH THIS LINE APPLIES 2023 GOTO 2030 2025 PRINT #2%, LEFT(T1$,5%); ! PRINT TIME OF SAMPLE 2026 B2% = 0% ! SET OFF IF NO AVG # USERS ON INPUT 2030 M% = INSTR(1%,T1$,'.') ! FIND '.' IN 'USER RUN TIME' 2040 U% = VAL(MID(T1$,M%-2%,2%)) ! GET INTEGER VAL OF % FIGURE 2050 PRINT #2%, TAB(U%+16%); '*'; ! PRINT '*' FOR 'USER RUN TIME' 2060 M% = INSTR(43%,T1$,'.') ! FIND '.' IN 'NULL TIME' 2070 U% = VAL(MID(T1$,M%-2%,2%)) ! GET INTEGER OF NULL TIME 2075 U = U% + VAL(MID(T1$,M%,3%)) ! GET FRACTION AND ADD TO INTEGER VALUE OF NULL TIME 2080 U = 100. - U ! SUBT FROM 100% TO GET TOTAL TIME THAT WAS NOT NULL TIME 2090 PRINT #2%, TAB(U+16%); '+' : PRINT #2% ! PRINT '+' FOR TOTAL TIME 2099 RETURN 32100 ! ! THIS ROUTINE SUBMITTED THE NAMES OF ALL FILES CREATED TO A ! SPOOLER FOR PRINTING. IF SPOOLER IS NOT IN OPERATION, ! THE FORMATTED ASCII FILES MAY BE DUMPED TO ANY TERMINAL VIA $PIP. 32101 ! IF A SPOOLER IS IN OPERATION, LOGIC MAY BE INSERTED HERE TO ! HAVE THE FILES PRINTED. 32500 RETURN 32767 END