(* Author: J.Liedtke*)
PACKET eumelmeter DEFINES (* Stand: 11.10.83 *)
init log ,
log :
LET snapshot interval = 590.0 ;
REAL VAR next snapshot time ,
time , timex ,
paging wait , paging wait x ,
paging busy , paging busy x ,
fore cpu , fore cpu x ,
back cpu , back cpu x ,
system cpu , system cpu x ,
delta t ;
INT VAR storage max, used ;
TEXT VAR record ;
PROC init log :
time := clock (1) ;
paging wait := clock (2) ;
paging busy := clock (3) ;
fore cpu := clock (4) ;
back cpu := clock (5) ;
system cpu := clock (6) ;
next snapshot time := time + snapshot interval
ENDPROC init log ;
PROC log (INT CONST active terminals, active background) :
new snapshot time if was clock reset ;
IF clock (1) >= next snapshot time
THEN save values ;
get new values ;
create stat record ;
put log (record) ;
define next snapshot time
FI .
new snapshot time if was clock reset :
IF clock (1) < next snapshot time - snapshot interval
THEN next snapshot time := clock (1)
FI .
save values :
time x := time ;
paging wait x := paging wait ;
paging busy x := paging busy ;
fore cpu x := fore cpu ;
back cpu x := back cpu ;
system cpu x := system cpu .
get new values :
time := clock (1) ;
paging wait := clock (2) ;
paging busy := clock (3) ;
fore cpu := clock (4) ;
back cpu := clock (5) ;
system cpu := clock (6) ;
storage (storage max, used) .
create stat record :
record := text (used, 5) ;
record CAT text (active terminals,3) ;
record CAT text (active background,3) ;
delta t := (time - time x) ;
percent (paging wait, paging wait x) ;
percent (paging busy, paging busy x) ;
percent (fore cpu, fore cpu x) ;
percent (back cpu, back cpu x) ;
percent (system cpu, system cpu x) ;
percent (last, 0.0) ;
percent (nutz, 0.0) .
last : paging wait + paging busy + fore cpu + back cpu + system cpu
- paging waitx - paging busyx - fore cpux - back cpux - system cpux .
nutz : time - paging wait - system cpu
- timex + paging waitx + system cpux .
define next snapshot time :
next snapshot time := time + snapshot interval .
ENDPROC log ;
PROC percent (REAL CONST neu, alt ) :
record CAT text ( (neu-alt) / delta t * 100.0, 6,1) + "%"
ENDPROC percent ;
ENDPACKET eumelmeter ;
INT VAR active terminals , active background ;
task password ("-") ;
break ;
command dialogue (FALSE) ;
forget ("eumelmeter") ;
init log ;
REP
pause (6000) ;
count active processes (active terminals, active background) ;
log (active terminals, active background)
PER ;
PROC count active processes (INT VAR active terminals, active background) :
active terminals := 0 ;
active background := 0 ;
TASK VAR process := myself ;
REP
next active (process) ;
IF user process
THEN IF process at terminal
THEN active terminals INCR 1
ELSE active background INCR 1
FI
FI
UNTIL process = myself PER .
user process : NOT (process < supervisor) .
process at terminal : channel (process) >= 0 .
ENDPROC count active processes ;