vhBAD ; Global compare CACHE01-CACHE02 [ 12/20/2003 12:27 PM ] Quit ; ; Oproep vanuit de taskmanager TASKMGR ; Global compare CACHE01-CACHE02 New Main,Remote Set $ZT="^cA400" Set ^vhBAD("Z","TASKMGR",$ZU(5))=$H Set Main=^vhBAD("P","MAIN"),Remote=^vhBAD("P","REMOTE") If Main=$ZU(5) Do AllMainGlobals If Remote=$ZU(5) Do . Quit:+$G(^vhBAD("CS","G",Main))'=+$H ; Bestand niet aangemaakt op het main systeem . Quit:+$G(^vhBAD("CS","G",$ZU(5)))=+$H ; De vergelijking is reeds gestart op het remote systeem . Do AllRemoteGlobals . Do MAIL Set $P(^vhBAD("Z","TASKMGR",$ZU(5)),"^",2)=$H Quit ; ; Bereken checksum van alle MainGlobals AllMainGlobals New Global Set ^vhBAD("Z","AllMainGlobals",$ZU(5))=$H Do:+$G(^vhBAD("CS","G",$ZU(5)))'=+$H . Kill ^vhBAD("CS") . Set ^vhBAD("CS","G",$ZU(5))=$H ; om te beletten dat het meerdere keren kan opgstart worden . Kill ^vhBAD("CM","G") . Set ^vhBAD("CM","G")=$H . Set Global="" . For Set Global=$O(^$Global(Global)) Quit:Global="" Do . . Quit:$D(^vhBAD("NC","G",$E(Global,2,99))) ; Deze global moet niet vergeleken worden . . Quit:'$D(@Global) ; Deze global bestaat niet . . Do OneMainGlobal(Global) . Set $P(^vhBAD("CS","G",$ZU(5)),"^",2)=$H . Set $P(^vhBAD("CM","G"),"^",2)=$H Set $P(^vhBAD("Z","AllMainGlobals",$ZU(5)),"^",2)=$H Quit ; ; Bereken checksum van een MainGlobal OneMainGlobal(Global) Do:'$D(^vhBAD("NC","G",$E(Global,2,99))) ; Deze global mag vergeleken worden . Set ^vhBAD("CM","G",$E(Global,2,99))=$H . Set CheckSum=$$CRC^|"ADMIN1"|MSMCOMP(Global) . Set ^vhBAD("CS","G",$ZU(5),$E(Global,2,99))=CheckSum . Set $P(^vhBAD("CM","G",$E(Global,2,99)),"^",2)=$H Quit ; ; Bereken checksum van alle remoteglobals AllRemoteGlobals New Global,Main,MainCheckSum,CheckSumOk,Exit Set ^vhBAD("Z","AllRemoteGlobals",$ZU(5))=$H Set Main=^vhBAD("P","MAIN") Do:+$G(^vhBAD("CS","G",Main))=+$H . Quit:+$G(^vhBAD("CS","G",$ZU(5)))=+$H . Set ^vhBAD("CS","G",$ZU(5))=$H ; om te beletten dat het meerdere keren kan opgstart worden . Kill ^vhBAD("CR","G") . Set ^vhBAD("CR","G")=$H . Set Global="" . Kill ^vhBAD("NO"),^vhBAD("NF") . For Set Global=$O(^vhBAD("CS","G",Main,Global)) Do Quit:$G(Exit) . . If Global="" Do Quit . . . If '$P(^vhBAD("CS","G",Main),"^",2) Hang 5 Quit . . . Set Exit=$D(Exit) ; Indien afgewerkt aan de main-kant moet de loop nog een keer doorlopen worden . . If $D(^vhBAD("NC","G",Global)) Set $P(^vhBAD("CS","G",Main,Global),"^",2)="NC" Quit ; Deze global moet niet vergeleken worden . . Set CheckSumOk=$P(^vhBAD("CS","G",Main,Global),"^",2) . . Quit:$L(CheckSumOk) . . Do OneRemoteGlobal("^"_Global) . Set $P(^vhBAD("CS","G",$ZU(5)),"^",2)=$H . Set $P(^vhBAD("CR","G"),"^",2)=$H Set $P(^vhBAD("Z","AllRemoteGlobals",$ZU(5)),"^",2)=$H Quit ; ; Bereken checksum van een remoteglobal OneRemoteGlobal(Global) New Main,MainCheckSum,RemoteCheckSum Set Main=^vhBAD("P","MAIN"),MainCheckSum=$G(^vhBAD("CS","G",Main,$E(Global,2,99))) Do:$L(MainCheckSum) . Kill ^vhBAD("NF","G",$ZU(5),$E(Global,2,99)),^vhBAD("NO","G",$ZU(5),$E(Global,2,99)) . Set ^vhBAD("CR","G",$E(Global,2,99))=$H . If '$D(@Global) Set RemoteCheckSum="0\0\0",^vhBAD("NF","G",$ZU(5),$E(Global,2,99))=MainCheckSum_"^"_RemoteCheckSum . Else Do . . Set RemoteCheckSum=$$CRC^|"JRNL-ADMIN1"|MSMCOMP(Global) . . Quit:MainCheckSum=RemoteCheckSum . . Set ^vhBAD("NO","G",$ZU(5),$E(Global,2,99))=MainCheckSum_"^"_RemoteCheckSum . Set $P(^vhBAD("CS","G",Main,$E(Global,2,99)),"^",2)=MainCheckSum=RemoteCheckSum . Set $P(^vhBAD("CR","G",$E(Global,2,99)),"^",2)=$H Quit ; MAIL New Set D="\" Kill ^vhBAD("MAIL") If '$D(^vhBAD("NF")),'$D(^vhBAD("NO")) Do ; Er zijn geen verschillen .Set MainSystem=##class(TECH.Context.RuntimeContext).Instance().GeefServerNaam()_"@VANHOECKE.BE",Main=^vhBAD("P","MAIN") .Set ToGroep="ERROR",To=$$MAILTO(ToGroep) .Set Subject="Vergelijken CACHE01("_Main_") <--> "_##class(TECH.Context.RuntimeContext).Instance().GeefServerNaam()_"("_$ZU(5)_")" .Set Body="Er zijn geen fouten gevonden." .Set Status=$$SendMiniMail^vhLib(MainSystem,To,Subject,Body) .Set ^vhBAD("MAIL",Main,"OK")=$H Else Do ; Er zijn verschillen .Set MainSystem=##class(TECH.Context.RuntimeContext).Instance().GeefServerNaam()_"@VANHOECKE.BE",Main=^vhBAD("P","MAIN") .Set ToGroep="SYS",To=$$MAILTO(ToGroep) .Set Subject="Vergelijken CACHE01("_Main_") <--> "_##class(TECH.Context.RuntimeContext).Instance().GeefServerNaam()_"("_$ZU(5)_")" .Set Body="Er werden fouten gevonden bij het vergelijken van CACHE01("_Main_") en " .Set Body=Body_##class(TECH.Context.RuntimeContext).Instance().GeefServerNaam()_"("_$ZU(5)_")."_$C(13)_"Gelieve na te zien." .For FileTyp="R","G" For Not="NO","NF" Do ..Quit ; Het overzicht is afgsloten (Crash) ..Quit:'$D(^vhBAD(Not,FileTyp,$ZU(5))) ..Set Body=Body_$C(13)_$C(13)_$C(13)_$S(FileTyp="R":"Routines ",FileTyp="G":"Globals ",1:"")_"in namespace "_Main_" " ..Set Body=Body_$S(Not="NO":"niet ok",Not="NF":"niet gevonden",1:"")_" in namespace "_$ZU(5)_$C(13)_$C(13) ..Set Ref="",Count=0 ..For Set Ref=$O(^vhBAD(Not,FileTyp,$ZU(5),Ref)) Quit:Ref="" Do ...Set Count=Count+1 Set:Count>4 Body=Body_$C(13),Count=1 ...Set Body=Body_Ref_$J("",20-$L(Ref)) .Set Body=Body_$C(13)_$C(13)_"Het overzicht via ""Do ShowErrors^|""JRNL-ADMIN1""|vhBAD"" in de namespace """_$ZU(5)_"""." .Set Status=$$SendMiniMail^vhLib(MainSystem,To,Subject,Body) .Set ^vhBAD("MAIL",Main,"NOK")=$H Quit ; MAILTO(ToGroep) New To Set ToGroep=$G(ToGroep,"ERROR") Set To=$$USERNAME^vhUSER(ToGroep,"@",1) Quit To ; ; Berekenen Checksum op remote sytem, opgestart via de caretaker CalcCheckSum New System,Global Set ^vhBAD("Z","CalcCheckSum",$ZU(5))=$H Set System="" For Set System=$O(^vhBAD("CS","G",System)) Quit:System="" Do . Quit:$G(^vhBAD("CS","G",System))'="START" ; Om te beletten dat het meerdere keren gestart word . Set ^vhBAD("CS","G",System)=$H . For Quit:^vhBAD("CS","G",System)="STOP" Quit:$$DIFFTIME^vhLib.DataTypes(^vhBAD("CS","G",System),$H)>600 Do Hang 5 .. Set Global="" .. For Set Global=$O(^vhBAD("CS","G",System,Global)) Quit:Global="" Do ... Quit:$L(^vhBAD("CS","G",System,Global)) ... Set ^vhBAD("CS","G",System,Global)=$$CRC^MSMCOMP("^"_Global) ... Set ^vhBAD("CS","G",System)=$H . Kill ^vhBAD("CS","G",System) Set $P(^vhBAD("Z","CalcCheckSum",$ZU(5)),"^",2)=$H Quit ; ShowErrors New Global If ^vhBAD("P","REMOTE")=$ZU(5) Do . Write /CUP(1,1),/ED . Write !,"Resultaat van de vergelijking tussen ",^vhBAD("P","MAIN")," en ",^vhBAD("P","REMOTE"),"." . Write !,"Op ",$$EXTDATE^vhLib.DataTypes(^vhBAD("CR","G")) . Write " van ",$$EXTTIME^vhLib.DataTypes($P(^vhBAD("CR","G"),"^"))," tot ",$$EXTTIME^vhLib.DataTypes($P(^vhBAD("CR","G"),"^",2)),".",! . Do:$D(^vhBAD("NO","G",$ZU(5))) . . Write !,"Volgende bestanden zijn niet in orde.",!! . . Set Global="",Count=0 . . For Set Global=$O(^vhBAD("NO","G",$ZU(5),Global)) Quit:Global="" Do . . . Set Count=Count+1 . . . Write:'(Count#2) ! . . . Write Global,$J("",40-$L(Global)) . Do:$D(^vhBAD("NF","G",$ZU(5))) . . Write !!,"Volgende bestanden werden niet gevonden.",!! . . Set Global="",Count=0 . . For Set Global=$O(^vhBAD("NF","G",$ZU(5),Global)) Quit:Global="" Do . . . Set Count=Count+1 . . . Write:'(Count#2) ! . . . Write Global,$J("",40-$L(Global)) Quit ;