1 | XUSCNT ;ISF/RWF - Job counting for GTM ;6/24/04 15:22
|
---|
2 | ;;8.0;KERNEL;**275**;July 10, 1995;
|
---|
3 | ;0 return CNT
|
---|
4 | ;1 inc CNT
|
---|
5 | ;-1 dec CNT
|
---|
6 | COUNT(INC,JOB) ;Keep count of jobs
|
---|
7 | N XUCNT,X
|
---|
8 | S JOB=$G(JOB,$J)
|
---|
9 | ;Return Current Count
|
---|
10 | I INC=0 D TOUCH Q +$G(^XUTL("XUSYS","CNT"))
|
---|
11 | ;Increment Count
|
---|
12 | I INC>0 D Q
|
---|
13 | . S X=$G(^XUTL("XUSYS",JOB,"NM")) K ^XUTL("XUSYS",JOB) S ^XUTL("XUSYS",JOB,"NM")=X
|
---|
14 | . D TOUCH
|
---|
15 | . L +^XUTL("XUSYS","CNT"):5
|
---|
16 | . S XUCNT=$G(^XUTL("XUSYS","CNT"))+1,^XUTL("XUSYS","CNT")=XUCNT
|
---|
17 | . L -^XUTL("XUSYS","CNT")
|
---|
18 | . Q
|
---|
19 | ;Decrement Count
|
---|
20 | I INC<0 D Q
|
---|
21 | . L +^XUTL("XUSYS","CNT"):5
|
---|
22 | . S XUCNT=$G(^XUTL("XUSYS","CNT"))-1,^XUTL("XUSYS","CNT")=$S(XUCNT>0:XUCNT,1:0)
|
---|
23 | . L -^XUTL("XUSYS","CNT")
|
---|
24 | . K ^XUTL("XUSYS",JOB)
|
---|
25 | Q
|
---|
26 | ;
|
---|
27 | CHECK(JOB) ;Check if job number active
|
---|
28 | ; 0 = Job doesn't seem to be running
|
---|
29 | ; 1 = Job maybe running
|
---|
30 | ; 2 = Job still has Lock out.
|
---|
31 | Q:$G(JOB)'>0 0
|
---|
32 | I '$D(^XUTL("XUSYS",JOB)) Q 0
|
---|
33 | N LK,%T
|
---|
34 | S %T=0,LK=$$GETLOCK()
|
---|
35 | I $L(LK) L +@LK:0 S %T=$T L:%T -@LK
|
---|
36 | Q $S(%T:2,1:1)
|
---|
37 | ;
|
---|
38 | SETLOCK(NLK) ;Set the Lock we will keep
|
---|
39 | I $L($G(NLK)) S ^XUTL("XUSYS",$J,"LOCK")=NLK
|
---|
40 | E K ^XUTL("XUSYS",$J,"LOCK")
|
---|
41 | D TOUCH ;Update the time
|
---|
42 | Q
|
---|
43 | ;
|
---|
44 | TOUCH ;Update the time
|
---|
45 | S ^XUTL("XUSYS",$J,0)=$H
|
---|
46 | Q
|
---|
47 | ;
|
---|
48 | GETLOCK() ;Get the node to Lock
|
---|
49 | Q $G(^XUTL("XUSYS",$J,"LOCK"))
|
---|
50 | ;
|
---|
51 | CLEAR(DB) ;Check for locks and time clear old ones.
|
---|
52 | N %J,%T,CNT,CT,LK,IM,IMAGE,H K ^TMP($J)
|
---|
53 | D TOUCH ;See that we are current
|
---|
54 | ;S %J=0 F S %J=$ZPID(%J) Q:%J'>0 S ^TMP($J,%J)="",^TMP($J,%J,1)=$ZGETJPI(%J,"IMAGNAME")
|
---|
55 | S DB=+$G(DB),IMAGE="mumps" ;$ZGETJPI($J,"IMAGNAME") ; ours
|
---|
56 | S %J=0,CNT=0,H=$H,CT=$$H3($H)
|
---|
57 | I DB W !,"Current Job Count: ",$$COUNT(0)
|
---|
58 | F S %J=$O(^XUTL("XUSYS",%J)) Q:%J'>0 D
|
---|
59 | . S CNT=CNT+1
|
---|
60 | . I DB W !,CNT," Job: ",%J
|
---|
61 | . S LK=$G(^XUTL("XUSYS",%J,"LOCK")) ;Get lock name
|
---|
62 | . I '$L(LK) W:DB " No Lock node"
|
---|
63 | . I $L(LK) L +@LK:0 S %T=$T D Q:'%T L -@LK ;Quit if lock still held
|
---|
64 | . . I '%T,DB W " Lock Held"
|
---|
65 | . . I %T,DB W " Lock Fail"
|
---|
66 | . S IM=$G(^TMP($J,%J,1))
|
---|
67 | . I IM=IMAGE W:DB " Image Match: ",IM Q
|
---|
68 | . I IM["ZFOO.EXE" W:DB " ZFOO Image" Q ;Quit if in same image
|
---|
69 | . S H=$G(^XUTL("XUSYS",%J,0)) I H>0 S H=$$H3(H)
|
---|
70 | . I H+60>CT D Q ;Updated in last 30 seconds.
|
---|
71 | . . I DB W " Current TimeStamp"
|
---|
72 | . S NM=$G(^XUTL("XUSYS",%J,"NM"))
|
---|
73 | . I NM["Task " S TM=+$P(NM,"Task ",2) I TM>0 D Q:%
|
---|
74 | . . S TM(1)=$G(^%ZTSK(TM,.1)),%=(TM(1)=5)
|
---|
75 | . . I DB,% W " Running Task"
|
---|
76 | . . Q
|
---|
77 | . ;More checks
|
---|
78 | . D COUNT(-1,%J) I DB W " Not Active: Removed" ;Not Active
|
---|
79 | . Q
|
---|
80 | L +^XUTL("XUSYS","CNT"):3
|
---|
81 | S CNT=0,%J=0 F S %J=$O(^XUTL("XUSYS",%J)) Q:%J'>0 S CNT=CNT+1
|
---|
82 | S ^XUTL("XUSYS","CNT")=CNT
|
---|
83 | L -^XUTL("XUSYS","CNT")
|
---|
84 | I DB W !,"New JOB count: ",CNT
|
---|
85 | Q
|
---|
86 | ;
|
---|
87 | H3(%H) ;Just seconds
|
---|
88 | Q %H*86400+$P(%H,",",2)
|
---|
89 | ;
|
---|
90 | ;Called from the X-REF both the volume and Max signon from file 8989.3
|
---|
91 | XREF(X1,V) ;V="S" or "K"
|
---|
92 | N %,N
|
---|
93 | S %=$G(^XTV(8989.3,1,4,X1,0)),N=$P(%,"^") Q:%=""
|
---|
94 | I V="K" K ^XTV(8989.3,"AMAX",N) Q
|
---|
95 | S ^XTV(8989.3,"AMAX",N)=$P(%,"^",3)
|
---|
96 | Q
|
---|