1 | NVSMSG ;slcciofo/maw,mb-alert and messaging utility ;02:21 PM 19 Apr 2000
|
---|
2 | ;;2.0;NVS system management utility;**11,12,13**; Jan 01, 1999
|
---|
3 | ;
|
---|
4 | ; **NOTE: THIS ROUTINE IS USED ONLY ON INTERSYSTEMS CACHE SYSTEMS**
|
---|
5 | ;
|
---|
6 | ; This routine is invoked by various NVS system monitoring utilities
|
---|
7 | ; (for example, unattended backup, integrity check, etc.). It retrieves
|
---|
8 | ; the contents of the host file specified and places it in a mail message.
|
---|
9 | ; For Intersystems Cache, a CSTAT can be generated by this utility (see
|
---|
10 | ; further documentation below). If warranted, an alert can also be set
|
---|
11 | ; up by this utility (see documentation below).
|
---|
12 | ;
|
---|
13 | EN(DIR,FILE,SUBJ,ALERT,CSTAT) ;
|
---|
14 | ;
|
---|
15 | ; DIR = the directory path where FILE will be found.
|
---|
16 | ; If DIR is passed = "", this module aborts.
|
---|
17 | ; FILE = the name of the host file to be retrieved and
|
---|
18 | ; included in the mail message.
|
---|
19 | ; SUBJ = a string (up to 30 characters) that will be used
|
---|
20 | ; as the message (and alert, if appropriate) subject.
|
---|
21 | ; Note: SUBJ will be truncated if $LENGTH>30
|
---|
22 | ; ALERT = pass = 1 if an alert is to be sent
|
---|
23 | ; CSTAT = pass = 1 and a CSTAT will be generated
|
---|
24 | ;
|
---|
25 | N DEVOK,ERRFLAG,I,LINENUM,MAILGRP,MSGNUM
|
---|
26 | S $ZT=$G(^%ZOSF("ERRTN"))
|
---|
27 | S U="^"
|
---|
28 | K ^TMP($J),^XTMP("NVSMSG")
|
---|
29 | I $G(SUBJ)="" S SUBJ="NVS SYSTEM PROCEDURE MESSAGE"
|
---|
30 | I $L(SUBJ)>30 S SUBJ=$E(SUBJ,1,30)
|
---|
31 | I FILE=""&(DIR'="") D
|
---|
32 | .I $ZV["OpenVMS" D Q
|
---|
33 | ..I DIR[":"&(DIR'["]") D Q
|
---|
34 | ...S FILE=$P(DIR,":",2)
|
---|
35 | ...S DIR=$P(DIR,":")_":"
|
---|
36 | ..I DIR["]" D Q
|
---|
37 | ...S FILE=$P(DIR,"]",2)
|
---|
38 | ...S DIR=$P(DIR,"]")_"]"
|
---|
39 | .I $ZV["Windows" D
|
---|
40 | ..S DIR=$TR(DIR,"/","\")
|
---|
41 | ..F I=1:1 Q:$P(DIR,"\",I)=""
|
---|
42 | ..S FILE=$P(DIR,"\",I-1)
|
---|
43 | ..S DIR=$P(DIR,FILE)
|
---|
44 | S ALERT=+ALERT
|
---|
45 | S CSTAT=+CSTAT
|
---|
46 | ;
|
---|
47 | I DIR=""!(FILE="") D Q
|
---|
48 | .S ^TMP($J,1)="An error occured during a system procedure."
|
---|
49 | .S ^TMP($J,2)="No log file was specified. Following is the"
|
---|
50 | .S ^TMP($J,3)="information that was provided by the calling"
|
---|
51 | .S ^TMP($J,4)="application:"
|
---|
52 | .S ^TMP($J,5)=" Host file directory: "_$S($G(DIR)'="":DIR,1:"not specified")
|
---|
53 | .S ^TMP($J,6)=" Host file name: "_$S($G(FILE)'="":FILE,1:"not specified")
|
---|
54 | .S ^TMP($J,7)=" Subject: "_$S($G(SUBJ)'="":SUBJ,1:"not specified")
|
---|
55 | .S ^TMP($J,8)="No other information is available. Please investigate."
|
---|
56 | .S MAILGRP=""
|
---|
57 | .I $$GROUP("IRM") S MAILGRP="G.IRM"
|
---|
58 | .I MAILGRP="" S MAILGRP=.5
|
---|
59 | .S MSGNUM=0
|
---|
60 | .D MAIL(SUBJ,MAILGRP,"^TMP("_$J_",",+$G(ALERT),.MSGNUM)
|
---|
61 | ;
|
---|
62 | S ^XTMP("NVSMSG",0)=$$DT^XLFDT_U_$$DT^XLFDT_U_"NVS Procedure Message"
|
---|
63 | ;
|
---|
64 | ; call Kernel to retrieve the log file contents and set the temporary
|
---|
65 | ; global for us...
|
---|
66 | S DEVOK=1
|
---|
67 | S DEVOK=$$FTG^%ZISH(DIR,FILE,"^XTMP(""NVSMSG"",1)",2,"OVF")
|
---|
68 | ;
|
---|
69 | ; if DEVOK is 0, then the log file couldn't be retrieved, or the
|
---|
70 | ; temporary global array could not be set. Set up the message to
|
---|
71 | ; relay this information...
|
---|
72 | I 'DEVOK D
|
---|
73 | .S ^TMP($J,1)="An error occured attempting to retrieve a specified host"
|
---|
74 | .S ^TMP($J,2)="file during a system process. Here is the information"
|
---|
75 | .S ^TMP($J,3)="specified by the calling utility:"
|
---|
76 | .S ^TMP($J,4)="Directory: "_$S(DIR'="":DIR,1:"not specified")
|
---|
77 | .S ^TMP($J,5)="File name: "_$S(FILE'="":FILE,1:"not specified")
|
---|
78 | .S ^TMP($J,6)="Subject: "_$S(SUBJ'="":SUBJ,1:"not specified")
|
---|
79 | ;
|
---|
80 | ; retrieve the text from the temporary global and put into our local array...
|
---|
81 | I DEVOK D
|
---|
82 | .S (ERRFLAG,LINENUM)=0
|
---|
83 | .F S LINENUM=$O(^XTMP("NVSMSG",LINENUM)) Q:'LINENUM!(ERRFLAG=1) D
|
---|
84 | ..S ^TMP($J,LINENUM)=^XTMP("NVSMSG",LINENUM)
|
---|
85 | ..I ^TMP($J,LINENUM)["WARNING"!(^TMP($J,LINENUM)["$ZE") S ERRFLAG=1
|
---|
86 | .;
|
---|
87 | .; check for ERRFLAG. if it = 1, then warnings and/or errors exist in
|
---|
88 | .; the log file. let's insert a line right at the top of the message text
|
---|
89 | .; indicating that fact...
|
---|
90 | .I +$G(ERRFLAG) D
|
---|
91 | ..S ^TMP($J,.1)="**********************>> WARNING <<***********************"
|
---|
92 | ..S ^TMP($J,.2)="* ERROR AND/OR WARNING MESSAGES EXIST IN THIS LOG FILE!! *"
|
---|
93 | ..S ^TMP($J,.3)="* RECOMMEND COMPLETE REVIEW OF THE LOG FILE AND *"
|
---|
94 | ..S ^TMP($J,.4)="* CORRECTIVE ACTION BE TAKEN IMMEDIATELY!! *"
|
---|
95 | ..S ^TMP($J,.5)="**********************************************************"
|
---|
96 | .;
|
---|
97 | .; if CSTAT, generate one and tell the recipients that we did that...
|
---|
98 | .I +$G(CSTAT) D
|
---|
99 | ..I $ZV["OpenVMS" S X=$ZF(-1,"@SYS$COMMON:[SYSMGR]CSTAT.COM")
|
---|
100 | ..I $ZV["Windows NT" S X=$ZF(-1,"T:\ANONYMOUS\CSTAT\CSTAT.CMD")
|
---|
101 | ..S ^TMP($J,.6)=" "
|
---|
102 | ..S ^TMP($J,.7)="NOTE!! THE CSTAT COMMAND FILE WAS CALLED AS A RESULT OF THIS PROBLEM."
|
---|
103 | ..S ^TMP($J,.8)="Please look for the CSTAT reports in "
|
---|
104 | ..I $ZV["OpenVMS" S ^TMP($J,.8)=^TMP($J,.8)_"USER$:[ANONYMOUS.CSTAT]"
|
---|
105 | ..I $ZV["Windows NT" S ^TMP($J,.8)=^TMP($J,.8)_"T:\ANONYMOUS\CSTAT\"
|
---|
106 | ..S ^TMP($J,.9)=" "
|
---|
107 | ;
|
---|
108 | ; send the mail message. NOTE: site can change the mail group to be looked
|
---|
109 | ; up ("IRM" is the default) by changing the mail group name in the following...
|
---|
110 | S MAILGRP=""
|
---|
111 | I $$GROUP("IRM") S MAILGRP="G.IRM"
|
---|
112 | I MAILGRP="" S MAILGRP=.5
|
---|
113 | S MSGNUM=0
|
---|
114 | D MAIL(SUBJ,MAILGRP,"^TMP("_$J_",",+$G(ALERT),.MSGNUM)
|
---|
115 | ;
|
---|
116 | ; if ALERT requested *and* message recipient is not POSTMASTER, set up the alert...
|
---|
117 | I +$G(ALERT)&(+MAILGRP'=.5) D ALERT(SUBJ_" Check mail message "_MSGNUM_".",MAILGRP)
|
---|
118 | ;
|
---|
119 | K ^TMP($J),^XTMP("NVSMSG")
|
---|
120 | Q
|
---|
121 | ;
|
---|
122 | MAIL(MSGSUBJ,RECIP,TEXT,NVS,MSG) ; send e-mail...
|
---|
123 | ; MSGSUBJ = message subject
|
---|
124 | ; RECIP = mail group name (local and/or remote) or local user DUZ
|
---|
125 | ; TEXT = local or global array reference for the text to be included in the message.
|
---|
126 | ; Note: this reference must be in the form required by ^XMD -- for example:
|
---|
127 | ; TEXT="array("
|
---|
128 | ; TEXT="^TMP($J,"
|
---|
129 | ; NVS = if passed=1 then mail group G.CSAVANTI@FORUM.MED.VA.GOV added to recipients
|
---|
130 | ; MSG = passed by reference, returned as the message number (XMZ)
|
---|
131 | ;
|
---|
132 | N XMDUZ,XMSUB,XMTEXT,XMY,XMZ,XTEXT
|
---|
133 | S XMDUZ=.5
|
---|
134 | S XMSUB=MSGSUBJ
|
---|
135 | S XMY(RECIP)=""
|
---|
136 | I +$G(NVS)=1 S XMY("G.CSAVANTI@FORUM.MED.VA.GOV")=""
|
---|
137 | I TEXT'="" S XMTEXT=TEXT
|
---|
138 | I TEXT="" D
|
---|
139 | .S XTEXT(1)="NO TEXT WAS DEFINED FOR THIS MESSAGE"
|
---|
140 | .S XMTEXT="XTEXT("
|
---|
141 | D ^XMD
|
---|
142 | S MSG=XMZ
|
---|
143 | Q
|
---|
144 | ;
|
---|
145 | ALERT(ASUBJ,RECIP) ; send a simple alert...
|
---|
146 | ; ASUBJ = alert subject (can be same as mail message subject)
|
---|
147 | ; RECIP = an individual local user or mail group to which the alert will be sent
|
---|
148 | ;
|
---|
149 | N DUZ,XQA,XQAID,XQAMSG
|
---|
150 | S DUZ=".5"
|
---|
151 | S XQA(RECIP)=""
|
---|
152 | S XQAID="NVS"_$J
|
---|
153 | S XQAMSG=ASUBJ
|
---|
154 | D SETUP^XQALERT
|
---|
155 | Q
|
---|
156 | ;
|
---|
157 | GROUP(X) ; verify a specified mail group exists and that it has membership...
|
---|
158 | ; X = name of mail group (example: "IRM")
|
---|
159 | ; returns 0 if not found, 1 if found
|
---|
160 | N Y
|
---|
161 | S Y=+$O(^XMB(3.8,"B",X,0))
|
---|
162 | I Y'>0 Q 0
|
---|
163 | ; check for members in this group...
|
---|
164 | I $O(^XMB(3.8,Y,1,"B",""))="" Q 0
|
---|
165 | Q 1
|
---|