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