[613] | 1 | HLEVSRV1 ;O-OIFO/LJA - Event Monitor SERVER ;02/04/2004 14:42
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
|
---|
| 3 | ;
|
---|
| 4 | OPENM ; Open/close access to M code...
|
---|
| 5 | D OFFBEF
|
---|
| 6 | D HDM,EXM,STM,SWM
|
---|
| 7 | Q
|
---|
| 8 | ;
|
---|
| 9 | OKCODE(CODE) ; Check if license available and if so, mark used...
|
---|
| 10 | N XTMP
|
---|
| 11 | D OFFBEF
|
---|
| 12 | S XTMP=$O(^XTMP("HLEV SERVER M 9999999"),-1) QUIT:XTMP']"" "" ;->
|
---|
| 13 | QUIT:'$D(^XTMP(XTMP,"LIC",CODE)) "" ;->
|
---|
| 14 | QUIT:$G(^XTMP(XTMP,"LIC",CODE))]"" "" ;->
|
---|
| 15 | S ^XTMP(XTMP,"LIC",CODE)=$$NOW^XLFDT_U_.5_U_$G(XMZ)_U_$G(ZTSK)
|
---|
| 16 | Q 1
|
---|
| 17 | ;
|
---|
| 18 | OFFBEF ; Turn off all but last M code entry...
|
---|
| 19 | N XTMP
|
---|
| 20 | S XTMP=$O(^XTMP("HLEV SERVER M 9999999"),-1) QUIT:XTMP']"" ;->
|
---|
| 21 | F S XTMP=$O(^XTMP(XTMP),-1) Q:XTMP']"" D
|
---|
| 22 | . D SETOFF(XTMP)
|
---|
| 23 | Q
|
---|
| 24 | ;
|
---|
| 25 | SWM ; Switch state...
|
---|
| 26 | N STAT
|
---|
| 27 | S STAT=$$MST
|
---|
| 28 | I +STAT=0 D UPM
|
---|
| 29 | I +STAT=1 D DOWNM
|
---|
| 30 | W !
|
---|
| 31 | S X=$$BTE^HLCSMON("Press RETURN to exit... ")
|
---|
| 32 | Q
|
---|
| 33 | ;
|
---|
| 34 | DOWNM ; Turn off M code execution...
|
---|
| 35 | ; STAT -- req
|
---|
| 36 | N END,START,XTMP
|
---|
| 37 | S XTMP=$O(^XTMP("HLEV SERVER M 9999999"),-1)
|
---|
| 38 | I XTMP']"" D QUIT ;->
|
---|
| 39 | . W !!,"M code execution is OFF already..."
|
---|
| 40 | W !
|
---|
| 41 | I '$$YN^HLCSRPT4("Turn off M code execution") D QUIT ;->
|
---|
| 42 | . W " nothing changed..."
|
---|
| 43 | D SETOFF(XTMP)
|
---|
| 44 | W " M code execution disallowed..."
|
---|
| 45 | Q
|
---|
| 46 | ;
|
---|
| 47 | UPM ; Turn on M code execution...
|
---|
| 48 | ; STAT -- req
|
---|
| 49 | N CODES,END,IOBOFF,IOBON,NOC,START,X,XTMP
|
---|
| 50 | ;
|
---|
| 51 | S X="IOBOFF;IOBON" D ENDR^%ZISS
|
---|
| 52 | S XTMP="HLEV SERVER M "_$$NOW^XLFDT
|
---|
| 53 | ;
|
---|
| 54 | W !
|
---|
| 55 | I '$$YN^HLCSRPT4("Turn on M code execution","No") D QUIT ;->
|
---|
| 56 | . W " nothing changed..."
|
---|
| 57 | ;
|
---|
| 58 | W !!,"Before M code execution can be turned on, you must answer a few questions..."
|
---|
| 59 | W !!,"Please include ",IOBON,"time",IOBOFF
|
---|
| 60 | W " when entering the start and end date/times..."
|
---|
| 61 | ;
|
---|
| 62 | W !
|
---|
| 63 | S START=$$ASKDATE^HLEVAPI2("Enter START TIME","","NOW")
|
---|
| 64 | I START'?7N1"."1.N D QUIT ;->
|
---|
| 65 | . W " exiting..."
|
---|
| 66 | ;
|
---|
| 67 | W !!,"Prompting START+24 hours..."
|
---|
| 68 | W !
|
---|
| 69 | S END=$$ASKDATE^HLEVAPI2("Enter END TIME","",$$FMTE^XLFDT($$FMADD^XLFDT(START,1)))
|
---|
| 70 | I END'?7N1"."1.N D QUIT ;->
|
---|
| 71 | . W " exiting..."
|
---|
| 72 | ;
|
---|
| 73 | W !
|
---|
| 74 | S NOC=$$ASKCODES(.CODES) I 'NOC D QUIT ;->
|
---|
| 75 | . W " exiting..."
|
---|
| 76 | W !!,$S(NOC=1:"The '"_$O(CODES(""))_"' license",1:"These licenses")
|
---|
| 77 | W " will be installed if you turn on M code execution now:"
|
---|
| 78 | ;
|
---|
| 79 | I NOC>1 D
|
---|
| 80 | . W !!,?5
|
---|
| 81 | . S CODES=""
|
---|
| 82 | . F S CODES=$O(CODES(CODES)) Q:CODES']"" D
|
---|
| 83 | . . W:($X+$L(CODES))>IOM !,?5
|
---|
| 84 | . . W $E(CODES_" ",1,10)
|
---|
| 85 | ;
|
---|
| 86 | W !
|
---|
| 87 | I '$$YN^HLCSRPT4("OK to turn on M code execution") D QUIT ;->
|
---|
| 88 | . W " nothing changed..."
|
---|
| 89 | ;
|
---|
| 90 | D SETON(XTMP,START,END)
|
---|
| 91 | W " M code execution allowed..."
|
---|
| 92 | ;
|
---|
| 93 | W !!,"Be sure to pass on ",$S(NOC>1:"these licenses",1:"the license")
|
---|
| 94 | W " to the VistA HL7 team..."
|
---|
| 95 | D LICENSE(XTMP,.CODES)
|
---|
| 96 | ;
|
---|
| 97 | W !
|
---|
| 98 | S X=$$BTE^HLCSMON("Press RETURN to exit...")
|
---|
| 99 | ;
|
---|
| 100 | Q
|
---|
| 101 | ;
|
---|
| 102 | LICENSE(XTMP,CODES) ; Install licenses
|
---|
| 103 | N CODE
|
---|
| 104 | W !!,"Codes: "
|
---|
| 105 | ;
|
---|
| 106 | S CODE=""
|
---|
| 107 | F S CODE=$O(CODES(CODE)) Q:CODE']"" D
|
---|
| 108 | . S ^XTMP(XTMP,"LIC",CODE)="" ; Mailman server uses stored on this node
|
---|
| 109 | . S X=$E(CODE_" ",1,20) W:($X+$L(X))>IOM !,?10 W X
|
---|
| 110 | ;
|
---|
| 111 | Q
|
---|
| 112 | ;
|
---|
| 113 | ASKCODES(CODES) ; Ask user for codes...
|
---|
| 114 | N CODE,NOC
|
---|
| 115 | ;
|
---|
| 116 | W !!,"You must now give the VistA HL7 team ""licences"" for M code execution. One"
|
---|
| 117 | W !,"license is used for every Mailman server request containing executable M "
|
---|
| 118 | W !,"code."
|
---|
| 119 | W !
|
---|
| 120 | ;
|
---|
| 121 | S NOC=0
|
---|
| 122 | F D QUIT:CODE']""
|
---|
| 123 | . S CODE=$$CODE QUIT:CODE']"" ;->
|
---|
| 124 | . S ANS=$$YN^HLCSRPT4("Install the license# ["_CODE_"]","Yes")
|
---|
| 125 | . I ANS'=1 S CODE="" W " not intalled..." QUIT ;->
|
---|
| 126 | . S NOC=NOC+1,CODES(CODE)=""
|
---|
| 127 | ;
|
---|
| 128 | Q NOC
|
---|
| 129 | ;
|
---|
| 130 | SETON(XTMP,START,END) ; Allow M code execution
|
---|
| 131 | S ^XTMP(XTMP,0)=$$FMADD^XLFDT($$NOW^XLFDT,7)_U_$$NOW^XLFDT_U_"VistA HL7 Mailman Server M Control"
|
---|
| 132 | S ^XTMP(XTMP,"STATUS")=START_U_END_U_$G(DUZ)
|
---|
| 133 | Q
|
---|
| 134 | ;
|
---|
| 135 | SETOFF(XTMP) ; Disallow M code execution...
|
---|
| 136 | S $P(^XTMP(XTMP,"STATUS"),U,4,5)=$$NOW^XLFDT_U_$G(DUZ)
|
---|
| 137 | Q
|
---|
| 138 | ;
|
---|
| 139 | STM ; What is the status of M code execution?
|
---|
| 140 | W !!,$$CJ^XLFSTR("------ M Code Execution Status: "_$P($$MST,U,3)_" ------",IOM)
|
---|
| 141 | Q
|
---|
| 142 | ;
|
---|
| 143 | MST() ; Status?
|
---|
| 144 | ; Piece 1 = 0 -> DOWN UP OR DOWN
|
---|
| 145 | ; = 1 -> UP
|
---|
| 146 | ; Piece 2 = 1 -> No XTMP data exists... DOWN REASONS
|
---|
| 147 | ; = 2 -> Invalid START/ENDs
|
---|
| 148 | ; = 3 -> Before cutoff time
|
---|
| 149 | ; = 4 -> After cutoff time
|
---|
| 150 | ; = 5 -> Inactive date (p4) found
|
---|
| 151 | ; = 0 -> Not DOWN!!!
|
---|
| 152 | ; Piece 3 = Status text information
|
---|
| 153 | ;
|
---|
| 154 | ; NOW -- req
|
---|
| 155 | N NOW,END,IDATE,START,STAT,XTMP
|
---|
| 156 | S NOW=$$NOW^XLFDT
|
---|
| 157 | S XTMP=$O(^XTMP("HLEV SERVER M 9999999"),-1) QUIT:XTMP']"" "0^1^DOWN" ;->
|
---|
| 158 | S STAT=$G(^XTMP(XTMP,"STATUS")),START=+STAT,END=$P(STAT,U,2),IDATE=$P(STAT,U,4)
|
---|
| 159 | I IDATE?7N1"."1.N QUIT "0^5^DOWN" ;->
|
---|
| 160 | I START'?7N1"."1.N!(END'?7N1"."1.N) QUIT "0^2^DOWN" ;->
|
---|
| 161 | I START>NOW QUIT "0^3^DOWN - (Too early ("_$$SDT^HLEVX001(+START)_")" ;->
|
---|
| 162 | I END<NOW QUIT "0^4^DOWN - (Too late ("_$$SDT^HLEVX001(+END)_")" ;->
|
---|
| 163 | ;
|
---|
| 164 | Q "1^0^UP"
|
---|
| 165 | ;
|
---|
| 166 | HDM W @IOF,$$CJ^XLFSTR("Open Access to Mailman Server M Code",IOM)
|
---|
| 167 | W !,$$REPEAT^XLFSTR("=",IOM)
|
---|
| 168 | QUIT
|
---|
| 169 | ;
|
---|
| 170 | EXM N I,T F I=1:1 S T=$T(EXM+I) QUIT:T'[";;" W !,$P(T,";;",2,99)
|
---|
| 171 | ;;Mailman server requests can be sent to your site requesting HL7 data be
|
---|
| 172 | ;;returned to the VistA HL7 team. (These requests are only sent to the VistA
|
---|
| 173 | ;;HL7 team, and under no circumstances are sent to any other mail groups or
|
---|
| 174 | ;;individuals.) Under very rare circumstances, in order to debug problems on
|
---|
| 175 | ;;your site, or to collect diagnostic information, it might be desired to run
|
---|
| 176 | ;;some M code embedded in the Mailman server requests.
|
---|
| 177 | ;;
|
---|
| 178 | ;;In order to provide a high level of security, no M code will ever be run by
|
---|
| 179 | ;;the Mailman server option unless you explicity allow M code execution. This
|
---|
| 180 | ;;option allows you to allow, or disallow, M code execution.
|
---|
| 181 | QUIT
|
---|
| 182 | ;
|
---|
| 183 | CODE() ; Return license code...
|
---|
| 184 | N CODE,EX,NOP,TYPE
|
---|
| 185 | F EX=39,44,95,96 S EX(EX)=""
|
---|
| 186 | S CODE="",NOP=0
|
---|
| 187 | F EX=1:1:6 D
|
---|
| 188 | . S TYPE=$P("A^P",U,$R(2)+1)
|
---|
| 189 | . I EX=6,NOP=0 S TYPE="P" ; Must be at least one punctuation
|
---|
| 190 | . I TYPE="P" S NOP=NOP+1
|
---|
| 191 | . S:NOP>1 TYPE="A"
|
---|
| 192 | . S CODE=CODE_$$RNO(TYPE)
|
---|
| 193 | . I EX=3 S CODE=CODE_"-"
|
---|
| 194 | Q CODE
|
---|
| 195 | ;
|
---|
| 196 | RNO(TYPE) ; Return random number between 33 and 122 (w/exceptions)
|
---|
| 197 | ; NOP -- req
|
---|
| 198 | N NO,OK
|
---|
| 199 | F S NO=$R(89)+33 D Q:OK
|
---|
| 200 | . S OK=0
|
---|
| 201 | . I $D(EX(NO)) QUIT ;-> Is it in exclusion list?
|
---|
| 202 | . I TYPE="A" D QUIT ;-> Is it an alpha character
|
---|
| 203 | . . I $$ALPHA(NO) S OK=1
|
---|
| 204 | . I '$$ALPHA(NO) S OK=1 ; Need punctuation...
|
---|
| 205 | Q $C(NO)
|
---|
| 206 | ;
|
---|
| 207 | ALPHA(NO) ; Is it ALPHA character?
|
---|
| 208 | N X
|
---|
| 209 | S X=$A($$UP^XLFSTR($C(NO))) QUIT:X>64&(X<91) 1 ;->
|
---|
| 210 | Q ""
|
---|
| 211 | ;
|
---|
| 212 | GBLTOXM ; Place global data in Mailman message global...
|
---|
| 213 | N DATA,FILE,GBL,IEN,LP,REF,ST,TXT
|
---|
| 214 | ;
|
---|
| 215 | ; Add data found...
|
---|
| 216 | S GBL=$NA(^XTMP(XTMP,"DATA"))
|
---|
| 217 | ;
|
---|
| 218 | S FILE=0
|
---|
| 219 | F S FILE=$O(@GBL@(FILE)) Q:FILE'>0 D
|
---|
| 220 | . D ADDMAIL^HLEVSRV("")
|
---|
| 221 | . D ADDMAIL^HLEVSRV($$CJ^XLFSTR(" "_$P($G(^HLEV(+FILE,0)),U)_" [#"_FILE_"] ",74,"-"))
|
---|
| 222 | . S IEN=0
|
---|
| 223 | . F S IEN=$O(@GBL@(FILE,IEN)) Q:IEN'>0 D
|
---|
| 224 | . . S TXT="#"_IEN
|
---|
| 225 | . . S LP="^XTMP("""_XTMP_""",""DATA"","_FILE_","_IEN,ST=LP_","
|
---|
| 226 | . . S LP=LP_")"
|
---|
| 227 | . . F S LP=$Q(@LP) Q:LP'[ST D
|
---|
| 228 | . . . S REF="#"_IEN_","_$P(LP,ST,2)_"=",POSX=$L(REF)
|
---|
| 229 | . . . S DATA=@LP
|
---|
| 230 | . . . F D QUIT:$TR(REF," ","")']""&(DATA']"") ;->
|
---|
| 231 | . . . . S TXT=REF_$E(DATA,1,74-$L(REF))
|
---|
| 232 | . . . . D ADDMAIL^HLEVSRV(TXT)
|
---|
| 233 | . . . . S DATA=$E(DATA,74-$L(REF)+1,999)
|
---|
| 234 | . . . . S REF=$$REPEAT^XLFSTR(" ",POSX)
|
---|
| 235 | ;
|
---|
| 236 | Q
|
---|
| 237 | ;
|
---|
| 238 | TEST ; Test server...
|
---|
| 239 | N CT,HLEVQUIT,LASTXTMP,XTMP,XMREC,XMZ
|
---|
| 240 | ;
|
---|
| 241 | W !!,"The current time is ",$$NOW^XLFDT,"..."
|
---|
| 242 | ;
|
---|
| 243 | W !!,"Displaying all existing ^XTMP(""HLEV SERVER ..."") entries..."
|
---|
| 244 | ;
|
---|
| 245 | ; Find last 6 entries to show...
|
---|
| 246 | S XTMP="HLEV SERVER 9999999",CT=0
|
---|
| 247 | F S XTMP=$O(^XTMP(XTMP),-1) Q:XTMP'?1"HLEV SERVER "7N1"."1.N!(CT>6) D
|
---|
| 248 | . S CT=CT+1
|
---|
| 249 | ;
|
---|
| 250 | S CT=0
|
---|
| 251 | S XTMP=$S(XTMP?1"HLEV SERVER "7N1"."1.N:XTMP,1:"HLEV SERVER 0000000")
|
---|
| 252 | F S XTMP=$O(^XTMP(XTMP)) Q:XTMP'?1"HLEV SERVER "7N1"."1.N D
|
---|
| 253 | . W:'CT !!
|
---|
| 254 | . W $E("^XTMP("""_XTMP_""""_$$REPEAT^XLFSTR(" ",40),1,40)
|
---|
| 255 | . S CT=CT+1
|
---|
| 256 | ;
|
---|
| 257 | I 'CT W !!,"No XTMP server data exists..." QUIT ;->
|
---|
| 258 | ;
|
---|
| 259 | S LASTXTMP=$O(^XTMP("HLEV SERVER 9999999"),-1)
|
---|
| 260 | D SHOWXTMP("Last XTMP entry",LASTXTMP)
|
---|
| 261 | ;
|
---|
| 262 | T1 W !!,"Enter XTMP to rerun: ",LASTXTMP,"// "
|
---|
| 263 | R XTMP:999 QUIT:XTMP[U ;->
|
---|
| 264 | S:XTMP']"" XTMP=LASTXTMP
|
---|
| 265 | I '$D(^XTMP(XTMP)) D G T1 ;->
|
---|
| 266 | . W " entry not found..."
|
---|
| 267 | ;
|
---|
| 268 | S XMZ=$P($G(^XTMP(XTMP,"MAIL")),U)
|
---|
| 269 | I $G(^XMB(3.9,+XMZ,0))']"" D QUIT ;->
|
---|
| 270 | . W !!,"There is no Mailman message recorded..."
|
---|
| 271 | ;
|
---|
| 272 | S XMREC="D REC^XMS3"
|
---|
| 273 | ;
|
---|
| 274 | W !!,"Calling SERVER^HLEVSRV with XTMP=",XTMP,"..."
|
---|
| 275 | ;
|
---|
| 276 | D SERVER^HLEVSRV
|
---|
| 277 | ;
|
---|
| 278 | D SHOWXTMP("Last (and newly created) XTMP entry",$O(^XTMP("HLEV SERVER 9999999"),-1))
|
---|
| 279 | ;
|
---|
| 280 | W !!,"The last 776 IEN = ",$O(^HLEV(776,":"),-1),"..."
|
---|
| 281 | W !
|
---|
| 282 | ;
|
---|
| 283 | D ^%G
|
---|
| 284 | ;
|
---|
| 285 | Q
|
---|
| 286 | ;
|
---|
| 287 | SHOWXTMP(TXT,XTMP) ; Show the XTMP data...
|
---|
| 288 | N DATA,LP,POSX,ST
|
---|
| 289 | ;
|
---|
| 290 | I '$D(^XTMP(XTMP)) QUIT ;->
|
---|
| 291 | ;
|
---|
| 292 | W !!,$$CJ^XLFSTR(" "_TXT_" ",IOM,"=")
|
---|
| 293 | ;
|
---|
| 294 | S LP=$NA(^XTMP(XTMP)),ST=$E(LP,1,$L(LP)-1)_","
|
---|
| 295 | F S LP=$Q(@LP) Q:LP'[ST D
|
---|
| 296 | . W !,LP," = "
|
---|
| 297 | . S POSX=$X,DATA=@LP
|
---|
| 298 | . F Q:DATA']"" D
|
---|
| 299 | . . W:$X>POSX ! W:$X<POSX ?POSX
|
---|
| 300 | . . W $E(DATA,1,IOM-POSX-1)
|
---|
| 301 | . . S DATA=$E(DATA,IOM-POSX,999)
|
---|
| 302 | ;
|
---|
| 303 | W !,$$REPEAT^XLFSTR("=",IOM)
|
---|
| 304 | ;
|
---|
| 305 | Q
|
---|
| 306 | ;
|
---|
| 307 | EOR ;HLEVSRV1 - Event Monitor SERVER ;5/16/03 14:42
|
---|