! ! ! DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY ! DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY ! ! ! %CONTROL K'001001' ! ! %BEGIN ! ! ! !R.MCL. //G.J.B. // J.C.A. STARTED 20:03:78 ! ??? LAST UPDATE 15:11:78 - FILE DLOG8S ! ! ! ! --- STACK NORMAL --- ! ! ! ! ! ######################################################## ! # # ! # ANALYSIS OF E.R.T.E. RUN-LOGS # ! # # ! ######################################################## ! ! ! ! !ANALYSES LOG FILE PRODUCED DURING RUNS OF STIMULATOR MK 2.5 !CHECKS TO SEE IF E.R.T.E. RUN SUCCESSFUL ! ! VERSION 4:HANDLES TIMER OVERFLOW ! DETECTS 2970 DOWN ! PRINTS OUT MESSAGE TO OUTPUT FILE WHEN ! ALL THE VIRUAL CONSOLES ARE IN 'TROUBLE' ! VERSION 5:GIVES NO OF LOGONS,EMAS?S,ETC. AT END OF ! STANDARD MEASUREMENT WINDOW(38 MINUTES) ! ! VERSION 6: MEASUREMENT WINDOW DOES NOT INCLUDE FIRST 8 MINS ! VERSION 7: MODIFIED FOR TCPZ10 ONWARDS(NO HOST PROMPT LOGGED , *** INSTEAD) ! ! ! ! INPUT: ! STREAM 0 COMMAND STREAM ! STREAM 1 DATA LOG FROM STIMULATOR RUN ! ! OUTPUT: ! STREAM 1 RESULTS ! ! %OWNSTRING(64) HEAD='E.R.T.E. XOT FILE CERTIFICATION PROGRAM ' %OWNSTRING(18) VERS='15:11:78 VERSION 7' ! ! !************************************************************************** ! ! ! %CONSTINTEGER PERSEC=10; !TICKS PER SECOND ! %CONSTINTEGER EOF=4 %CONSTBYTEINTEGER END CHAR='+' %CONSTBYTEINTEGER START SYMB='*' %CONSTINTEGER MTEXTL=200 %CONSTINTEGER OVERFLOW=32767 %CONSTINTEGER FROMCNSL=1 %CONSTINTEGER FROMSYS=2 ! %CONSTINTEGER FOUR75=0; ! EMAS 4-75 %CONSTINTEGER TW900=1 ; ! 2900 ! %CONSTINTEGER YES=1 %CONSTINTEGER NO=0 ! %CONSTINTEGER CR=13 %CONSTINTEGER LF=10 ! %CONSTINTEGER UNUSED=-1 %CONSTINTEGER NORMAL=0; ! CONSOLE STATUS %CONSTINTEGER RECOVERED=1 %CONSTINTEGER TROUBLE=2 ! %CONSTINTEGER SKIPS=8 %CONSTINTEGER WINDOW=38 ! ! !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! ! ! ! %OWNINTEGERARRAY TEXT(0:MTEXTL) ! ! !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! ! %INTEGER F,G,H %INTEGER RECORDS,FIRST TIME,LSTLOGT,CLTIME,CLRECS ! RECORDS-NO OF RECORDS IN LOG FILE ! FIRST TIME-TIME OF FIRST MESSAGE IN FILE ! LSTLOGT-TIME OF LAST DISTINCT CONSOLE LOG-ON ! CLTIME-TIME UPTO WHICH LOG IS 'CLEAN' ! CLRECS-NO OF 'CLEAN' RECORDS %INTEGER NOHOSTS,NOPRST; ! NO OF LOGON REQUESTS AND NO OF LOGONS %INTEGER TIME,DIRECTION,TT,LENGTH %INTEGER LAST TIME; ! TIME OF LAST MESSAGE %INTEGER NOCONS,NOLOG;! NO OF CONSOLES MET AND NO THAT MANAGED TO LOGON %INTEGER DATE;! USED TO TELL IF DATE HAS BEEN PRINTED YET %INTEGERARRAY LOGONS(0:60); ! STORES LOGON STATUS INFO FOR CONSOLES ! -1:UNUSED 0:FIRST LOGON REQUEST >0:NO OF LOGONS %INTEGER HUNG; ! SET IF ALL CONSOLES IN TROUBLE %OWNINTEGER SYSTEM; ! SET TO EITHER 4-75 OR 2900 ! %INTEGER OVF,CLOVF,LOGOVF; ! USED FOR TIMER OVERFLOW RECOVERY ! %INTEGER SKT,WDW ! ! ! ! ! !**************************************************************************** ! ! %OWNINTEGER PROBS=10 ! %RECORDFORMAT CE(%INTEGER STATUS,%INTEGERARRAY PROBOCC(1:10)) %RECORD(CE) %ARRAY CSL(0:60) ! %OWNINTEGERARRAY PS(0:146)='E','M','A','S','?','N','O',' ','U','S', 'E','R',' ','S','E','R','V','I','C','E','S','Y','S','T','E','M', ' ','D','O','W','N','I','N','V','A','L','I','D',' ','P','A','S', 'S','W','O','R','D','S','Y','S','T','E','M',' ','F','U','L','L', 'E','M','A','S',' ','A',' ','I','N','V','A','L','I','D',' ','U', 'S','E','R','E','M','A','S',' ','B',' ','I','N','V','A','L','I', 'D',' ','U','S','E','R','E','M','A','S',' ','A',' ','N','O','T', ' ','A','V','A','I','L','A','B','L','E','E','M','A','S',' ','B', ' ','N','O','T',' ','A','V','A','I','L','A','B','L','E', '*','*','2','9','7','0',' ','D','O','W','N' %OWNINTEGERARRAY PBASE(1:10)=0,5,20,31,47,58,77,96,116,136 %OWNINTEGERARRAY PLEN(1:10)=5,15,11,16,11,19,19,20,20,11 ! %OWNINTEGERARRAY PROCST(0:30)='P','R','O','C','E','S','S',' ', 'S','T','A','R','T','E','D', 'L','O','G','O','N',' ','S','U','C','C','E', 'S','S','F','U','L' %OWNINTEGERARRAY HOST(0:6)=CR,LF,'H','O','S','T',':' %OWNINTEGERARRAY SS(0:1)='S','S' ! !MATCH ATTEMPS TO MATCH LEN CHARACTERS FROM STANDARD, STARTING AT !BASE, WITH THE FIRST CHARACTERS IN TEXT ! ! %PREDICATE MATCH(%INTEGERARRAYNAME STANDARD,%INTEGER BASE,LEN,TXBASE) %INTEGER F %FALSE %IF LENGTH=0 %THEN NOCONS=NOCONS+1 %IF LOGONS(F)>0 %THEN NOLOG=NOLOG+1 %REPEAT ! WRITE(NOCONS,3);PRINTSTRING(' VIRTUAL CONSOLES ') WRITE(NOLOG,3); PRINTSTRING(' LOGGED ON') NEWLINE ! ! NO OF ACTUAL LOGONS MADE WRITE(NOPRST,3);PRINTSTRING(' LOGONS MADE ') ! NO OF UNGRANTED LOGON REQUESTS F=NOHOSTS-NOPRST WRITE(F,3);PRINTSTRING(' UNGRANTED LOGON REQUESTS') NEWLINE ! %END ! ! %ROUTINE PRINT FIGS ! PRINTS OUT NO OF LOGONS,EMAS?S,ETC. ! FOR STANDARD MEASUREMENT WINDOW %OWNINTEGERARRAY SKIPS(1:10)=0(10) %OWNINTEGER BEEN=0 %INTEGER F,G,C ! %IF BEEN=0 %THEN PRINTSTRING('** FIRST 8 MINS :') %ELSE %C PRINTSTRING('** STANDARD MEASUREMENT WINDOW :');NEWLINE BEEN=1 %CYCLE G=1,1,PROBS C=0 %CYCLE F=0,1,60 C=C+CSL(F)_PROBOCC(G) %REPEAT %IF C>0 %THENSTART %CYCLE F=1,1,PLEN(G) PRINTSYMBOL(PS(PBASE(G)+F-1)) %REPEAT PRINTSTRING(' ') WRITE(C-SKIPS(G),3) SKIPS(G)=C PRINTSTRING(' OCCURRENCES');NEWLINE %FINISH %REPEAT DUMP FIGS NEWLINE %END ! ! %PREDICATE ALL HUNG ! ARE ALL THE VIRTUAL CONSOLES IN TROUBLE %INTEGER F %CYCLE F=0,1,60 %FALSE %UNLESS CSL(F)_STATUS=TROUBLE %OR CSL(F)_STATUS=UNUSED %REPEAT %CYCLE F=0,1,60 %TRUE %IF CSL(F)_STATUS=TROUBLE %REPEAT %FALSE %END ! ! %EXTERNALROUTINESPEC READX(%INTEGERNAME X) ! ! !*************************************************************************** ! ! ! %CYCLE F=0,1,MTEXTL TEXT(F)=0 %REPEAT %CYCLE F=0,1,60 LOGONS(F)=UNUSED %REPEAT %CYCLE F=0,1,60 CSL(F)_STATUS=UNUSED %CYCLE G=1,1,PROBS CSL(F)_PROBOCC(G)=0 %REPEAT %REPEAT RECORDS=0; FIRST TIME=0 OVF=0; LSTLOGT=0 CLTIME=-1; CLRECS=0; CLOVF=0 NOHOSTS=0 ;NOPRST=0 TIME=0; LAST TIME=0; LOGOVF=0 DATE=NO; HUNG=NO SKT=SKIPS*60*PERSEC WDW=WINDOW*60*PERSEC ! ! ! TELL WHO WE ARE ! PRINTSTRING(HEAD) NEWLINE PRINTSTRING(VERS); NEWLINE ! ! !GET TITLE FOR THIS LOG FROM USER ! ! PRINTSTRING('TITLE: ') NEWLINE ! ! SELECT OUTPUT(1) PRINT SYMBOL(12) ! ! %CYCLE READ SYMBOL(F) PRINT SYMBOL(F) %EXIT %IF F=NL %REPEAT ! ! SELECT INPUT(1) ! ! !***************************************************************************** ! ! !FIND AND SKIP TITLE LINE IN DATA LOG ! ! SKIP SYMBOL %WHILE NEXT SYMBOL#START SYMB %CYCLE SELECT OUTPUT(0) READ SYMBOL(F) PRINT SYMBOL(F) SELECT OUTPUT(1) PRINT SYMBOL(F) ! %IF F=NL %THEN %EXIT %REPEAT ! ! ! ! !************************************************************************** ! ! !MAIN LOOP !READ IN AND ANALYSE EACH LINE OF THE LOG ! ! %CYCLE ! ! %EXIT %IF NEXT SYMBOL=END CHAR %OR NEXT SYMBOL=EOF ! ! RECORDS=RECORDS+1; !TOTAL NO OF RECORDS IN FILE ! ! !READ LINE IN ! READX(TIME) !######## %IF TIME=0 %THEN TIME=LAST TIME; !SOME BAD TIMES IN TCPX91 !######## ! %IF FIRST TIME=0 %THEN FIRST TIME=TIME %IF TIME0 %START ! !READ IN TEXT OF MESSAGE PASSED ! SKIP SYMBOL; !ALWAYS A SPACE AT START ! ! %CYCLE F=1,1,LENGTH READ SYMBOL(TEXT(F)) %REPEAT %FINISH ! ! ! !IGNORE ANY ERRONEOUS DATA. ALIST WILL GIVE FURTHER DETAILS ! %CONTINUE %IF TT<0 %OR DIRECTION<1 ! ! ! !&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! !ANALYSE AND STORE DATA ! !&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ! ! %IF DIRECTION=FROMSYS %THENSTART ! ! CONSOLE SUCCESSFULLY LOGGED ON? %IF MATCH(PROCST,0,15,1) %OR MATCH(PROCST,15,16,1) %THENSTART ! ! %IF MATCH(PROCST,0,15,1) %THEN SYSTEM=FOUR75 %AND PRINT DATE %C %ELSE SYSTEM=TW900 %IF CSL(TT)_STATUS=UNUSED %THEN CSL(TT)_STATUS=NORMAL %IF CSL(TT)_STATUS=TROUBLE %THEN CSL(TT)_STATUS=RECOVERED %IF LOGONS(TT)=0 %THEN LSTLOGT=TIME %AND LOGOVF=OVF ! IF FIRST TIME LOGGED ON THEN RECORD TIME ! LOGONS(TT)=LOGONS(TT)+1 ! NOPRST=NOPRST+1; ! NO OF RUNNING CONSOLE PROCESSES ! ! %FINISH ! %IF DIRECTION=FROMCNSL %THEN %START ! CONSOLE SUCCESSFULLY LOGGED ON? %IF MATCH(HOST,0,7,1) %OR MATCH(HOST,2,5,1) %THEN %START NOHOSTS=NOHOSTS+1 %IF LOGONS(TT)=UNUSED %THEN LOGONS(TT)=0 %FINISH %FINISH %IF SYSTEM=TW900 %AND MATCH(SS,0,2,1) %THEN PRINT DATE ! ! LOOK FOR TROUBLE ! %CYCLE F=1,1,PROBS ! %CYCLE G=1,1,5 %IF MATCH(PS,PBASE(F),PLEN(F),G) %THENSTART ! ! FOUND TROUBLE ! ! WAS RUN CLEAN SO FAR? %IF CLTIME<0 %THENSTART CLTIME=LAST TIME CLRECS=RECORDS-1 CLOVF=OVF %FINISH ! %IF CSL(TT)_PROBOCC(F)=0 %THEN PRINTPROB(TIME,TT,LENGTH) CSL(TT)_PROBOCC(F)=CSL(TT)_PROBOCC(F)+1 CSL(TT)_STATUS=TROUBLE ! %FINISH %REPEAT ! %REPEAT ! ! ! IF ALL THE CONSOLES ARE IN TROUBLE MAKE A NOTE OF THIS %IF ALL HUNG %AND HUNG=NO %THENSTART ! HUNG=YES G=0 %CYCLE F=0,1,60 %IF LOGONS(F)>=0 %THEN G=G+1 %REPEAT WRITE(G,3);PRINTSTRING(' CONSOLES IN TROUBLE:FROM ') WRITE(TIME,3);PRINTSTRING(' TICKS');NEWLINE ! %FINISH ! ! HAVE THE CONSOLES RECOVERED FROM THE 'ALL HUNG' SITUATION %UNLESS ALL HUNG %THENSTART %IF HUNG=YES %THENSTART HUNG=NO PRINTSTRING(' NOT ALL CONSOLES IN TROUBLE NOW:') WRITE(TIME,3);NEWLINE %FINISH %FINISH ! ! %FINISH LAST TIME=TIME TIME=TIME-FIRST TIME ! ! STANDARD MEAS. WINDOW? %IF TIME>SKT %THEN PRINT FIGS %AND SKT=OVERFLOW %IF TIME>WDW %THEN PRINT FIGS %AND WDW=OVERFLOW ! TIMER OVERFLOW NOT CONSIDERED HERE ! FIRST TIME AND WINDOW ARE ASSUMED TO BE REASONABLE ! %IF NEXTSYMBOL=NL %THEN SKIPSYMBOL ! ! %REPEAT ! ! !*************************************************************************** ! ! ! !PRINT RESULTS ! ! SELECT OUTPUT(1) ! %IF WDW#OVERFLOW %THEN PRINTSTRING('**STAND.MEAS.WINDOW NOT FILLED ') PRINTSTRING('**END OF LOG ANALYSIS:');NEWLINE ! ! TROUBLES MET IN LOG %CYCLE F=0,1,60 %IF CSL(F)_STATUS>NORMAL %THENSTART PRINTSTRING('CONSOLE NO ');WRITE(F,3);NEWLINE %CYCLE G=1,1,PROBS %IF CSL(F)_PROBOCC(G)>0 %THENSTART %CYCLE H=1,1,PLEN(G) PRINTSYMBOL(PS(PBASE(G)+H-1)) %REPEAT PRINTSTRING(' ') WRITE(CSL(F)_PROBOCC(G),3) PRINTSTRING(' OCCURENCES');NEWLINE %FINISH %REPEAT %FINISH %REPEAT ! ! ! RUN SUCCESSFUL OR NOT? ! %IF CLTIME<0 %THENSTART ! PRINTSTRING('E.R.T.E. RUN SUCCESSFUL'); NEWLINE CLTIME=LAST TIME CLRECS=RECORDS CLOVF=OVF ! %FINISH ! ! DUMP FIGS ! ! PRINTSTRING('TIME FROM FIRST MESSAGE TO ALL LOGGED ON ') F=REL TIME(LSTLOGT,LOGOVF) PRINT TIME(F);PRINTSTRING(' (') WRITE(F,3);PRINTSTRING(' SECS)') NEWLINE ! ! PRINTSTRING('THIS XOT FILE COVERS ') F= REL TIME(LAST TIME,OVF) PRINT TIME(F);PRINTSTRING(' (') WRITE(F,3); PRINTSTRING(' SECS)') ! PRINTSTRING(' AND CONTAINS ') WRITE(RECORDS,3) ! PRINTSTRING(' RECORDS');NEWLINE ! PRINTSTRING(' AND IS CLEAN FOR ') F=REL TIME(CLTIME,CLOVF) PRINT TIME(F); PRINTSTRING(' (') WRITE(F,3); PRINTSTRING(' SECS)') PRINTSTRING(' AND ') ! WRITE(CLRECS,3) PRINTSTRING(' RECORDS');NEWLINE ! ! ! ! !************************************************************************** ! ! ! ! DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY ! DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY DLOGY ! ! %ENDOFPROGRAM !