- ZTMON1 ;SEA/RDS-TaskMan: Option, ZTMON, Part 2 (Main Loop) ;2/19/08 13:36
- ;;8.0;KERNEL;**36,118,127,275,446**;Jul 10, 1995;Build 44
- ;Per VHA Directive 2004-038, this routine should not be modified.
- MON D IO:MODE,JOB,SUB
- G DONE
- ;
- IO ;Evaluate Waiting Lists
- N X,X1
- S ZT1=$$H3($H),ZT2=$G(^%ZTSCH("IO")),ZT=$$DIFF^%ZTMS1(ZT1,+ZT2,1)
- W !!,"Checking the IO Lists:" I $D(^%ZTSCH("IO"))>2 W:+ZT2 " Last TM scan: ",ZT," sec, " W:$P(ZT2,"^",2)]"" "Last Dev: ",$P(ZT2,"^",2)
- S ZT1="",ZTT=0
- I1 S ZT1=$O(^%ZTSCH("IO",ZT1)) I ZT1="" W:ZTT=0 !?5,"There are no tasks waiting for devices." Q
- I $D(^%ZTSCH("IO",ZT1))<9 G I1 ;Skip devices without tasks
- W !?5,"Device: ",ZT1 S Y=1 I ZT1'=$I S X=ZT1,X1=$G(^%ZTSCH("IO",ZT1)) D DEVOK^%ZOSV
- W $S(Y:" is not available,",$D(^%ZTSCH("DEV",ZT1)):" is allocated,",1:" is AVAILABLE,")
- S ZTC=0,ZT2="" F ZT=0:0 S ZT2=$O(^%ZTSCH("IO",ZT1,ZT2)),ZT3="" Q:'ZT2 F ZT=0:0 S ZT3=$O(^%ZTSCH("IO",ZT1,ZT2,ZT3)) Q:ZT3="" S ZTC=ZTC+1,ZTT=1
- W " with ",$S(ZTC=1:"one task",1:ZTC_" tasks")," waiting." W:ZTC>50 $C(7)
- G I1
- ;
- JOB ;Evaluate Job List
- W !!,"Checking the Job List:"
- S ZTC=0,ZT1="" F ZT=0:0 S ZT1=$O(^%ZTSCH("JOB",ZT1)),ZT2=0 Q:ZT1="" F ZT=0:0 S ZT2=$O(^%ZTSCH("JOB",ZT1,ZT2)) Q:'ZT2 S ZTC=ZTC+1
- W !?5,"There ",$S(ZTC=0:"are no tasks",ZTC=1:"is 1 task",1:"are "_ZTC_" tasks")," waiting for ",$S(ZTC'=1:"partitions.",1:"a partition.") W:ZTC>20 $C(7)
- ;
- C ;Evaluate Cross CPU list
- S ZT1=""
- F S ZT1=$O(^%ZTSCH("C",ZT1)) Q:ZT1="" S ZTC=+$G(^(ZT1)) D
- . S ZTCO=0,ZT2=""
- . F S ZT2=$O(^%ZTSCH("C",ZT1,ZT2)),ZT3=0 Q:ZT2="" F S ZT3=$O(^%ZTSCH("C",ZT1,ZT2,ZT3)) Q:ZT3="" S ZTCO=ZTCO+1
- . W !?5,"For ",ZT1," there ",$S(ZTCO=1:"is ",1:"are "),ZTCO," tasks. "
- . W $S(ZTC>8:"Not responding",$$OOS^%ZTM(ZT1):"Out Of Service",'$D(^%ZIS(14.7,"B",ZT1)):"Not defined",1:"")
- . Q
- TASK ;Evaluate Task List
- W !!,"Checking the Task List:"
- S ZTC=0 F ZT1=0:0 S ZT1=$O(^%ZTSCH("TASK",ZT1)) Q:'ZT1 S ZTC=ZTC+1
- W !?5,"There ",$S(ZTC=0:"are no tasks",ZTC=1:"is 1 task",1:"are "_ZTC_" tasks")," currently running."
- Q
- ;
- SUB ;Look for idle submanagers
- N %N,ZT1,ZT2,ZT3,ZT4
- W !,"Checking Sub-Managers:"
- I $D(^%ZTSCH("WAIT","SUB")) W !?5,"Sub-Managers told to Wait."
- D SUBCHK^%ZTMS5(0)
- S %N=""
- F S %N=$O(^%ZTSCH("SUB",%N)) Q:%N="" D
- . S %=$G(^(%N)),ZT4=+$G(^%ZTSCH("LOADA",%N))
- . W !?5,"On node ",%N," there ",$S('%:"are no",%=1:"is 1",1:"are "_$J(%,2))," free Sub-Manager(s)."
- . W " Status: ",$S($D(^%ZTSCH("STOP","SUB",%N)):"Stop",ZT4:"BWait",1:"Run")
- . I $G(^%ZTSCH("SUB",%N,0))>5 W !?10,"SUB-MANAGERS ARE NOT STARTING."
- . Q
- Q
- ;
- DONE ;Prompt to Quit Or Continue
- W !!,"Enter monitor action: UPDATE// "
- R ZTR:$S($D(DTIME)#2:DTIME,1:60) S:ZTR="" ZTR="U"
- I "Uu"[$E(ZTR) G MON^ZTMON
- I "Ee"[$E(ZTR) Q:$$CALL("LIST^XUTMKE") G DONE
- I "Ss"[$E(ZTR) W @IOF X ^%ZOSF("SS") G DONE
- I "Pp"[$E(ZTR) W @IOF D PARAMS^ZTMCHK G DONE
- I "Rr"[$E(ZTR) W @IOF D RES G DONE
- I "Tt"[$E(ZTR) S MODE='MODE W !,"Mode set to ",$S(MODE:"normal",1:"short") G DONE
- I ZTR="^"!(ZTR="@") Q
- I ZTR'["?" G MON^ZTMON
- I ZTR="??" Q:$$CALL("SELECT^XUTMONH") G MON^ZTMON
- W !!?5,"Enter <RETURN> to update the monitor screen."
- W !?5,"Enter ^ to exit the monitor."
- W !?5,"Enter E to inspect the TaskMan Error file."
- W !?5,"Enter P to see taskman parameters."
- W !?5,"Enter R to see busy Resource slots."
- W !?5,"Enter S to see a system status listing."
- W !?5,"Enter ? to see this message."
- W !?5,"Enter ?? to inspect the tasks in the monitor's lists."
- G DONE
- ;
- H3(%) ;Convert $H to seconds.
- Q 86400*%+$P(%,",",2)
- ;
- CALL(RTN) ;Check for called routine
- N DUOUT
- I $D(^DIC(19,0))[0 W !,"In the wrong account." Q 0
- D @RTN Q $D(DUOUT)
- ;
- RES ;Check on resource devices
- N ZT1,ZT2,ZT3,ZTIM,X
- S ZT1=""
- F S ZT1=$O(^%ZTSCH("IO",ZT1)) Q:ZT1="" I ^%ZTSCH("IO",ZT1)="RES" D
- . ;Q:$D(^%ZTSCH("IO",ZT1))<9
- . S ZT2=$O(^%ZISL(3.54,"B",ZT1,0)),ZT3=0 Q:ZT2'>0
- . S X=$G(^%ZISL(3.54,ZT2,0))
- . W !,"Resource ",ZT1," Aval. Slots: ",$P(X,U,2)
- . F S ZT3=$O(^%ZISL(3.54,ZT2,1,ZT3)) Q:ZT3'>0 D
- . . S X=^%ZISL(3.54,ZT2,1,ZT3,0),ZTIM=$P(X,U,5) I ZTIM]"",ZTIM'["," S ZTIM=$$H0^%ZTM(ZTIM)
- . . W !,?10,"Slot: ",$J(ZT3,2)," Job: ",$P(X,U,3)," Task: ",$P(X,U,4)
- . . W " time: ",$$HDIFF^%ZTLOAD7($H,ZTIM,2)
- . . Q
- . Q
- Q
- ZTMON1 ;SEA/RDS-TaskMan: Option, ZTMON, Part 2 (Main Loop) ;2/19/08 13:36
- +1 ;;8.0;KERNEL;**36,118,127,275,446**;Jul 10, 1995;Build 44
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- MON IF MODE
- DO IO
- DO JOB
- DO SUB
- +1 GOTO DONE
- +2 ;
- IO ;Evaluate Waiting Lists
- +1 NEW X,X1
- +2 SET ZT1=$$H3($HOROLOG)
- SET ZT2=$GET(^%ZTSCH("IO"))
- SET ZT=$$DIFF^%ZTMS1(ZT1,+ZT2,1)
- +3 WRITE !!,"Checking the IO Lists:"
- IF $DATA(^%ZTSCH("IO"))>2
- IF +ZT2
- WRITE " Last TM scan: ",ZT," sec, "
- IF $PIECE(ZT2,"^",2)]""
- WRITE "Last Dev: ",$PIECE(ZT2,"^",2)
- +4 SET ZT1=""
- SET ZTT=0
- I1 SET ZT1=$ORDER(^%ZTSCH("IO",ZT1))
- IF ZT1=""
- IF ZTT=0
- WRITE !?5,"There are no tasks waiting for devices."
- QUIT
- +1 ;Skip devices without tasks
- IF $DATA(^%ZTSCH("IO",ZT1))<9
- GOTO I1
- +2 WRITE !?5,"Device: ",ZT1
- SET Y=1
- IF ZT1'=$IO
- SET X=ZT1
- SET X1=$GET(^%ZTSCH("IO",ZT1))
- DO DEVOK^%ZOSV
- +3 WRITE $SELECT(Y:" is not available,",$DATA(^%ZTSCH("DEV",ZT1)):" is allocated,",1:" is AVAILABLE,")
- +4 SET ZTC=0
- SET ZT2=""
- FOR ZT=0:0
- SET ZT2=$ORDER(^%ZTSCH("IO",ZT1,ZT2))
- SET ZT3=""
- IF 'ZT2
- QUIT
- FOR ZT=0:0
- SET ZT3=$ORDER(^%ZTSCH("IO",ZT1,ZT2,ZT3))
- IF ZT3=""
- QUIT
- SET ZTC=ZTC+1
- SET ZTT=1
- +5 WRITE " with ",$SELECT(ZTC=1:"one task",1:ZTC_" tasks")," waiting."
- IF ZTC>50
- WRITE $CHAR(7)
- +6 GOTO I1
- +7 ;
- JOB ;Evaluate Job List
- +1 WRITE !!,"Checking the Job List:"
- +2 SET ZTC=0
- SET ZT1=""
- FOR ZT=0:0
- SET ZT1=$ORDER(^%ZTSCH("JOB",ZT1))
- SET ZT2=0
- IF ZT1=""
- QUIT
- FOR ZT=0:0
- SET ZT2=$ORDER(^%ZTSCH("JOB",ZT1,ZT2))
- IF 'ZT2
- QUIT
- SET ZTC=ZTC+1
- +3 WRITE !?5,"There ",$SELECT(ZTC=0:"are no tasks",ZTC=1:"is 1 task",1:"are "_ZTC_" tasks")," waiting for ",$SELECT(ZTC'=1:"partitions.",1:"a partition.")
- IF ZTC>20
- WRITE $CHAR(7)
- +4 ;
- C ;Evaluate Cross CPU list
- +1 SET ZT1=""
- +2 FOR
- SET ZT1=$ORDER(^%ZTSCH("C",ZT1))
- IF ZT1=""
- QUIT
- SET ZTC=+$GET(^(ZT1))
- Begin DoDot:1
- +3 SET ZTCO=0
- SET ZT2=""
- +4 FOR
- SET ZT2=$ORDER(^%ZTSCH("C",ZT1,ZT2))
- SET ZT3=0
- IF ZT2=""
- QUIT
- FOR
- SET ZT3=$ORDER(^%ZTSCH("C",ZT1,ZT2,ZT3))
- IF ZT3=""
- QUIT
- SET ZTCO=ZTCO+1
- +5 WRITE !?5,"For ",ZT1," there ",$SELECT(ZTCO=1:"is ",1:"are "),ZTCO," tasks. "
- +6 WRITE $SELECT(ZTC>8:"Not responding",$$OOS^%ZTM(ZT1):"Out Of Service",'$DATA(^%ZIS(14.7,"B",ZT1)):"Not defined",1:"")
- +7 QUIT
- End DoDot:1
- TASK ;Evaluate Task List
- +1 WRITE !!,"Checking the Task List:"
- +2 SET ZTC=0
- FOR ZT1=0:0
- SET ZT1=$ORDER(^%ZTSCH("TASK",ZT1))
- IF 'ZT1
- QUIT
- SET ZTC=ZTC+1
- +3 WRITE !?5,"There ",$SELECT(ZTC=0:"are no tasks",ZTC=1:"is 1 task",1:"are "_ZTC_" tasks")," currently running."
- +4 QUIT
- +5 ;
- SUB ;Look for idle submanagers
- +1 NEW %N,ZT1,ZT2,ZT3,ZT4
- +2 WRITE !,"Checking Sub-Managers:"
- +3 IF $DATA(^%ZTSCH("WAIT","SUB"))
- WRITE !?5,"Sub-Managers told to Wait."
- +4 DO SUBCHK^%ZTMS5(0)
- +5 SET %N=""
- +6 FOR
- SET %N=$ORDER(^%ZTSCH("SUB",%N))
- IF %N=""
- QUIT
- Begin DoDot:1
- +7 SET %=$GET(^(%N))
- SET ZT4=+$GET(^%ZTSCH("LOADA",%N))
- +8 WRITE !?5,"On node ",%N," there ",$SELECT('%:"are no",%=1:"is 1",1:"are "_$JUSTIFY(%,2))," free Sub-Manager(s)."
- +9 WRITE " Status: ",$SELECT($DATA(^%ZTSCH("STOP","SUB",%N)):"Stop",ZT4:"BWait",1:"Run")
- +10 IF $GET(^%ZTSCH("SUB",%N,0))>5
- WRITE !?10,"SUB-MANAGERS ARE NOT STARTING."
- +11 QUIT
- End DoDot:1
- +12 QUIT
- +13 ;
- DONE ;Prompt to Quit Or Continue
- +1 WRITE !!,"Enter monitor action: UPDATE// "
- +2 READ ZTR:$SELECT($DATA(DTIME)#2:DTIME,1:60)
- IF ZTR=""
- SET ZTR="U"
- +3 IF "Uu"[$EXTRACT(ZTR)
- GOTO MON^ZTMON
- +4 IF "Ee"[$EXTRACT(ZTR)
- IF $$CALL("LIST^XUTMKE")
- QUIT
- GOTO DONE
- +5 IF "Ss"[$EXTRACT(ZTR)
- WRITE @IOF
- XECUTE ^%ZOSF("SS")
- GOTO DONE
- +6 IF "Pp"[$EXTRACT(ZTR)
- WRITE @IOF
- DO PARAMS^ZTMCHK
- GOTO DONE
- +7 IF "Rr"[$EXTRACT(ZTR)
- WRITE @IOF
- DO RES
- GOTO DONE
- +8 IF "Tt"[$EXTRACT(ZTR)
- SET MODE='MODE
- WRITE !,"Mode set to ",$SELECT(MODE:"normal",1:"short")
- GOTO DONE
- +9 IF ZTR="^"!(ZTR="@")
- QUIT
- +10 IF ZTR'["?"
- GOTO MON^ZTMON
- +11 IF ZTR="??"
- IF $$CALL("SELECT^XUTMONH")
- QUIT
- GOTO MON^ZTMON
- +12 WRITE !!?5,"Enter <RETURN> to update the monitor screen."
- +13 WRITE !?5,"Enter ^ to exit the monitor."
- +14 WRITE !?5,"Enter E to inspect the TaskMan Error file."
- +15 WRITE !?5,"Enter P to see taskman parameters."
- +16 WRITE !?5,"Enter R to see busy Resource slots."
- +17 WRITE !?5,"Enter S to see a system status listing."
- +18 WRITE !?5,"Enter ? to see this message."
- +19 WRITE !?5,"Enter ?? to inspect the tasks in the monitor's lists."
- +20 GOTO DONE
- +21 ;
- H3(%) ;Convert $H to seconds.
- +1 QUIT 86400*%+$PIECE(%,",",2)
- +2 ;
- CALL(RTN) ;Check for called routine
- +1 NEW DUOUT
- +2 IF $DATA(^DIC(19,0))[0
- WRITE !,"In the wrong account."
- QUIT 0
- +3 DO @RTN
- QUIT $DATA(DUOUT)
- +4 ;
- RES ;Check on resource devices
- +1 NEW ZT1,ZT2,ZT3,ZTIM,X
- +2 SET ZT1=""
- +3 FOR
- SET ZT1=$ORDER(^%ZTSCH("IO",ZT1))
- IF ZT1=""
- QUIT
- IF ^%ZTSCH("IO",ZT1)="RES"
- Begin DoDot:1
- +4 ;Q:$D(^%ZTSCH("IO",ZT1))<9
- +5 SET ZT2=$ORDER(^%ZISL(3.54,"B",ZT1,0))
- SET ZT3=0
- IF ZT2'>0
- QUIT
- +6 SET X=$GET(^%ZISL(3.54,ZT2,0))
- +7 WRITE !,"Resource ",ZT1," Aval. Slots: ",$PIECE(X,U,2)
- +8 FOR
- SET ZT3=$ORDER(^%ZISL(3.54,ZT2,1,ZT3))
- IF ZT3'>0
- QUIT
- Begin DoDot:2
- +9 SET X=^%ZISL(3.54,ZT2,1,ZT3,0)
- SET ZTIM=$PIECE(X,U,5)
- IF ZTIM]""
- IF ZTIM'[","
- SET ZTIM=$$H0^%ZTM(ZTIM)
- +10 WRITE !,?10,"Slot: ",$JUSTIFY(ZT3,2)," Job: ",$PIECE(X,U,3)," Task: ",$PIECE(X,U,4)
- +11 WRITE " time: ",$$HDIFF^%ZTLOAD7($HOROLOG,ZTIM,2)
- +12 QUIT
- End DoDot:2
- +13 QUIT
- End DoDot:1
- +14 QUIT