| 1 | HLEVUTI1 ;OIFO-O/LJA - Event Monitor UTILITIES ;02/04/2004 14:42
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
 | 
|---|
| 3 |  ;;
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ; Utility to aid in displaying 870 data...
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | CTRL ;
 | 
|---|
| 8 |  N ABRT,CT,CONT,DATA,DATE,DIC,GBL,HD,IOINHI,IOINORM,L870,LAST
 | 
|---|
| 9 |  N LNM,LNO,LNS,N,NO,NODE,TOT,TXT,WAY,WHAT,X,Y
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  S X="IOINHI;IOINORM" D ENDR^%ZISS
 | 
|---|
| 12 | CTRL0 W @IOF,$$CJ^XLFSTR("Logical Link Display",IOM),!,$$REPEAT^XLFSTR("=",IOM)
 | 
|---|
| 13 |  D QUEUES
 | 
|---|
| 14 |  W ! S L870=$$LINK Q:'L870
 | 
|---|
| 15 |  S GBL="^HLCS(870,"_L870_")"
 | 
|---|
| 16 |  S LNM=$$LNM(L870)
 | 
|---|
| 17 |  W "       ",LNM
 | 
|---|
| 18 | CTRL1 D SHOWHD(LNM,L870)
 | 
|---|
| 19 |  W !!,"What information for IN and OUT QUEUEs do you want to see?"
 | 
|---|
| 20 |  W !!,"1  Show IENs",!,"2  Show Summary nodes",!,"3  Totals",!,"4  Dots",!,"5  Find skips",!,"6  Message date search"
 | 
|---|
| 21 |  R !!,"Enter #: ",WHAT:99 G:WHAT<1!(WHAT>6) CTRL0 ;->
 | 
|---|
| 22 |  W !!,$$CJ^XLFSTR(" "_IOINHI_LNM_IOINORM_" ",IOM+$L(IOINHI)+$L(IOINORM),"=")
 | 
|---|
| 23 |  S ABRT=0,CONT=0,CT=0
 | 
