cQVGGLO(home,DB,G,S) ;Checksum globals for scheme S ;cQVGGLO;
; home for ZZLOG, databases, globals, schema
G 1
;
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'
1 J JCHECK(%GG,LOG,log,S,I,DBS,i,LOGG,%GS,%GSG,YEAR,WEEK)
..... E D JCHECK(%GG,LOG,log,S,I,DBS,i,LOGG,%GS,%GSG,YEAR,WEEK)
.. ;Lock all ^tellerx to be sure all jobs ended !!
.. F i=1:1:CPUS L +@("^teller"_i_"("""_S_""")")
. I G'="subscript",G'="*" F %J=1:1:$L(G,"\") S K=$P(G,"\",%J) I $L(K) D
.. I K'["*" S:$E(K)'="^" K="^"_K S %G=K D PROC(%G) Q
.. I $E(K,$L(K))="*" S:$E(K)'="^" K=K_"^" D
... S K=$E(K,1,$L(K)-1),%G=$E(K,1,$L(K)-1)_$C($A(K,$L(K))-1)
... D GD(DBS,.gd)
... F S %G=$O(gd(%G)) Q:%G=""!($E(%G,1,$L(K))]$E(K,1,$L(K))) I $E(%G,1,$L(K))=K D GCHECK("^["""_DBS_"""]"_$E(%G,2,$L(%G)),1,1,LOGG,%GS,%GSG,YEAR,WEEK)
.. I $E(K)="*" D GD(DBS,.gd) S %G="" F S %G=$O(gd(%G)) Q:%G="" I "*"_$E(%G,$L(%G)-$L(K)+2,$L(%G))=K D GCHECK("^["""_DBS_"""]"_$E(%G,2,$L(%G)),1,1,LOGG,%GS,%GSG,YEAR,WEEK)
. ;
. F i=1:1:CPUS L -@("^teller"_i_"("""_S_""")")
. S (%G,%GT,%I)=0 H 1 ;wait 1 second before proceeding
. F S %G=$O(@LOG@(S,%G)) Q:%G="" I $D(@LOG@(S,%G,DBS)) S %GT=%GT+$P(^(DBS),"\"),%I=%I+1
. D date,time S K=%GT_"\"_%I_"\"_DT1_"\"_TD1_"\"_DT_"\"_TD_"\"
. S @LOG@(S,0,DBS)=K
. S @log@(S,0,DBS)=K
;
YZ Q
;
PROC(%GN) ;
I '$F(%GN,"(,")&'$F(%GN,",,")&'$F(%GN,"-") D GCHECK("^["""_DBS_"""]"_$E(%GN,2,$L(%GN)),1,1,LOGG,%GS,%GSG,YEAR,WEEK) Q
N %GSD,IND,K,i,%GEN,OGN
I $E(%GN)'="^" S %GN="^"_%GN
S OGN=%GN
S %GSD=$TR($P($P(%GN,"(",2,99),")"),"""","")
S %GN=$P(%GN,"("),IND=1
F i=1:1:$L(%GSD,",") D
. S K=$TR($P(%GSD,",",i),"""","")
. I K["-" S %GEN(i)=K,%GEN=i Q
. I $L(K) S %GEN(i)=K_"-"_K,%GEN=i I $E(%GN,$L(%GN))
. I $L(K),i=1!($L($P($P(%GN,"(",2),",",i-1))&$L($P(%GSD,",",i-1))&($P(%GSD,",",i-1)'["-")) S %GN=%GN_$S(i=1:"(",1:",")_""""_K_"""",IND=IND+1
I %GN["(" S %GN=%GN_")"
S K="" I $L($P($G(%GEN(IND)),"-")) S K=$O(@%GN@($P($G(%GEN(IND)),"-")),-1)
S (%ST,%S1,%S2)=0
F S %GN=$NA(@%GN,IND-1),K=$O(@%GN@(K)) Q:K]]$P($G(%GEN(IND)),"-",2)&$D(%GEN(IND))!'$L(K) D
. S %GN=$NA(@%GN@(K)),%T=$$CHECK("^["""_DBS_"""]"_$E(%GN,2,$L(%GN)),%GS,%GSG)
. I %T'="Global undefined" S %ST=%ST+%T,%S1=%S1+$P(%C,"#",1),%S2=%S2+$P(%C,"#",2)
I %S1 D
. S K=%ST_"\"_%S1_"\"_%S2_S,I=$S(OGN["]":$P(OGN,"]",2),1:OGN),I=$S($E(I)="^":"",1:"^")_I
. S @LOG@(S,I,DBS)=K
. S @log@(S,I,DBS)=K
Q
;
GCHECK(%G,X,Y,LOGG,%GS,%GSG,YEAR,WEEK) ;
N I,K,SW
S X=$G(X),Y=$G(Y),K=$S(%G["]":$P(%G,"]",2),1:%G),K=$S($E(K)="^":"",1:"^")_K Q:$G(EX)[("\"_K_"\")
S (SW,I)=0 F S I=$O(EX(I)) Q:I="" I $E(K,1,$L(EX(I)))=EX(I) S SW=1 Q
L -@("^teller"_Y) Q:SW
I X>1 J JCHECK(%G,LOG,log,S,I,DBS,Y,LOGG,%GS,%GSG,YEAR,WEEK)
E D JCHECK(%G,LOG,log,S,I,DBS,Y,LOGG,%GS,%GSG,YEAR,WEEK)
GCHECKZ Q
;
JCHECK(%G,LOG,log,S,I,DBS,Y,LOGG,%GS,%GSG,YEAR,WEEK)
L +@("^teller"_Y_"("""_S_""")")
I $E(%G,1,2)="^[",$P(%G,"^",3)=$S($ZCVT($ZU(110),"U")=$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","MASTER","ALIAS"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER","ALIAS")),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($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE","ALIAS"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE","ALIAS")),1:""),1:"") S $P(%G,"^",3)=$ZCVT($ZU(110),"U")
N %T S %T=$$CHECK(%G,%GS,%GSG)
I %T'="Global undefined" D
. S K=%T_"\"_$P(%C,"#",1)_"\"_$P(%C,"#",2)_"\"_%tu_"\"_%tur_"\"_Y
. S I=$S(%G["]":$P(%G,"]",2),1:%G),I=$S($E(I)="^":"",1:"^")_I
. S @LOG@(S,I,DBS)=K
. S @log@(S,I,DBS)=K
. I +$G(%GS) S J="" F S J=$O(%A(J)) Q:J="" S $P(@LOGG@(DBS,J,YEAR),"\",WEEK)=%A(J)
. K %A
L -@("^teller"_Y_"("""_S_""")")
Q
;
CHECK(%GN,%GS,%GSG) ;Caculate checksum
N %GX,K,%h1,%h2 K %A S %GS=+$G(%GS),%GSG=$G(%GSG),%GSSW=1
S %h1=$ZTIMESTAMP,(%T,%tu,%tur)=0,%C="#" S:$E(%GN)'="^" %GN="^"_%GN S %GX=%GN,%GL=$QL(%GX)
I '$D(@%GX) Q "Global undefined"
I $D(@%GX)#10=1 S %T=%T+$$CRC(%GX) I %GSSW D COUNT(%GX,%GS,%GSG)
F S %GX=$Q(@%GX) Q:%GX="" Q:$NA(@%GX,%GL)'=$NA(@%GN,%GL) D Q:%GX=""
. I $G(%GEN) S K=$$TEST(%GX) Q:K=1 I K=2 S %GX="" Q
. I $QS(%GX,1)="%1" Q
. S %T=%T+$$CRC(%GX) I %GSSW D COUNT(%GX,%GS,%GSG)
S %h2=$ZTIMESTAMP,%tu=$P(%h2,",")-$P(%h1,",")*86400+$p(%h2,",",2)-$P(%h1,",",2)
S %tur=$E("0"_(%tu\3600),$L(%tu\3600),4)_":"_$E("0"_(%tu#3600\60),$L(%tu#3600\60),4)_":"_$E("0"_(%tu#3600#60\1),$L(%tu#3600#60\1),4)_$S(%tu#1=0:".000",1:(%tu#1))
Q %T
;
COUNT(%GX,%GS,%GSG) ;Count nodes
N LG,LD S %GX=$G(%GX),%GS=$G(%GS),%GSG=$G(%GSG)
S LG=$L(%GX),LD=$L(@%GX),$P(%C,"#",1)=$P(%C,"#",1)+1,$P(%C,"#",2)=$P(%C,"#",2)+LG+LD
I %GS,%GSSW!$L(%GSG) D
. I $E(%GX,2)="[" S K="^"_$P($NA(@%GX,%GS),"]",2,$L(%GX,"]"))
. I $E(%GX,2)="|" S K="^"_$P($NA(@%GX,%GS),"|",3,$L(%GX,"|"))
. I $L(%GSG),%GSG'[("\"_$QS(K,0)_"\") Q
. I '$D(%A(K)) S %A(K)="#",%GSSW=%GSSW+1 I '$L(%GSG),%GSSW>301 S %GSSW=0 K %A Q
. S $P(%A(K),"#",1)=$P(%A(K),"#",1)+1,$P(%A(K),"#",2)=$P(%A(K),"#",2)+LD
Q
;
TEST(%GN) ;
N OK,K
S OK=0
F i=$G(%GEN):-1:1 S K=$TR($P($P(%GN,"(",2),",",i),"()""","") I $D(%GEN(i)),K'=$P(%GEN(i),"-"),K']]$P(%GEN(i),"-") S OK=1 Q
I 'OK F i=$G(%GEN):-1:1 S K=$TR($P($P(%GN,"(",2),",",i),"()""","") I $D(%GEN(i)),K]]$P(%GEN(i),"-",2) S OK=2 Q
Q OK
;
CRC(%GR) S %GD=@%GR
I $E(%GR,2)="[" S %GR="^"_$P(%GR,"]",2,$L(%GR,"]"))
I $E(%GR,2)="|" S %GR="^"_$P(%GR,"|",3,$L(%GR,"|"))
S %X=$ZCRC(%GR,1)+$ZCRC(%GD,1)
Q %X
;
GD(N,V) ;Get global from namespace N into var V
N SS S N=$G(N,$ZU(5)) K V
I '($P($P($ZV,")",2),"(",1)[" 5.") S SS="" D Q
. I N["^" S SS=$P(N,"^",2),N=$P(N,"^",3) I (SS=$ZCVT($ZU(110),"U"))!(SS=$S($ZCVT($ZU(110),"U")=$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","MASTER","ALIAS"))):$G(^cLOG($ZU(5),"SYSTEM","MASTER","ALIAS")),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($L($G(^cLOG($ZU(5),"SYSTEM","SLAVE","ALIAS"))):$G(^cLOG($ZU(5),"SYSTEM","SLAVE","ALIAS")),1:""),1:"")) S SS=""
. D GD8(N,SS,"*",1,.V)
N CU,I,repdir,slm,str S CU=$ZU(5) ZN N
K ^%utility($j),V S I=$$Fetch^%GD("*",1,0),I="" F S I=$O(^%utility($J,I)) Q:I="" S V(I)=""
ZN CU
GDZ Q
;
GD8(DBPath,System,Mask,ShowSystem,V) [] PUBLIC {
S DBPath=$G(DBPath,$ZU(5)),System=$G(System,""),Mask=$get(Mask,"*"),ShowSystem=$G(ShowSystem,1)
I $E(DBPath,2)'[":" D NS^cQ21(.A) S B=A(DBPath,"globals") D DB^cQ21(.A) S DBPath=A(B) K A
K V
S objGblSearch=##class(%Library.ResultSet).%New()
S objGblSearch.ClassName="%SYS.GlobalQuery"
S objGblSearch.QueryName="DirectoryList"
D objGblSearch.Execute(DBPath,System,Mask,ShowSystem,.IntIndex)
while ( objGblSearch.Next(.Status) ) { // Get a row of data.
if ( $system.Status.IsOK(Status) ) { // check for errors.
S V("^"_objGblSearch.Data("Name"))=""
} else { // if there was an error escape loop.
quit
}
}
}
GD8Z Q
;
SPEC(S,X,Y,SPEC) N I,SPEC S S=$G(S) Q:'$L(S) S X=$G(X) Q:'$L(X) S Y=$G(Y) Q:'$L(Y)
S SPEC=$G(SPEC,"^BCBA\^BEBA\^BIBA\^BKBA\^DAMBA\^DATA\^DKL\^DKODE\^DMA\^DMC\^DMH\^DMM\^DMS\^IND\^INDEX\^ISO\^TCBA\^TCPRV\^VBBA\^VGBA\^VNBA\^cDATA\^cDIN\^cINDEX\^cQSYS\^cTABEL\^cTXT")
S ^[S]cLOG(X,"CHECK","G",Y,"GLOBALS")="special"
F I=1:1:$L(SPEC,"\") S ^[S]cLOG(X,"CHECK","G",Y,"GLOBALS",I)=$P(SPEC,"\",I)
Q
C(G,L) ;Check global G for L Levels
S G=$G(G),L=$G(L,0) I '$L(G) Q 0
N I I $E(G)'="^" S G="^"_G
I L=0 D A(G) Q 1
D D(G) I $D(X) Q 1
CZ Q 0
;
D(G) S G=$G(G) N J S J="" I $E(G)'="^" S G="^"_G
F S J=$O(@G@(J)) Q:J="" S GG=$ZR D
. I $QL(GG)=L D A(GG) Q
. D D(GG)
DZ Q
;
A(G) S %T=$$CHECK(G),K=%T_"\"_$P(%C,"#",1)_"\"_$P(%C,"#",2)_"\"_%tu_"\"_%tur
S I=$S(G["]":$P(G,"]",2),1:G),I=$S($E(I)="^":"",1:"^")_I
S @LOG@(S,I,DBS)=K
S @log@(S,I,DBS)=K
AZ Q
;
ERR S %=$ZE D ^cA400 Q
;
ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9