cQCTK1 ;Background Job Launcher ;cQCTK1;
G START
;
date ;date
N %H,%J,%R S %H=1+$H,%J=%H\1461,%R=%H#1461,DJ=%J*4+1841+(%R\365),DD=%R#365,DM=1 I %R=1460 S DD=365,DJ=DJ-1
F %J=31,(%R>1154)+28,31,30,31,30,31,31,30,31,30 Q:%J'
N")'=$ZSTRIP($ZU(5),">N") K SYS(K)
. I $ZSTRIP(K,">N")=$ZSTRIP($ZU(5),">N") S NMSPT=NMSPT_$P(K,$ZSTRIP($ZU(5),">N"),2)_" "
S:$E(NMSPT,$L(NMSPT))=" " $E(NMSPT,$L(NMSPT))=""
S DELTA=0,%H=15
F H $G(%H,60)-$G(DELTA) S %H=$G(^cLOG($ZU(5),"CTK0","WAIT"),60) Q:'%H D
. I %H<60 S %H=60,^cLOG($ZU(5),"CTK0","WAIT")=%H
. S loopb=$ZU(188),BG=$H,I="" D date,time
. ;Falls 'now' within a 'logon not allowed' period?
. S NOL=0,K=$$SIG^cAFA1("PAR","LOGIN",BG#7+133) I $L(K) D
.. S NOLA=$P(K,"-"),NOLB=$P(K,"-",2) I NOLB="00:00" S NOLB="24:00"
.. S BGX=+$P(BG,",",2) I 'BGX S BGX=1
.. S NOLAX=$P(NOLA,":")*3600+($P(NOLA,":",2)*60)
.. S NOLBX=$P(NOLB,":")*3600+($P(NOLB,":",2)*60)
.. I (BGX>NOLAX)&(BGX300) S $P(^cLOG($ZU(5),"CTK0","AUTO",I),"\",17)=""
.. ;not during 'logon not allowed' period
.. I NOL,'$P(L,"\",18) Q
.. S P=$P(L,"\") Q:'$L(P) Q:'$P(L,"\",5) D PARSE Q:'$L(B)
.. I $L($P(L,"\",13))," "_$P(L,"\",13)_" "'[(" "_$ZCVT($ZU(110),"U")_" ") Q
.. S RF=$P(L,"\",2),RK=$P(L,"\",3),RH=$P(L,"\",4),RL="",X=0
.. S WT=$P(L,"\",11),NMSPS=$P(L,"\",10),MAS=$P(L,"\",12),PRIO=+$P(L,"\",14),KUU=$P(L,"\",15) S:KUU="" KUU="EA"
.. S NOTA=$P($P(L,"\",16),"-"),NOTB=$P($P(L,"\",16),"-",2)
.. S X="" F S X=$O(^cLOG($ZU(5),"CTK0","AUTO",I,$ZCVT($ZU(110),"U"),X),-1) Q:X'>+BG
.. I X S Y="" F S Y=$O(^cLOG($ZU(5),"CTK0","AUTO",I,$ZCVT($ZU(110),"U"),X,Y),-1) Q:X'=+BG Q:Y'>$P(BG,",",2)
.. I X,Y S RL=$P($G(^cLOG($ZU(5),"CTK0","AUTO",I,$ZCVT($ZU(110),"U"),X,Y)),"\",4)
.. S NMSPC="" S:'$L(NMSPS) NMSPS=$ZU(5) S:NMSPS="*" NMSPS=NMSPT
.. F i=1:1:$L(NMSPS," ") S NMSPX=$P(NMSPS," ",i),NMSPC=NMSPC_$S($L(NMSPC):" ",1:"")_$S(NMSPX?1.N:$TR($ZU(5),"0123457890"),1:"")_NMSPX
.. I $S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))'=$S($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE")),1:$S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))) S NS=$$NS^cQ14 Q:$S($S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))=NS:$S(MAS="S":1,1:0),$S($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE")),1:$S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U")))=NS:$S(MAS="M":1,1:0),1:0)
.. ;
.. ;Start-switch set to zero (do no start routine)
.. S X=0
.. ;Run now ?
.. I $P(L,"\",17)=1 S $P(^cLOG($ZU(5),"CTK0","AUTO",I),"\",17)="" S X=1
.. ;
.. ; ***** op een welbepaalde dag
.. I 'X,RF>57600,RF=+$H Q:$$TM(RH,%H) S X=1
.. ;
.. ; ***** om de zoveel seconden (max 57600 = om de 16 uren)
.. I 'X,RF>30,RF<57600 Q:$$LR(RL,RF) D Q:NOT S X=1
... S NOT=0 Q:'$L(NOTA) Q:'$L(NOTB)
... ; do not run if later than NOTA AND before NOTB
... S BGX=$P(BG,",",2)-($P(BG,",",2)#60) ;filter out seconds
... S NOTAX=$P(NOTA,":")*3600+($P(NOTA,":",2)*60)
... S NOTBX=$P(NOTB,":")*3600+($P(NOTB,":",2)*60)
... I NOTAXNOTAX)&(BGXNOTBX S NOT=1 I (BGX>NOTBX)&(BGXBG Q:$$TM(RH,%H) Q:$$LR(RL,%H) S X=1
.. ;
.. ; ***** elke maand, bepaalde dag, bepaald uur
.. I 'X,RF=30 D Q:RX'=RK Q:$$TM(RH,%H) Q:$$LR(RL,%H) S X=1
... S RX=+DD I RK=99 D
.... I RX=28,+DM=2,'(DJ#4&'(DJ#100)!(DJ#400)&'(DJ#4000)) S RX=99 Q
.... I RX=29,+DM=2 S RX=99 Q
.... I RX=30,"\4\6\9\11\"[("\"_+DM_"\") S RX=99 Q
.... I RX=31,"\1\3\5\7\8\10\12\"[("\"_+DM_"\") S RX=99 Q
.. ;
.. ;Run the background job
.. I X D
... ; Build routine
... D P
... ;Remove the Lock
... L -^cLOGL($ZU(5),"CTK0","AUTO",I)
... J @("^"_p_"::3") S T=$T,X=$ZC
... I 'T D
.... ; don't try again if sending e-mail failed
.... I $P($P(L,"\"),"(")="SEND^cA350" X "zr zs "_p Q
.... S %=$P($T(@("T2"_$G(QT))),";",2)_I_" -> "_$P(L,"\") D ^cA400,AL(0)
.... H 1 J @("^"_p_"::3") S T=$T,X=$ZC
.... I 'T S %=$P($T(@("T2"_$G(QT))),";",2)_I_" -> "_$P(L,"\")_" second try" D ^cA400,AL(0) X "zr zs "_p
... L +@%logl:0
... S $P(@%logctk,"\",1)=$S('T:"no",1:X),$P(@%logctk,"\",2)=DT
... S $P(@%logctk,"\",3)=TD,$P(@%logctk,"\",4)=BG
... D CLEAN^cQ13($NA(@%logctk,5),20)
... L -@%logl
. S loope=$ZU(188),BE=$H
. S loopd=$J(loope-loopb*3600*24+($P(loope,",",2)-$P(loopb,",",2)),0,3)
. I $G(^cLOG($ZCVT($ZU(110),"U"),"CTK0","FRACTHANG")) S DELTA=loopd ;DELTA = x.yyy seconds
. E S DELTA=BE-BG*3600*24+($P(BE,",",2)-$P(BG,",",2)) ;DELTA = x seconds
. I $G(^cLOG($ZU(5),"CTK0","LOOP",0,"LOG")) D
.. S (loopi,loops)=+^("LOG")
.. F S loopi=$O(^cLOG($ZU(5),"CTK0","LOOP",$ZCVT($ZU(110),"U"),loopi)) Q:loopi="" K ^(loopi)
.. S loopi=$G(^cLOG($ZU(5),"CTK0","LOOP",$ZCVT($ZU(110),"U"),0),0)+1 I loopi>loops s loopi=1
.. S ^cLOG($ZU(5),"CTK0","LOOP",$ZCVT($ZU(110),"U"),0)=loopi
.. S ^cLOG($ZU(5),"CTK0","LOOP",$ZCVT($ZU(110),"U"),loopi)=$ZDATETIME(loopb,8,1,3)_"\"_loopb_"\"_loope_"\"_loopd
;
S %logctk="^cLOG("""_$ZU(5)_""",""CTK0"",""JOB"","""_$ZCVT($ZU(110),"U")_""")",$P(@%logctk@(0,0),"\")=0 D LOG
;
YZ Q
;
P ; build program
K p
S curh=+$H,day=+$H,tim=+$P($H,",",2) i curh'=prevh s vnr=0,prevh=curh
F S vnr=vnr+1,vnrm="0000"_vnr,vnrf=$e(vnrm,$l(vnr),$l(vnrm)),p="p"_curh_sys_vnrf Q:'$D(^$R(p))
S %logctk="^["""_$ZU(5)_"""]cLOG("""_$ZU(5)_""",""CTK0"",""AUTO"","_I_","""_$ZCVT($ZU(110),"U")_""","_day_","_tim_")"
S q=0,p(q)=p_" ;"_p_"; "_$ZD(day,4)_" - "_$ZT(tim,1)
S q=q+1,p(q)=" ;"
S q=q+1,p(q)=" S $ZT=""ERR"" D "_$S(PRIO=-1:"LOW",PRIO=1:"HIGH",1:"NORMAL")_"^%PRIO"
S q=q+1,p(q)=" L +^["""_$ZU(5)_"""]cLOGL("""_$ZU(5)_""",""CTK0"",""AUTO"","_I_"):1 E G X"
S q=q+1,p(q)=" ;"
F i=1:1:$L(NMSPC," ") S NMSPX=$P(NMSPC," ",i) I $L(NMSPX),$ZU(90,10,NMSPX),$D(^$[NMSPX]ROUTINE(B)) D
. S q=q+1,p(q)=" ZN """_NMSPX_""" S Q="""_KUU_""" D ^cA604 S QU=""SYS"",QL="""",%bg=1 D "_$P(L,"\")
. I WT,$L(NMSPC," ")>1,i<$L(NMSPC," ") S q=q+1,p(q)=" H "_(WT*60)
S q=q+1,p(q)=" ;"
S q=q+1,p(q)=" D ^cA105,^cA106"
S q=q+1,p(q)=" S $P("_%logctk_",""\"",6)=DT,$P(^("_tim_"),""\"",7)=TD,$P(^("_tim_"),""\"",8)=$H"
S q=q+1,p(q)=" L -^["""_$ZU(5)_"""]cLOGL("""_$ZU(5)_""",""CTK0"",""AUTO"","_I_")"
S q=q+1,p(q)=" ;"
s q=q+1,p(q)="X ZN """_$ZU(5)_""" X ""zr zs "_p_""""
S q=q+1,p(q)=" ;"
S q=q+1,p(q)="YZ Q"
S q=q+1,p(q)=" ;"
S q=q+1,p(q)="ERR ;Errortrap ;"
S q=q+1,p(q)=" ZN """_$ZU(5)_""" S %E(0)=""Error: ""_$ZE,%E(1)=""Routine: "_$$doubleq($P(L,"\"))_""""
S q=q+1,p(q)=" S %E(2)="""" F I=1:1 S %E(I+3)=$T(+I) Q:$E($T(+I),1,2)=""ZZ"""
S q=q+1,p(q)=" D ^cA400,M^cQ14(""Error in BackGround Job "_I_" ""_%E(1),.%E)"
S q=q+1,p(q)=" Q"
S q=q+1,p(q)=" ;"
S q=q+1,p(q)="ZZ ; "_$ZD(day,4)_" - "_$ZT(tim,1)
X "s i="""" zr x ""f s i=$o(p(i)) q:i="""""""" zi p(i)"" zs "_p
Q
;
R ; Program is removed and traps here
I $ZE["" Q
D ^cA407 Q
;
PARSE N C Q:'$L(P)
I P'["^" S P="^"_P,$P(L,"\")=P,$P(^cLOG($ZU(5),"CTK0","AUTO",I),"\")=P
I P[":(" S C=$P($P($P(P,":(",2),")"),":"),NMSPC=$$SQ(C)
PARSE1 S B=$P($TR(P,"^|[(:","~~~~~"),"~",2),CPU=""
Q
;
SQ(K) Q $TR(K,"""")
;
TM(H,A) N T
S H=$G(H),A=$G(A,10)-1,H=H*3600+($P(H,":",2)*60),T=+$P(BG,",",2)
Q $S(T(H+A)):1,1:0)
;
LR(L,R) Q ($P(BG,",",2)-$P(L,",",2)/86400+BG-L)<(R-1/86400)
;
LOG Q:'$L($G(%logctk)) S BG=$H D date,time H 5
F L +@%logl:5 Q:$T
S $P(@%logctk@(0,0),"\",6)=DT,$P(@%logctk@(0,0),"\",7)=TD,$P(@%logctk@(0,0),"\",8)=BG
D CLEAN^cQ13($NA(@%logctk,5),20)
L -@%logl
Q
;
TRAP S %=$ZE,M=$T(+0)_$P($T(T1),";",2)_%,$ZT="TRAP^"_$T(+0)
S %logctk="^["""_$ZU(5)_"""]cLOG("""_$ZU(5)_""",""CTK0"",""JOB"","""_$ZCVT($ZU(110),"U")_""")"
S @%logctk@(+$H,$P($H,",",2))=$J_"\"_$ZD(+$H,2,,4)_"\"_$ZT($P($H,",",2),1)_"\"_$H_"\"_% D CLEAN^cQ13($NA(@%logctk,5),40)
I %[$T(+0),%["" Q
S %nspc=$ZU(5) ;remember current namespace
ZN "%SYS" S SHUTDOWN=$$%swstat^SWSET(16,0) ;Shutdown in progress switch
ZN %nspc ;switch back to where you came from
I $S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))'=$S($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE")),1:$S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))),$ZCVT($ZU(110),"U")=$S($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE")),1:$S($L($G(^cLOG($ZU(5),"SYSTEM","MASTER"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER")),1:$ZCVT($ZU(110),"U"))),SHUTDOWN Q ;shutdown switch is set, do not log error on slave
; auto-restart this program if edited
I %[$T(+0),%[""!(%["") D M^cQ14(M) L J @("^"_$T(+0)) Q
D ^cA400,AL(1)
Q
;
AL(%1) ; verzenden alert
I %1 D D1004^cANEM0($T(+0),$P($T(@("T0"_$G(QT))),";",2)) Q
D D1005^cANEM0($T(+0),$P($T(@("T0"_$G(QT))),";",2)) Q
Q
;
ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9