Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XTRMON

XTRMON.m

Go to the documentation of this file.
  1. XTRMON ;ISCSF/RWF - Watch for changes in routine checksums. ;02 Jul 2003 2:59 pm
  1. ;;7.3;TOOLKIT;**27,59,70**;Apr 25, 1995
  1. A N CNT,NOW,MODE,RTN,RN,RSUM,TEST,XMB,DA,DIC,X0,OS
  1. K ^TMP($J)
  1. S CNT=0,NOW=$$HTFM^XLFDT($H),U="^"
  1. S RSUM=^%ZOSF("RSUM"),TEST=^%ZOSF("TEST")
  1. S OS=^%ZOSF("OS")
  1. S MODE=$G(^XTV(8989.3,1,"RM")) I "n"[$E(MODE) Q
  1. G ALL:"a"=$E(MODE)
  1. SEL S RTN=""
  1. F S RTN=$O(^XTV(8989.3,1,"RM1","B",RTN)) Q:RTN="" D
  1. . I RTN["*" D RANGE($P(RTN,"*")) Q
  1. . D CHK(RTN)
  1. . Q
  1. EXIT ;
  1. D LOST
  1. S XMB="XTRMON",XMTEXT="^TMP($J,",XMB(1)=$$FMTE^XLFDT(NOW,1),XMB(2)=CNT
  1. X ^%ZOSF("UCI") S XMB(3)=Y
  1. D:CNT>0 ^XMB
  1. K XMB,CNT,RN,RTN
  1. Q
  1. ;
  1. RANGE(RTN) ;Check a N-space
  1. S RN=RTN D CHK(RTN) ;Check for rtn with namespace name
  1. I OS["GT.M" G GRNG
  1. F S RN=$O(^$ROUTINE(RN)) Q:$E(RN,1,$L(RTN))'=RTN D CHK(RN)
  1. Q
  1. ;
  1. GRNG ;Check a N-space in GT.M
  1. N X,RA,RY,RX S RSUM="S Y=$$RSUM^%ZOSV2(X)"
  1. I '$D(ZTQUEUED) W !,"Namespace: "_RTN
  1. S X=$ZSEARCH("*.X"),RA=$$RTNDIR^%ZOSV_RTN,RY=RA_"*.m"
  1. F S RX=$ZSEARCH(RY) Q:(RX="")!(RX'[RA) D
  1. . S RX=$TR(RX,"]","/"),RN=$P($P(RX,"/",$L(RX,"/")),".",1)
  1. . D CHK(RN)
  1. Q
  1. ;
  1. ALL ;Check all routines
  1. I OS["GT.M" G GALL
  1. S RN="" F S RN=$O(^$ROUTINE(RN)) Q:RN="" D CHK(RN)
  1. G EXIT
  1. ;
  1. GALL ;GT.M all routines
  1. N X,RY,RX S RSUM="S Y=$$RSUM^%ZOSV2(X)"
  1. S X=$ZSEARCH("*.X"),RY=$$RTNDIR^%ZOSV_"A.m"
  1. F S RX=$ZSEARCH(RY) Q:(RX="")!(RX'["*") D
  1. . S RX=$TR(RX,"]","/"),RN=$P($P(RX,"/",$L(RX,"/")),".",1) D CHK(RN)
  1. G EXIT
  1. ;
  1. CHK(RN) ;Check one routine
  1. N $ET,$ES S $ET="D CHKERR^XTRMON Q"
  1. S X=RN X TEST Q:'$T
  1. S DA=$O(^DIC(9.8,"B",RN,0)) I DA<1 D Q:DA'>0 ;See if RN is in file
  1. . S X=RN,DIC="^DIC(9.8,",DIC(0)="ML" D FILE^DICN ;No, so add
  1. . S DA=+Y I DA>0 S DIE=DIC,DR="1///R" D ^DIE ;Set routine flag
  1. . Q
  1. S X0=^DIC(9.8,DA,0),X=RN X RSUM I '$D(ZTQUEUED) W "." ;Test
  1. Q:(Y<0)!(Y=+$P(X0,U,5))
  1. D LOG($E(RN_" ",1,10)_$S($P(X0,U,5)>0:"Has changed, Old: "_$P(X0,U,5)_" New: "_Y,1:"Is new"))
  1. I '$D(ZTQUEUED) W !,RN,?10,$S($P(X0,U,5)>0:"Has changed",1:"Is new")
  1. S $P(^DIC(9.8,DA,0),U,5,6)=Y_U_NOW
  1. Q
  1. ;
  1. CHKERR ;Handle an error during check
  1. S $ET="D ^%ZTER G UNWIND^%ZTER"
  1. D LOG(RN_" Caused an error: "_$$EC^%ZOSV)
  1. S Y=-1,$EC="" ;Set Y=-1 to stop test
  1. Q
  1. ;
  1. LOG(MSG) ;Record message
  1. S CNT=CNT+1,^TMP($J,CNT,0)=MSG
  1. Q
  1. ;
  1. LOST ;Look for routines no-longer in the system
  1. I '$D(ZTQUEUED) W !,"Starting LOST routine check."
  1. S RTN=""
  1. F S RTN=$O(^DIC(9.8,"B",RTN)) Q:RTN="" D
  1. . Q:$E(RTN)="%"
  1. . S IX=$O(^DIC(9.8,"B",RTN,0)),X0=$G(^DIC(9.8,+IX,0)) Q:$P(X0,U,2)="PK"
  1. . S X=RTN X TEST Q:$T
  1. . D LOG($E(X_" ",1,10)_"Not in UCI")
  1. . S DA=IX,DIK="^DIC(9.8," D ^DIK
  1. . Q
  1. Q