cQJOB ;Count Data-M jobs ; cQJOB; ; INT ;Count Data-M jobs; S (%datam,%system)=0,(%j(0),%djobs,%sjobs)="" D JOBS^cQSYS S i="" f s i=$O(JOB(0,i)) Q:i="" D . S job=$P(JOB(0,i),"\"),prog=$$JP(job,"routine"),nmsp=$$JP(job,"nspace") . I ($$JP(job,"jobtype")>3),($$JP(job,"jobtype")'=48) S nmsp="%SYS" ;system job . S JOB(0,i)=JOB(0,i)_"\"_prog_"\"_nmsp . I (nmsp="%SYS")!(nmsp="%CACHELIB") s %system=%system+1,%sjobs=%sjobs_$S($L(%sjobs):",",1:"")_job q . s %datam=%datam+1,%djobs=%djobs_$S($L(%djobs):",",1:"")_job S %j(0)="Data-M:"_$C(13,10)_%djobs_$C(13,10)_"System:"_$C(13,10)_%sjobs_$C(13,10) S i="Data-M jobs: "_%datam_" System jobs: "_%system ;D M^cQ14(i,.%j) INTZ Q ; FJOB(P,R,PID) ;Find job number that has P as value for R N JOB,i,maxpid,%ROWCOUNT S PID="",P=$G(P),R=$G(R) I '$L(P)!'$L(R) Q 1 D JOBS^cQSYS S i="" F S i=$O(JOB(0,i)) Q:i="" I $$JP(JOB(0,i),R)=P S:$L(PID) PID=PID_"," S PID=PID_JOB(0,i) FJOBQ Q 0 ; JK(X,Y,T,debug,nokill) ;Kill job that has value X for parameter Y longer than T seconds (default 60) ;Example: ("cQQ","routine") or ("OPEN","state") N A,B,I,K S X=$G(X),Y=$G(Y),T=$G(T,60) I '$L(X)'!$L(Y) Q 1 K A,B S K=$$FJOB(X,Y,.A) F I=1:1:$L(A,",") S A($P(A,",",I))=I H T S K=$$FJOB(X,Y,.B) F I=1:1:$L(B,",") S B($P(B,",",I))=I S I="" F S I=$O(A(I)) Q:I="" I $D(B(I)) D . I '$G(nokill) D KILL(I) . K R . S R($O(R(""),-1)+1)="JOB "_I_" with '"_Y_"' '"_X_"' was active for more than "_T_" seconds." . I '$G(nokill) S R($O(R(""),-1)+1)="Job will be killed." . S R=$ZCVT($ZU(110),"U")_": Long running job "_I_$S('$G(nokill):" has been killed",1:"") D AL^cQ14($T(+0),.R,,1) . I $G(debug) W ! ZW R JKZ Q 0 ; JV(X,Y) ;Finds jobs that have var X, log it in Y ;Kill logs older than 7 days N A,DAY,HOUR,I,JOB,V,J,K,L,maxpid,VNR S $ZT="JVERR^"_$T(+0) S X=$G(X),Y=$G(Y) Q:'$L(X) Q:'$L(Y) I $E(Y)'="^" S Y="^"_Y S DAY=$P($H,","),HOUR=$P($H,",",2),K="" F S K=$O(@Y@($ZCVT($ZU(110),"U"),K)) Q:K="" I K<(DAY-7) K ^(K) D JOBS^cQSYS S I="" F S I=$O(JOB(0,I)) Q:I="" S J=JOB(0,I) D . K ^TEMP($J+.01,"VAR") D V^cQ14(J,"S") K A,V . S A="Q\%ZM\"_X,K="" F L=1:1:$L(A,"\") S A(L)=$P(A,"\",L) . F S K=$O(^TEMP($J+.01,"VAR",J,K)) Q:K="" F L=1:1:$L(A,"\") I ^(K)=A(L) S V(A(L))=^(K+.01) . I '$D(V(X)) Q . S VNR=$G(@Y@($ZCVT($ZU(110),"U"),DAY,HOUR,0))+1 . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,0)=VNR . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,0,"date")=$ZD($P($H,","),4) . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,0,"time")=$ZT($P($H,",",2),1) . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,"job")=J . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,"routine")=$$JP(J,"lineroutine") . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,"exe")=$$JP(J,"exe") . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,"IPaddress")=$$JP(J,"ip") . S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,"user")=$$JP(J,"user") . F L=1:1:$L(A,"\") S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,VNR,A(L))=$G(V(A(L))) JVZ Q ; JVERR S @Y@($ZCVT($ZU(110),"U"),DAY,HOUR,0,"error")=$ZE Q ; JVAR(J,V) ;Get jobvars N A,B,I S J=$G(J,$J) K V S A="active,cnode,exe,ip,lineroutine,nspace,routine,srcline,state,user" F I=1:1:$L(A,",") S B=$P(A,",",I),V(B)=$$JP(J,B) JVARZ Q ; JP(J,R) ;Get jobparameter R for job J ;R = active,cnode,device,exe,ip,jobtype,lineroutine,nspace,routine,srcline,state,user N K S J=$G(J,$J),R=$G(R) I '$L(R) Q "" S K=$ZU(67,0,J) I R="active" Q K I 'K Q "" S $ZT="JPZ" I R="cnode" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,12,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).ClientNodeName,1:##class(%SYS.ProcessQuery).%OpenId(J,0).ClientNodeName) I R="device" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,7,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).CurrentDeviceGet(),1:##class(%SYS.ProcessQuery).%OpenId(J,0).CurrentDeviceGet()) I R="exe" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,13,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).ClientExecutableName,1:##class(%SYS.ProcessQuery).%OpenId(J,0).ClientExecutableName) I R="ip" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,15,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).ClientIPAddress,1:##class(%SYS.ProcessQuery).%OpenId(J,0).ClientIPAddress) I R="jobtype" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,10,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).JobTypeGet(),1:##class(%SYS.ProcessQuery).%OpenId(J,0).JobTypeGet()) I R="lineroutine" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,5,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).CurrentLineAndRoutine,1:##class(%SYS.ProcessQuery).%OpenId(J,0).CurrentLineAndRoutine) I R="nspace" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,6,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).NameSpace,1:##class(%SYS.ProcessQuery).%OpenId(J,0).NameSpace) I R="routine" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,5,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).Routine,1:##class(%SYS.ProcessQuery).%OpenId(J,0).Routine) I R="srcline" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,5,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).CurrentSrcLine,1:##class(%SYS.ProcessQuery).%OpenId(J,0).CurrentSrcLine) I R="state" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,4,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).State,1:##class(%SYS.ProcessQuery).%OpenId(J,0).State) I R="user" Q $S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(67,11,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).UserName,1:##class(%SYS.ProcessQuery).%OpenId(J,0).UserName) JPZ Q "" ; JA(J,R) ;suspend,resume,terminate job ;R = suspend,resume,terminate N K S J=$G(J,$J),R=$G(R) I '$L(R) Q "" S ns=$ZU(5) ZN "%SYS" I R="suspend" S K=$S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(143,J,1),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).Suspend(),1:##class(SYS.Process).%OpenId(J).Suspend()) I R="resume" S K=$S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(143,J,0),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).Resume(),1:##class(SYS.Process).%OpenId(J).Resume()) I R="terminate" S K=$S(($P($P($ZV,")",2),"(",1)[" 4."):$ZU(4,J),($P($P($ZV,")",2),"(",1)[" 5."):##class(%SYSTEM.Process).%OpenId(J).Terminate(),1:##class(SYS.Process).%OpenId(J).Terminate()) ZN ns Q K JAZ Q ; JC ;Jobcount S X="^TEMP("""_$ZCVT($ZU(110),"U")_""",$J)",Y="^TEMP("""_$ZCVT($ZU(110),"U")_""",$J+.02)" K @X,@Y D JV("QU",X) JCB S (ID,IH)="",V=0 F S ID=$O(@X@(boot,ID)) Q:ID="" D . F S IH=$O(@X@(boot,ID,IH)) Q:IH="" D .. F S V=$O(@X@(boot,ID,IH,V)) Q:V="" D ... S EXE=$G(@X@(boot,ID,IH,V,"exe")) ... I '$L(EXE) S EXE="CacheInternal" I $G(@X@(boot,ID,IH,V,"user"))="TELNET" S EXE="TELNET" ... S IP=$G(@X@(boot,ID,IH,V,"IPaddress")) I '$L(IP) S IP="0.0.0.0" ... S VQU=$G(@X@(boot,ID,IH,V,"QU")) I '$L(VQU) S VQU="No_QU" ... S ^(0)=$G(@Y@(0,0,0))+1 ... S ^(EXE)=$G(@Y@(0,"EXE",EXE))+1 ... S ^(IP)=$G(@Y@(0,"IP",IP))+1 ... S ^(VQU)=$G(@Y@(0,"QU",VQU))+1 ... S ^(0)=$G(@Y@(EXE,0,0))+1 ... S ^(0)=$G(@Y@(EXE,IP,0))+1 ... S ^(VQU)=$G(@Y@(EXE,IP,VQU))+1 S (EXE,IP,VQU)="",TAB=$C(9) S INFO=$$INFO^cQ14 S ER=$$OW^cQFILE(INFO) U INFO JCS W !!,"Total # of jobs",TAB,$G(@Y@(0,0,0)) W !!,"Executable",TAB,"#" F S EXE=$O(@Y@(0,"EXE",EXE)) Q:EXE="" W !,EXE,TAB,^(EXE) W !!,"IP-address",TAB,"#" F S IP=$O(@Y@(0,"IP",IP)) Q:IP="" W !,IP,TAB,^(IP) W !!,"Initialen ",TAB,"#" F S VQU=$O(@Y@(0,"QU",VQU)) Q:VQU="" W !,VQU,TAB,^(VQU) W !!,"Executable",TAB,"#",TAB,"IP-address",TAB,"#",TAB,"Initials",TAB,"#" S EXE=0 F S EXE=$O(@Y@(EXE)) Q:EXE="" W !,EXE,TAB,^(EXE,0,0) S IP=0 D . F S IP=$O(@Y@(EXE,IP)) Q:IP="" W !,TAB,TAB,IP,TAB,^(IP,0) S INI=0 D .. F S INI=$O(@Y@(EXE,IP,INI)) Q:INI="" W !,TAB,TAB,TAB,TAB,INI,TAB,^(INI) C INFO S ER=$$JW^cQFILE("copy "_INFO_" "_$P(INFO,"\",1,$L(INFO,"\")-1)_"\jobcount.txt") JCZ Q ; HINT ;Count jobs in %HALT status ; S %kill=0 HINT1 S %halt=0,%j="" D JOBS^cQSYS S i="" f s i=$O(JOB(0,i)) Q:i="" S job=JOB(0,i) I $$JP(job,"routine")="%HALT" D . S %halt=%halt+1,%j=%j_job_$C(13,10) . I +$G(%kill) D KILL(job) I %halt S i="Jobs hanging in %HALT: "_%halt_"." S:+$G(%kill) i=i_" Killed them." D M^cQ14(i,.%j) HINTZ Q ; KHINT ;Count jobs in %HALT status AND kill them ; S %kill=1 D HINT1 KHINTZ Q ; KCTK ;Kill Caretaker N A,I ;First kill the Caretaker Watchdog cQCC D FJOB^cQJOB("cQCC","routine",.A) I $L(A) F I=1:1:$L(A,",") D KILL($P(A,",",I)) ;Kill the Caretaker cQCTK1 D FJOB^cQJOB("cQCTK1","routine",.A) I $L(A) F I=1:1:$L(A,",") D KILL($P(A,",",I)) KCTKZ Q ; SUSP(J) ;Suspend job J N X S J=+$G(J) Q:'J S X=$$JA(J,"suspend") ;Suspend job SUSPZ Q ; RES(J) ;Resume job J N X S J=+$G(J) Q:'J S X=$$JA(J,"resume") ;Resume job RESZ Q ; KILL(J) ; try to kill job J N INFO,X S J=+$G(J) I 'J Q S INFO=$$INFO^cQ14 I ($P($P($ZV,")",2),"(",1)[" 5.") S X=+$$DELETEALL^%LM(J) ;Remove locks for that job S X=$$JA(J,"terminate") ;Kill jobs on Cache level H 1 S X=$ZU(4,J) ;Old fashioned kill S K=$$KOSFP^cQ14_" "_J_" > "_INFO H 1 S X=$$JW^cQFILE(K) ;Kill an the OS level KILLZ Q ; SUSPALL ;Suspend all Data-M jobs, except my own N I,J D INT F I=1:1:$L(%djobs,",") S J=$P(%djobs,",",I) I J,J'=$J D SUSP(J) SUSPALLZ Q ; RESALL ;Resume all Data-M jobs, except my own N I,J D INT F I=1:1:$L(%djobs,",") S J=$P(%djobs,",",I) I J,J'=$J D RES(J) RESALLZ Q ; KILLALL ;Kill all Data-M jobs, except my own N I,J D INT F I=1:1:$L(%djobs,",") S J=$P(%djobs,",",I) I J,J'=$J D KILL(J) KILLALLZ Q ; ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9