| 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 | 
|---|