1 | HLEVSRV ;O-OIFO/LJA - Event Monitor SERVER ;02/04/2004 14:42
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | ; Send email to S.XQSCHK@SITE.VA.GOV to check server status.
|
---|
5 | ; (Include the name of server (w/o S.) in body of message.)
|
---|
6 | ;
|
---|
7 | SERVER ; Called to get information about local monitoring system
|
---|
8 | N ADDREQHD,MXEC,NOW,XMER,XMPOS,XMRG,XTMP
|
---|
9 | ;
|
---|
10 | ;[M]S MXEC=$$MST^HLEVSRV1 ; Is M code execution allowed?
|
---|
11 | ;
|
---|
12 | S NOW=$$NOW^XLFDT,XTMP="HLEV SERVER "_NOW
|
---|
13 | S ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,2)_U_NOW_"^HLEV SERVER REQUEST^"_$G(XMFROM)
|
---|
14 | ;
|
---|
15 | I $G(XMZ)'>0!($G(XMREC)']"") D QUIT ;->
|
---|
16 | . S ^XTMP(XTMP,"ERR")="No XMZ or XMREC"
|
---|
17 | ;
|
---|
18 | S ^XTMP(XTMP,"MAIL")=XMZ
|
---|
19 | ;
|
---|
20 | S XMPOS=""
|
---|
21 | ;
|
---|
22 | READ ; Sequentially read thru message
|
---|
23 | X XMREC
|
---|
24 | I $D(XMER) G PROCESS:XMER<0 ;->
|
---|
25 | D ADDLINE(XMRG)
|
---|
26 | G READ ;->
|
---|
27 | ;
|
---|
28 | ;======================================================================
|
---|
29 | ;
|
---|
30 | PROCESS ; Multiple "data request" formats possible...
|
---|
31 | ;[M]; MXEC -- req
|
---|
32 | N SUB
|
---|
33 | ;
|
---|
34 | D EXTRACT
|
---|
35 | D REQBACK ; Echo what was requested
|
---|
36 | ;
|
---|
37 | ;[M]S MXEC=$P(MXEC,U)+$P(MXEC,U,4)
|
---|
38 | ;[M]I MXEC=2 D QUIT:$G(HLEVQUIT) ;-> Pre-load M code execution
|
---|
39 | ;[M]. D MPRE^HLEVSRV0
|
---|
40 | D LOADATA
|
---|
41 | ;[M]I MXEC=2 D QUIT:$G(HLEVQUIT) ;-> Post-load M code execution
|
---|
42 | ;[M]. D MPST^HLEVSRV0
|
---|
43 | ;[M]. D MCOND^HLEVSRV0
|
---|
44 | ;[M]. D MCALLREC^HLEVSRV0
|
---|
45 | ;[M]. D MTEXT^HLEVSRV0
|
---|
46 | D XTMPMAIL ; Place at bottom of message XTMP value
|
---|
47 | D MAILIT
|
---|
48 | D KILLS
|
---|
49 | ;
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | ;======================================================================
|
---|
53 | ;
|
---|
54 | EXTRACT ; Extract out the work list...
|
---|
55 | ; XTMP -- req
|
---|
56 | N CT,FILE,LNO,TXT
|
---|
57 | S LNO=0,CT=0
|
---|
58 | F S LNO=$O(^XTMP(XTMP,"RQ",LNO)) Q:LNO'>0 D
|
---|
59 | . S TXT=$$CHKREQ($G(^XTMP(XTMP,"RQ",LNO))) QUIT:TXT']"" ;->
|
---|
60 | . S FILE=$P(TXT,U) ; Type of request in "FILE"...
|
---|
61 | .
|
---|
62 | . ; There are 3 types of "data requests"...
|
---|
63 | . I FILE="QUERY" D EXTQUERY($P(TXT,U,2,99)) QUIT ;-> $QUERY format...
|
---|
64 | . I FILE="UNIT" D UNIT^HLEVSRV0($P(TXT,U,2,99)) QUIT ;-> Msg ID
|
---|
65 | . I $$OKFILE(+FILE) D EXTFILE(TXT) QUIT ;->
|
---|
66 | .
|
---|
67 | . ; If not a data request, must be a non-VistA HL7 request. And,
|
---|
68 | . ; if so, they have to pass a license
|
---|
69 | . I FILE="LICENSE" D CHKLIC^HLEVSRV4($P(TXT,U,2,99),$G(XMFROM)) QUIT ;->
|
---|
70 | .
|
---|
71 | . D ADDREQHD,ADDREQ("Error (HEADER)^"_TXT)
|
---|
72 | Q
|
---|
73 | ;
|
---|
74 | CHKREQ(TXT) ; Check request, strip comments, etc...
|
---|
75 | N I
|
---|
76 | ;
|
---|
77 | ; Strip comments...
|
---|
78 | I $L(TXT,";")>1 S TXT=$P(TXT,";",1,$L(TXT,";")-1)
|
---|
79 | ;
|
---|
80 | ; Ignore blank lines, and dashed lines...
|
---|
81 | QUIT:$TR(TXT," -=;")']"" "" ;->
|
---|
82 | ;
|
---|
83 | ; Strip leading and trailing spaces...
|
---|
84 | X "F I=1:1:$L(TXT) Q:$E(TXT,I)'="" """ S TXT=$E(TXT,I,999) ; Leading
|
---|
85 | X "F I=$L(TXT):-1:1 Q:$E(TXT,I)'="" """ S TXT=$E(TXT,1,I) ; Trailing
|
---|
86 | ;
|
---|
87 | Q TXT
|
---|
88 | ;
|
---|
89 | LOADATA ; Process the work list...
|
---|
90 | D LOADFNO
|
---|
91 | D LOADQRY
|
---|
92 | D LOADUNIT^HLEVSRV0 ; Msg ID-related data
|
---|
93 | D GBLTOXM^HLEVSRV1 ; 776 format data to send back
|
---|
94 | Q
|
---|
95 | ;
|
---|
96 | LOADFNO ; Load data from file number...
|
---|
97 | N FILE,NODE,WHAT
|
---|
98 | D ADDMAIL("")
|
---|
99 | S FILE=0
|
---|
100 | F S FILE=$O(^XTMP(XTMP,"HLEV PROC","F",FILE)) Q:FILE'>0 D
|
---|
101 | . S WHAT=""
|
---|
102 | . F S WHAT=$O(^XTMP(XTMP,"HLEV PROC","F",FILE,WHAT)) Q:WHAT']"" D
|
---|
103 | . . S NODE=""
|
---|
104 | . . F S NODE=$O(^XTMP(XTMP,"HLEV PROC","F",FILE,WHAT,NODE)) Q:NODE']"" D
|
---|
105 | . . . S LIMIT=$G(^XTMP(XTMP,"HLEV PROC","F",FILE,WHAT,NODE))
|
---|
106 | . . . D LOAD(FILE,WHAT,NODE,LIMIT)
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | LOADQRY ; Load $QUERY data...
|
---|
110 | N NO
|
---|
111 | ;
|
---|
112 | QUIT:'$D(^XTMP(XTMP,"HLQUERY")) ;->
|
---|
113 | D ADDMAIL("")
|
---|
114 | D ADDMAIL("$QUERY Data"),ADDMAIL($$REPEAT^XLFSTR("-",74))
|
---|
115 | ;
|
---|
116 | ; Load $QUERY format data...
|
---|
117 | S NO=0
|
---|
118 | F S NO=$O(^XTMP(XTMP,"HLQUERY",NO)) Q:NO'>0 D
|
---|
119 | . D LOADQ(^XTMP(XTMP,"HLQUERY",+NO))
|
---|
120 | ;
|
---|
121 | Q
|
---|
122 | ;
|
---|
123 | REQBACK ; Send back what was requested...
|
---|
124 | N SNO
|
---|
125 | ;
|
---|
126 | S SNO=0
|
---|
127 | F S SNO=$O(^XTMP(XTMP,"HLREQ",SNO)) Q:SNO'>0 D
|
---|
128 | . D ADDMAIL(^XTMP(XTMP,"HLREQ",SNO))
|
---|
129 | ;
|
---|
130 | Q
|
---|
131 | ;
|
---|
132 | XTMPMAIL ; Add XTMP reference to bottom of email...
|
---|
133 | D ADDMAIL(""),ADDMAIL("")
|
---|
134 | D ADDMAIL("Remote request by: "_$G(XMFROM)),ADDMAIL("")
|
---|
135 | D ADDMAIL("[Query log stored in ^XTMP("""_XTMP_""") at site.]")
|
---|
136 | Q
|
---|
137 | ;
|
---|
138 | MAILIT ; Mail report back to HL7 mail group...
|
---|
139 | ; XTMP -- req
|
---|
140 | N NO,TEXT,X,XMDUZ,XMSUB,XMTEXT,XMZ
|
---|
141 | S XMDUZ=.5,XMTEXT="^XTMP("""_XTMP_""",""HLMAIL"","
|
---|
142 | S X=$$SITE^VASITE,XMSUB="HLEV SERVER REQUEST "_$P(X,U,2)_" [#"_$P(X,U,3)_"]"
|
---|
143 | ;
|
---|
144 | ; Only send to VistA HL7 team members!!!!
|
---|
145 | S XMY("HL7SystemMonitoring@med.va.gov")=""
|
---|
146 | ;
|
---|
147 | D ^XMD
|
---|
148 | ;
|
---|
149 | S $P(^XTMP(XTMP,"MAIL"),U,2)=$G(XMZ)
|
---|
150 | ;
|
---|
151 | QUIT
|
---|
152 | ;
|
---|
153 | KILLS ; Remove unwanted ^XTMP subscripts...
|
---|
154 | F SUB="DATA","HLEV PROC","HLMAIL","HLUNIT","HLQUERY","HLREQ","M","MTXT" D
|
---|
155 | . KILL ^XTMP(XTMP,SUB)
|
---|
156 | ;
|
---|
157 | Q
|
---|
158 | ;
|
---|
159 | ; =====================================================================
|
---|
160 | ;
|
---|
161 | LOAD(FILE,WHAT,NODE,LIMIT) ;
|
---|
162 | N CT,DATA,GBL,IEN
|
---|
163 | ;
|
---|
164 | S LIMIT=$G(LIMIT)
|
---|
165 | S GBL=$$GBLFILE(+FILE) QUIT:GBL']"" ;->
|
---|
166 | ;
|
---|
167 | ; If passed in an IEN...
|
---|
168 | I WHAT=+WHAT D LOADONE(FILE,+WHAT,NODE),ADDMAIL("")
|
---|
169 | ;
|
---|
170 | ; Check to make sure it is ALL...
|
---|
171 | QUIT:WHAT'["ALL" ;->
|
---|
172 | ;
|
---|
173 | S IEN=0,CT=0,LIMIT=$S(LIMIT:LIMIT,1:99999)
|
---|
174 | F S IEN=$O(@GBL@(IEN)) Q:IEN'>0!(CT>(LIMIT-1)) D
|
---|
175 | . D LOADONE(FILE,+IEN,NODE,LIMIT)
|
---|
176 | . S CT=CT+1
|
---|
177 | ;
|
---|
178 | I CT D ADDMAIL("")
|
---|
179 | ;
|
---|
180 | Q
|
---|
181 | ;
|
---|
182 | LOADONE(FILE,IEN,NODE,LIMIT) ; Load one entry...
|
---|
183 | N DATA,GBL,MIEN,MONM,ND,TXT
|
---|
184 | ;
|
---|
185 | S LIMIT=$G(LIMIT)
|
---|
186 | S GBL=$$GBLFILE(+FILE) QUIT:GBL']"" ;->
|
---|
187 | ;
|
---|
188 | ; Node (not multiple or WP) requested...
|
---|
189 | I $D(@GBL@(+IEN,NODE))#2 D QUIT ;->
|
---|
190 | . S DATA=$G(@GBL@(+IEN,NODE))
|
---|
191 | . S ^XTMP(XTMP,"DATA",FILE,+IEN,NODE)=DATA
|
---|
192 | ;
|
---|
193 | Q
|
---|
194 | ;
|
---|
195 | ; =====================================================================
|
---|
196 | ;
|
---|
197 | EXTFILE(TXT) ; Extract 776 data...
|
---|
198 | N FILE,GBL,LIMIT,LOOPI,NODES,WHAT
|
---|
199 | ;
|
---|
200 | ; Sets...
|
---|
201 | S FILE=+TXT,GBL=$$GBLFILE(FILE) QUIT:GBL']"" ;->
|
---|
202 | S WHAT=$P(TXT,U,2)
|
---|
203 | I WHAT']"" S WHAT="ALL"
|
---|
204 | I WHAT=+WHAT QUIT:$G(@GBL@(+WHAT,0))']"" ;->
|
---|
205 | S NODES=$TR($P(TXT,U,3),"~",U),LIMIT=$P(TXT,U,4)
|
---|
206 | ;
|
---|
207 | ; Build nodes requested list...
|
---|
208 | F LOOPI=1:1:$L(NODES,U) S NODE=$P(NODES,U,LOOPI) I NODE]"" D
|
---|
209 | . S ^XTMP(XTMP,"HLEV PROC","F",FILE,WHAT,NODE)=LIMIT
|
---|
210 | . D ADDREQHD
|
---|
211 | . S TXT=$E("[#1] "_FILE_$S(LIMIT:" #"_LIMIT,1:"")_$$REPEAT^XLFSTR(" ",18),1,18)
|
---|
212 | . I LOOPI>1 S LIMIT=""
|
---|
213 | . S TXT=TXT_$E("[#2] "_$S(WHAT=+WHAT:"#"_WHAT,1:WHAT)_$$REPEAT^XLFSTR(" ",18),1,18)
|
---|
214 | . S TXT=TXT_"[#3] "_NODE
|
---|
215 | . D ADDREQ(TXT)
|
---|
216 | ;
|
---|
217 | Q
|
---|
218 | ;
|
---|
219 | GBLFILE(FILE) ; Return closed global root...
|
---|
220 | N CH,GBL
|
---|
221 | S GBL=$G(^DIC(+FILE,0,"GL"))
|
---|
222 | S CH=$E(GBL,$L(GBL))
|
---|
223 | I CH="," QUIT $E(GBL,1,$L(GBL)-1)_")" ;->
|
---|
224 | I CH="(" QUIT $E(GBL,1,$L(GBL)-1)
|
---|
225 | Q ""
|
---|
226 | ;
|
---|
227 | EXTQUERY(VAL) ; Extract $QUERY format requests...
|
---|
228 | ;
|
---|
229 | ; Format: p(1) = $QUERY reference. (E.g., "^DPT(25)")
|
---|
230 | ; p(2) = $QUERY stop value. (E.g., "^DPT(25,")
|
---|
231 | ; p(3) = # lines limit
|
---|
232 | ; p(4) = Screen format (E.g., "^DPT(#,0)")
|
---|
233 | ;
|
---|
234 | N LPVAL,NO,NOLINE,SCREEN,STOP
|
---|
235 | ;
|
---|
236 | ; Get values...
|
---|
237 | QUIT:'$$OKVARSQ(VAL) ;->
|
---|
238 | ;
|
---|
239 | ; Loop and collect now...
|
---|
240 | S NO=$O(^XTMP(XTMP,"HLQUERY",":"),-1)+1
|
---|
241 | S ^XTMP(XTMP,"HLQUERY",+NO)=VAL
|
---|
242 | ;
|
---|
243 | ; Add to list of items being queried...
|
---|
244 | S TXT=""
|
---|
245 | F PCE=1:1:$L(VAL,U) D
|
---|
246 | . S DATA=$P(VAL,U,PCE)
|
---|
247 | . I PCE=1!(PCE=2)!(PCE=4) S DATA=U_DATA
|
---|
248 | . I PCE=3 D
|
---|
249 | . . I DATA']"" S DATA="[1000]"
|
---|
250 | . . S DATA=" "_DATA
|
---|
251 | . S DATA="[#"_PCE_"]"_DATA
|
---|
252 | . I $L(DATA)>15 S DATA=$P(DATA,"]",2,99)
|
---|
253 | . S DATA=$S($L(DATA)>15:DATA_" ",1:$E(DATA_$$REPEAT^XLFSTR(" ",15),1,15))
|
---|
254 | . S TXT=TXT_$S(TXT]"":" ",1:"")_DATA
|
---|
255 | ;
|
---|
256 | I TXT]"" D
|
---|
257 | . D ADDREQHD
|
---|
258 | . D ADDREQ(TXT)
|
---|
259 | ;
|
---|
260 | Q
|
---|
261 | ;
|
---|
262 | OKVARSQ(VAL) ; Are variables OK for $QUERY looping?
|
---|
263 | ; Defines (and "leaves around") LPVAL,STOP,NOLINE,SCREEN...
|
---|
264 | S (LPVAL,NOLINE,SCREEN,STOP)=""
|
---|
265 | S LPVAL=U_$P(VAL,U) S X="W "_LPVAL D ^DIM QUIT:'$D(X) "" ;->
|
---|
266 | QUIT:$E(LPVAL,1,3)'="^HL"&($E(LPVAL,1,8)'="^ORD(101") "" ;->
|
---|
267 | S STOP=U_$P(VAL,U,2) S X="W "_STOP_"25)" D ^DIM QUIT:'$D(X) "" ;->
|
---|
268 | S X=$P(VAL,U,3),NOLINE=$S(X>1000:1000,X>0:X,1:1000)
|
---|
269 | S SCREEN=$P(VAL,U,4) I SCREEN]"" D QUIT:'$D(X) "" ;->
|
---|
270 | . S SCREEN=U_SCREEN
|
---|
271 | . S X="W "_$TR(SCREEN,"#",1) D ^DIM
|
---|
272 | QUIT 1
|
---|
273 | ;
|
---|
274 | LOADQ(VAL) ; Load $QUERY format data...
|
---|
275 | N CT,LPVAL,NO,NOLINE,POSX,REF,SCREEN,STOP,TXT
|
---|
276 | ;
|
---|
277 | ; Already checked format. But, this call sets up looping variables...
|
---|
278 | QUIT:'$$OKVARSQ(VAL) ;->
|
---|
279 | ;
|
---|
280 | S CT=0
|
---|
281 | F S LPVAL=$Q(@LPVAL) Q:$$QUITQ^HLEVSRV0(LPVAL,STOP,NOLINE,CT) D
|
---|
282 | . I SCREEN]"" QUIT:$$QUITS^HLEVSRV0(LPVAL,SCREEN) ;->
|
---|
283 | . S REF=LPVAL_"=",POSX=$L(REF)
|
---|
284 | . S DATA=@LPVAL,CT=CT+1
|
---|
285 | . F D QUIT:$TR(REF," ","")']""&(DATA']"")
|
---|
286 | . . S TXT=REF_$E(DATA,1,74-$L(REF))
|
---|
287 | . . D ADDMAIL(TXT)
|
---|
288 | . . S CT=CT+1
|
---|
289 | . . S DATA=$E(DATA,74-$L(REF)+1,999)
|
---|
290 | . . S REF=$$REPEAT^XLFSTR(" ",POSX)
|
---|
291 | ;
|
---|
292 | I CT D ADDMAIL("")
|
---|
293 | ;
|
---|
294 | Q
|
---|
295 | ;
|
---|
296 | ; =====================================================================
|
---|
297 | ;
|
---|
298 | ADDREQHD ; Add Header to request record in email...
|
---|
299 | S ADDREQHD=$G(ADDREQHD)+1 QUIT:ADDREQHD>1 ;->
|
---|
300 | D ADDREQ(""),ADDREQ("Data Requests")
|
---|
301 | D ADDREQ($$REPEAT^XLFSTR("-",74))
|
---|
302 | Q
|
---|
303 | ;
|
---|
304 | ADDLINE(XMRG) ; Add read line of text to ^TMP...
|
---|
305 | N LNO
|
---|
306 | S LNO=$O(^XTMP(XTMP,"RQ",":"),-1)+1
|
---|
307 | S ^XTMP(XTMP,"RQ",+LNO)=XMRG
|
---|
308 | Q
|
---|
309 | ;
|
---|
310 | ADDREQ(TXT) ; Add data request to be added to ^XTMP(XTMP,"HLMAIL") later
|
---|
311 | N SNO
|
---|
312 | S SNO=$O(^XTMP(XTMP,"HLREQ",":"),-1)+1
|
---|
313 | S ^XTMP(XTMP,"HLREQ",+SNO)=TXT
|
---|
314 | Q
|
---|
315 | ;
|
---|
316 | ADDMAIL(TXT) D ADDMAIL^HLEVSRV2(TXT)
|
---|
317 | Q
|
---|
318 | ;
|
---|
319 | OKFILE(FILE) QUIT:+FILE=101 1 ;->
|
---|
320 | I FILE>769.99999&(FILE<870) QUIT 1 ;->
|
---|
321 | Q ""
|
---|
322 | ;
|
---|
323 | EOR ;HLEVSRV - Event Monitor SERVER ;5/16/03 14:42
|
---|