|---|
| 24 |  S WAY=$$ASKWAY QUIT:WAY[U  ;->
 | 
|---|
| 25 |  S NO=$$ASKNO(LNM,L870,WAY) QUIT:NO[U  ;->
 | 
|---|
| 26 |  I WHAT=6 D SEARCH(L870,WAY,NO) G CTRL1 ;->
 | 
|---|
| 27 |  S TOT(WAY)=0,LAST=""
 | 
|---|
| 28 |  QUIT:$O(@GBL@(WAY,0))'>0  ;->
 | 
|---|
| 29 |  W !,$$CJ^XLFSTR(" "_$S(WAY=1:"IN",1:"OUT")_" QUEUE ",IOM,"-")
 | 
|---|
| 30 |  I WHAT=3 W !,"Totaling..."
 | 
|---|
| 31 |  F  S NO=$O(@GBL@(WAY,NO)) Q:'NO!ABRT  D
 | 
|---|
| 32 |  .  S CT=CT+1
 | 
|---|
| 33 |  .  S NODE=$G(@GBL@(WAY,NO,0)),DATE=$P($G(@GBL@(WAY,NO,1,0)),U,5)
 | 
|---|
| 34 |  .  S TXT=$G(@GBL@(WAY,NO,1,1,0))
 | 
|---|
| 35 |  .  S TXT=$E(DATE_"            ",1,10)_$E(NODE_"            ",1,12)_"  "_$E(TXT,1,56)
 | 
|---|
| 36 |  .  I WHAT=1 W:($X+$L(NO)+1)>IOM ! W:$X>0 "," W NO
 | 
|---|
| 37 |  .  I WHAT=2 D
 | 
|---|
| 38 |  .  .  W !,TXT
 | 
|---|
| 39 |  .  I WHAT=3 W:'(CT#5000) "." S TOT(WAY)=TOT(WAY)+1
 | 
|---|
| 40 |  .  I WHAT=4 Q:$$CT  W "."
 | 
|---|
| 41 |  .  I WHAT=5 D
 | 
|---|
| 42 |  .  .  I LAST,+LAST'=(NO-1) D
 | 
|---|
| 43 |  .  .  .  W !,+LAST,?10," ",$E($P(LAST,"~",2,999),1,IOM-$X)
 | 
|---|
| 44 |  .  .  .  W !,+NO,?10," ",$E(TXT,1,69)
 | 
|---|
| 45 |  .  .  S LAST=NO_"~"_TXT
 | 
|---|
| 46 |  .  I 'CONT,'(CT#20) R X:999 S:X[U ABRT=1 S:X=" " CONT=1
 | 
|---|
| 47 |  I 'ABRT,TOT(WAY) W !,"--- Total = #",TOT(WAY)
 | 
|---|
| 48 |  S ABRT="",CT=0
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  R !,"End of output... ",X:999
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  W !!,$$CJ^XLFSTR(" "_LNM_" ",IOM,"=")
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  G CTRL1 ;->
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | SHOWHD(LNM,L870) ; Show summary information...
 | 
|---|
| 57 |  N NODE
 | 
|---|
| 58 |  W !!,$$REPEAT^XLFSTR("=",IOM)
 | 
|---|
| 59 |  F NODE=0,100,200,300,400,"IN QUEUE BACK POINTER","IN QUEUE FRONT POINTER","OUT QUEUE BACK POINTER","OUT QUEUE FRONT POINTER" D
 | 
|---|
| 60 |  .  S DATA=$G(@GBL@(NODE)) Q:DATA']""  ;->
 | 
|---|
| 61 |  .  D PHD(NODE,DATA)
 | 
|---|
| 62 |  W !,$$REPEAT^XLFSTR("=",IOM)
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | CT() QUIT:(CT#500) ""
 | 
|---|
| 66 |  R X:999 Q:X']"" ""
 | 
|---|
| 67 |  S ABRT=1
 | 
|---|
| 68 |  Q 1
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | PHD(HD,DATA) ;
 | 
|---|
| 71 |  S HD=$$HD(HD)
 | 
|---|
| 72 |  S HD=$E("    ",1,4-$L(HD))_HD
 | 
|---|
| 73 |  W !,HD,"="
 | 
|---|
| 74 |  F  D  QUIT:DATA']""
 | 
|---|
| 75 |  .  QUIT:DATA']""
 | 
|---|
| 76 |  .  W $E(DATA,1,76)
 | 
|---|
| 77 |  .  S DATA=$E(DATA,77,999)
 | 
|---|
| 78 |  .  W:DATA]"" !,?4
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | HD(HD) ;
 | 
|---|
| 82 |  I HD["IN QUEUE F" S HD="IQFP"
 | 
|---|
| 83 |  I HD["IN QUEUE B" S HD="IQBP"
 | 
|---|
| 84 |  I HD["OUT QUEUE F" S HD="OQFP"
 | 
|---|
| 85 |  I HD["OUT QUEUE B" S HD="OQBP"
 | 
|---|
| 86 |  Q HD
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | LINK() N DIC,X,Y
 | 
|---|
| 89 |  S DIC=870,DIC(0)="AEMQN",DIC("A")="Select LINK: "
 | 
|---|
| 90 |  D ^DIC
 | 
|---|
| 91 |  QUIT $S(+Y:+Y,1:"")
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | QUEUES N LNM,LNO
 | 
|---|
| 94 |  KILL ^TMP($J,"ZZLJA")
 | 
|---|
| 95 |  S LNM=""
 | 
|---|
| 96 |  F  S LNM=$O(^HLCS(870,"B",LNM)) Q:LNM']""  D
 | 
|---|
| 97 |  .  S LNO=0
 | 
|---|
| 98 |  .  F  S LNO=$O(^HLCS(870,"B",LNM,LNO)) Q:'LNO  D
 | 
|---|
| 99 |  .  .  S LNS=$$LNM(LNO)
 | 
|---|
| 100 |  .  .  I $O(^HLCS(870,+LNO,1,0))>0 D
 | 
|---|
| 101 |  .  .  .  S ^TMP($J,"ZZLJA",LNS,1)=$P($G(^HLCS(870,+LNO,1,0)),U,3)
 | 
|---|
| 102 |  .  .  I $O(^HLCS(870,+LNO,2,0))>0 D
 | 
|---|
| 103 |  .  .  .  S ^TMP($J,"ZZLJA",LNS,2)=$P($G(^HLCS(870,+LNO,2,0)),U,3)
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  W !!,"Links with queues"
 | 
|---|
| 106 |  W !,"Link",?30,"IQ Totals",?45,"OQ Totals"
 | 
|---|
| 107 |  W !,$$REPEAT^XLFSTR("-",IOM)
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  S LNS=""
 | 
|---|
| 110 |  F  S LNS=$O(^TMP($J,"ZZLJA",LNS)) Q:LNS']""  D
 | 
|---|
| 111 |  .  W !
 | 
|---|
| 112 |  .  W:LNS["Mail]" IOINHI W $E(LNS_" --------------------",1,20),IOINORM
 | 
|---|
| 113 |  .  F WAY=1,2 D
 | 
|---|
| 114 |  .  .  S TOT=$G(^TMP($J,"ZZLJA",LNS,WAY))
 | 
|---|
| 115 |  .  .  S TOT=$E("---------------",1,15-$L(TOT))_TOT
 | 
|---|
| 116 |  .  .  W TOT
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  KILL ^TMP($J,"ZZLJA")
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | LNM(L870) N GBL,X
 | 
|---|
| 123 |  S GBL="^HLCS(870,"_L870_")",X=$G(@GBL@(0))
 | 
|---|
| 124 |  Q $P(X,U)_" #"_L870_" ["_$P("Mail^HLLP^X3.28^TCP",U,+$P(X,U,3))_"] "
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 | ASKNO(LNM,L870,WAY) ; Ask for beginning IEN to display...
 | 
|---|
| 127 |  N DIR,DIRUT,DTOUT,DUOUT,FIRST,LAST,X,Y
 | 
|---|
| 128 |  S FIRST=$O(^HLCS(870,+L870,WAY,0))
 | 
|---|
| 129 |  S LAST=$O(^HLCS(870,+L870,WAY,":"),-1)
 | 
|---|
| 130 |  W !!,"First IEN = ",FIRST
 | 
|---|
| 131 |  W !," Last IEN = ",LAST
 | 
|---|
| 132 |  W !
 | 
|---|
| 133 |  S DIR(0)="N^"_FIRST_":"_LAST,DIR("A")="Enter IEN"
 | 
|---|
| 134 |  I FIRST S DIR("B")=FIRST
 | 
|---|
| 135 |  D ^DIR
 | 
|---|
| 136 |  QUIT:$D(DIRUT)!($D(DTOUT))!($D(DUOUT)) U ;->
 | 
|---|
| 137 |  QUIT:+Y>0 (+Y-1) ;->  Will be used for $ORDER
 | 
|---|
| 138 |  Q 0
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 | ASKWAY() ; In or Out...
 | 
|---|
| 141 |  N DIR,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
| 142 |  S DIR(0)="S^1:Inbound Queue;2:Outbound Queue"
 | 
|---|
| 143 |  S DIR("A")="Select QUEUE"
 | 
|---|
| 144 |  D ^DIR
 | 
|---|
| 145 |  QUIT:+Y>0&(+Y<3) $P("1^2",U,+Y)
 | 
|---|
| 146 |  Q U
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | SEARCH(L870,WAY,NO,SKIP) ; Search for a date...
 | 
|---|
| 149 |  ; LNM -- req
 | 
|---|
| 150 |  N ABRT,CONT,CT,NUM
 | 
|---|
| 151 |  I '$D(SKIP) N SKIP
 | 
|---|
| 152 | S1 S SKIP=$S($G(SKIP):+SKIP,1:5000),ABRT=0,CT=0,CONT=0
 | 
|---|
| 153 |  S NUM=NO-1,NUM=$O(^HLCS(870,+L870,WAY,NUM))
 | 
|---|
| 154 |  W !!
 | 
|---|
| 155 |  D SRCH1(L870,WAY,+NUM)
 | 
|---|
| 156 |  F  D  QUIT:NUM'>0!(ABRT)
 | 
|---|
| 157 |  .  S NUM=NUM+SKIP
 | 
|---|
| 158 |  .  S NUM=$O(^HLCS(870,+L870,WAY,NUM)) QUIT:NUM'>0  ;->
 | 
|---|
| 159 |  .  D SRCH1(L870,WAY,+NUM)
 | 
|---|
| 160 |  W !,"Just completed a search using a starting point of IEN=",NO,", and an offset"
 | 
|---|
| 161 |  W !,"of #",SKIP,".  You may now enter a new starting IEN and offset."
 | 
|---|
| 162 |  W !
 | 
|---|
| 163 |  S NO=$$ASKNO(LNM,L870,WAY) QUIT:NO[U  ;->
 | 
|---|
| 164 |  R !,"Enter OFFSET: ",OFFSET:90 I OFFSET>0 S SKIP=OFFSET G S1 ;->
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | SRCH1(L870,WAY,IEN) ; Show date of entry...
 | 
|---|
| 168 |  N MSH,DATE,DEL
 | 
|---|
| 169 |  S MSH=$G(^HLCS(870,+L870,WAY,IEN,1,1,0))
 | 
|---|
| 170 |  S DEL=$E(MSH,4),DATE=$P(MSH,DEL,7)
 | 
|---|
| 171 |  S DATE=$S(DATE?14N.1"-".N:$$HTFM^XLFDT(DATE),1:"")
 | 
|---|
| 172 |  S DATE=$S(DATE?7N.E:DATE,1:$P($G(^HLCS(870,+L870,WAY,IEN,1,0)),U,5))
 | 
|---|
| 173 |  QUIT:DATE'?7N.E  ;->
 | 
|---|
| 174 |  W $J($$SDT(DATE)_"(#"_IEN_")",18)_"  "
 | 
|---|
| 175 |  S CT=CT+1
 | 
|---|
| 176 |  I 'CONT,'(CT#80) R X:999 S:X[U ABRT=1 S:X=" " CONT=1
 | 
|---|
| 177 |  Q
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | SDT(DATE) ; Return shortened form of date...
 | 
|---|
| 180 |  I DATE?7N QUIT $E(DATE,4,5)_"/"_$E(DATE,6,7)_"/"_$E(DATE,2,3) ;->
 | 
|---|
| 181 |  I DATE?7N1"."1.N QUIT $E(DATE,4,5)_"/"_$E(DATE,6,7)_"/"_$E(DATE,2,3)_"@"_$E($P($$FMTE^XLFDT(DATE),"@",2),1,5)
 | 
|---|
| 182 |  QUIT ""
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | TEST ; Hardwire IENs and test M code in monitor (only)...
 | 
|---|
| 185 |  N IEN,MCODE,STATE,WAY
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 |  W @IOF,$$CJ^XLFSTR("Monitor Test Utility",IOM)
 | 
|---|
| 188 |  W !,$$REPEAT^XLFSTR("=",IOM)
 | 
|---|
| 189 |  W !,"This utility sets the ^TMP(""HLEVFLAG"",$J) node to ""STOP"" to avoid any"
 | 
|---|
| 190 |  W !,"Event Monitor activity.  This enables the debugging of M code."
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  S STATE=$G(^TMP("HLEVFLAG",$J))
 | 
|---|
| 193 |  ;
 | 
|---|
| 194 |  F  D  QUIT:'IEN
 | 
|---|
| 195 |  .  W !
 | 
|---|
| 196 |  .  S IEN=$$ASKIEN^HLEVREP(776.1) QUIT:'IEN  ;->
 | 
|---|
| 197 |  .
 | 
|---|
| 198 |  .  S MCODE=$TR($P($G(^HLEV(776.1,+IEN,0)),U,6),"~",U)
 | 
|---|
| 199 |  .  I MCODE']"" W "   no M code found..." QUIT  ;->
 | 
|---|
| 200 |  .  W !!,"M code = ",MCODE
 | 
|---|
| 201 |  .
 | 
|---|
| 202 |  .  W !!,"You may ZG ",MCODE," or D ",MCODE,"..."
 | 
|---|
| 203 |  .  W !
 | 
|---|
| 204 |  .  S WAY=$$YN^HLCSRPT4("DO the MCODE","Yes")
 | 
|---|
| 205 |  .  S WAY=$S(WAY=1:1,1:2) ; 1=DO, 2=ZG
 | 
|---|
| 206 |  .
 | 
|---|
| 207 |  .  W !
 | 
|---|
| 208 |  .  I '$$YN^HLCSRPT4("OK to test now","Yes") D  QUIT  ;->
 | 
|---|
| 209 |  .  .  W "   no action taken..."
 | 
|---|
| 210 |  .
 | 
|---|
| 211 |  .  S ^TMP("HLEVFLAG",$J)="STOP"
 | 
|---|
| 212 |  .
 | 
|---|
| 213 |  .  D TESTRUN
 | 
|---|
| 214 |  .
 | 
|---|
| 215 |  .  KILL ^TMP("HLEVFLAG",$J)
 | 
|---|
| 216 |  .  W !!,$$REPEAT^XLFSTR("-",IOM)
 | 
|---|
| 217 |  ;
 | 
|---|
| 218 |  I STATE]"" S ^TMP("HLEVFLAG",$J)=STATE
 | 
|---|
| 219 |  ;
 | 
|---|
| 220 |  Q
 | 
|---|
| 221 |  ;
 | 
|---|
| 222 | TESTRUN ; Call here from above to avoid LEVEL ERRORs with ZGo...
 | 
|---|
| 223 |  ; MCODE,WAY -- req
 | 
|---|
| 224 |  I WAY=1 D
 | 
|---|
| 225 |  .  W "  DOing ",MCODE,"... "
 | 
|---|
| 226 |  .  D @MCODE
 | 
|---|
| 227 |  I WAY=2 D
 | 
|---|
| 228 |  .  W "  ZGOing ",MCODE,"... "
 | 
|---|
| 229 |  .  X "ZG "_@MCODE
 | 
|---|
| 230 |  Q
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 | COLLECT(I772) ; Collect 772 & 773 data...
 | 
|---|
| 233 |  N CT,I773
 | 
|---|
| 234 |  D ADD(""),ADD($$CJ^XLFSTR(" 772# "_I772_" ",74,"-"))
 | 
|---|
| 235 |  S I773=0,CT=0
 | 
|---|
| 236 |  F  S I773=$O(^TMP($J,"HLIEN",IEN,I773)) Q:'I773  D
 | 
|---|
| 237 |  .  I CT>0 D ADD("")
 | 
|---|
| 238 |  .  D COLL773(+I773)
 | 
|---|
| 239 |  .  S CT=CT+1
 | 
|---|
| 240 |  D ADD($$CJ^XLFSTR("----------------------------------------",74))
 | 
|---|
| 241 |  D COLL772(+I772)
 | 
|---|
| 242 |  Q
 | 
|---|
| 243 |  ;
 | 
|---|
| 244 | COLL773(I773) ;
 | 
|---|
| 245 |  N LP,ST
 | 
|---|
| 246 |  S LP="^HLMA("_I773,ST=LP_",",LP=LP_")"
 | 
|---|
| 247 |  F  S LP=$Q(@LP) Q:LP'[ST  D
 | 
|---|
| 248 |  .  D ADD(LP_"="_@LP)
 | 
|---|
| 249 |  Q
 | 
|---|
| 250 |  ;
 | 
|---|
| 251 | COLL772(I772) ;
 | 
|---|
| 252 |  N CT,LASTIN,LP,ST
 | 
|---|
| 253 |  S LP="^HL(772,"_I772,ST=LP_",",LP=LP_")",CT=0,LASTIN=""
 | 
|---|
| 254 |  F  S LP=$Q(@LP) Q:LP'[ST  D
 | 
|---|
| 255 |  .  I $TR(LP,"""","")?1"^HL(772,"1.N1",IN,"1.N.E D  QUIT:CT>5  ;->
 | 
|---|
| 256 |  .  .  S CT=CT+1
 | 
|---|
| 257 |  .  .  I CT=7 D ADD("... some data not shown ...")
 | 
|---|
| 258 |  .  .  S LASTIN=LP
 | 
|---|
| 259 |  .  D ADD(LP_"="_@LP)
 | 
|---|
| 260 |  I LASTIN]"",CT>6 D ADD(LASTIN_"="_@LASTIN)
 | 
|---|
| 261 |  Q
 | 
|---|
| 262 |  ;
 | 
|---|
| 263 | ADD(TXT) ; Add text for report...
 | 
|---|
| 264 |  ; SCRN -- req
 | 
|---|
| 265 |  N NO,POSX
 | 
|---|
| 266 |  S POSX=$L($P(TXT,"="))+1
 | 
|---|
| 267 |  F  D  QUIT:TXT']""
 | 
|---|
| 268 |  .  I 'SCRN D  ; Store for email message...
 | 
|---|
| 269 |  .  .  S NO=$O(^TMP($J,"HLMAIL",":"),-1)+1
 | 
|---|
| 270 |  .  .  S ^TMP($J,"HLMAIL",+NO)=$E(TXT,1,74)
 | 
|---|
| 271 |  .  I SCRN W !,$E(TXT,1,74) ; Display on-screen
 | 
|---|
| 272 |  .  S TXT=$E(TXT,75,999) QUIT:TXT']""  ;->
 | 
|---|
| 273 |  .  S TXT=$$REPEAT^XLFSTR(" ",$S(POSX:POSX,1:5))_TXT
 | 
|---|
| 274 |  Q
 | 
|---|
| 275 |  ;
 | 
|---|
| 276 | DOLRO(TAG,SNO) ; Store debug data in ^XTMP("HLEVUTI1 "_DT,NO)...
 | 
|---|
| 277 |  N NO,X,XTMP
 | 
|---|
| 278 |  ;
 | 
|---|
| 279 |  S XTMP="HLEVUTI1 "_TAG_"-"_DT
 | 
|---|
| 280 |  S:'$D(^XTMP(XTMP,0)) ^XTMP(XTMP,0)=$$FMADD^XLFDT(DT,1)_U_$$NOW^XLFDT_"^Debug data created by DOLRO~HLEVUTI1"
 | 
|---|
| 281 |  ;
 | 
|---|
| 282 |  S NO=$O(^XTMP(XTMP,":"),-1)+1,NO=$S(NO>($G(SNO)-1):NO,1:SNO)
 | 
|---|
| 283 |  ;
 | 
|---|
| 284 |  S X="^XTMP("""_XTMP_""","_NO_"," D DOLRO^%ZOSV
 | 
|---|
| 285 |  ;
 | 
|---|
| 286 |  Q
 | 
|---|
| 287 |  ;
 | 
|---|
| 288 | EOR ;HLEVUTI1 - Event Monitor UTILITIES ;5/16/03 14:42
 | 
|---|