ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/EMail__Alerter.java
Revision: 1.17
Committed: Fri Mar 16 03:12:42 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.16: +5 -12 lines
Log Message:
Oh, seconds, milliseconds, pah !

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.client.alerters;
3
4 //---IMPORTS---
5 import uk.org.iscream.client.*;
6 import uk.org.iscream.core.*;
7 import uk.org.iscream.util.*;
8 import uk.org.iscream.componentmanager.*;
9
10 import java.util.*;
11 import java.io.*;
12 import java.text.*;
13
14 /**
15 * This alerter delivers alerts using e-mail.
16 *
17 * @author $Author: tdb1 $
18 * @version $Id: EMail__Alerter.java,v 1.16 2001/03/14 23:25:29 tdb1 Exp $
19 */
20 public class EMail__Alerter implements PluginAlerter {
21
22 //---FINAL ATTRIBUTES---
23
24 /**
25 * The current CVS revision of this class
26 */
27 public final String REVISION = "$Revision: 1.16 $";
28
29 public final String DESC = "Sends alerts over e-mail.";
30
31 public final String DEFAULT_LEVEL = Alert.alertLevels[0];
32
33 public final String NOT_CONFIGURED = "<NOT CONFIGURED>";
34
35 //---STATIC METHODS---
36
37 //---CONSTRUCTORS---
38
39 public EMail__Alerter() {
40 _logger.write(toString(), Logger.SYSINIT, "IRC Alerter started");
41 }
42
43 //---PUBLIC METHODS---
44
45 public void sendAlert(Alert alert) {
46 ConfigurationProxy cp = ConfigurationProxy.getInstance();
47 String levelName;
48 try {
49 levelName = cp.getProperty(_name, "Alerter.EMail.level");
50 } catch (PropertyNotFoundException e) {
51 levelName = DEFAULT_LEVEL;
52 _logger.write(toString(), Logger.WARNING, "Alerter.EMail.level value unavailable using default of " + levelName);
53 }
54 int level = StringUtils.getStringPos(levelName, Alert.alertLevels);
55 // only send if it's equal (or above) our level
56 if(((alert.getLevel() == 0) && (alert.getLastLevel() >= level)) || (alert.getLevel() >= level)) {
57 String alertType = Alert.alertLevels[alert.getLevel()];
58 String thresholdType = Alert.thresholdLevels[alert.getThreshold()];
59 String timeFirstSince = DateUtils.formatTime((System.currentTimeMillis() - alert.getInitialAlertTime())/1000, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs");
60 String timeFirstOccured = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(alert.getInitialAlertTime()));
61
62 // sort out the subject
63 String subject;
64 try {
65 subject = cp.getProperty(_name, "Alerter.EMail.subject");
66 } catch (PropertyNotFoundException e) {
67 subject = NOT_CONFIGURED;
68 _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
69 }
70 subject = StringUtils.replaceText(subject, "%level%", alertType);
71 subject = StringUtils.replaceText(subject, "%threshold%", thresholdType);
72 subject = StringUtils.replaceText(subject, "%source%", alert.getSource());
73 subject = StringUtils.replaceText(subject, "%value%", alert.getValue());
74 subject = StringUtils.replaceText(subject, "%thresholdValue%", alert.getThresholdValue());
75 subject = StringUtils.replaceText(subject, "%attributeName%", alert.getAttributeName());
76 subject = StringUtils.replaceText(subject, "%timeTillNextAlert%", getTimeString(Long.parseLong(alert.getTimeTillNextAlert())));
77 subject = StringUtils.replaceText(subject, "%timeSinceFirstAlert%", timeFirstSince);
78 subject = StringUtils.replaceText(subject, "%timeOfFirstAlert%", timeFirstOccured);
79
80 // sort out the message body
81 String message;
82 try {
83 message = cp.getProperty(_name, "Alerter.EMail.message");
84 } catch (PropertyNotFoundException e) {
85 message = NOT_CONFIGURED;
86 _logger.write(toString(), Logger.WARNING, "Alerter.EMail.message value unavailable using default of " + message);
87 }
88 message = StringUtils.replaceText(message, "%level%", alertType);
89 message = StringUtils.replaceText(message, "%threshold%", thresholdType);
90 message = StringUtils.replaceText(message, "%source%", alert.getSource());
91 message = StringUtils.replaceText(message, "%value%", alert.getValue());
92 message = StringUtils.replaceText(message, "%thresholdValue%", alert.getThresholdValue());
93 message = StringUtils.replaceText(message, "%attributeName%", alert.getAttributeName());
94 message = StringUtils.replaceText(message, "%timeTillNextAlert%", getTimeString(Long.parseLong(alert.getTimeTillNextAlert())));
95 message = StringUtils.replaceText(message, "%timeSinceFirstAlert%", timeFirstSince);
96 message = StringUtils.replaceText(message, "%timeOfFirstAlert%", timeFirstOccured);
97
98 try {
99 // create SMTP message
100 Smtp smtp = new Smtp(cp.getProperty(_name, "Alerter.EMail.smtpServer"));
101 // set our sender
102 smtp.setSender(cp.getProperty(_name, "Alerter.EMail.sender"));
103
104 String destList = cp.getProperty("Host."+alert.getSource(), "Alerter.EMail.destList");
105
106 // set the to: list
107 StringTokenizer st = new StringTokenizer(destList, ";");
108 while (st.hasMoreTokens()) {
109 smtp.setTo(st.nextToken());
110 }
111
112 // prepare to print the message
113 PrintWriter out = smtp.getOutputStream();
114 out.println("Subject: "+subject);
115 out.println();
116
117 // send the message
118 out.println(message);
119 smtp.sendMessage();
120 smtp.close();
121 _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ alertType + " level");
122 }
123 catch(IOException e) {
124 _logger.write(toString(), Logger.ERROR, "Error whilst sending message: "+e);
125 }
126 catch(PropertyNotFoundException e) {
127 _logger.write(toString(), Logger.ERROR, "Error obtaining essential configuration: "+e);
128 }
129 }
130 }
131
132 /**
133 * Overrides the {@link java.lang.Object#toString() Object.toString()}
134 * method to provide clean logging (every class should have this).
135 *
136 * This uses the uk.org.iscream.util.NameFormat class
137 * to format the toString()
138 *
139 * @return the name of this class and its CVS revision
140 */
141 public String toString() {
142 return FormatName.getName(
143 _name,
144 getClass().getName(),
145 REVISION);
146 }
147
148 /**
149 * return the String representation of what the filter does
150 */
151 public String getDescription(){
152 return DESC;
153 }
154
155 //---PRIVATE METHODS---
156
157 private String getTimeString(long time) {
158 String timeString = null;
159 if (time >= 60) {
160 timeString = (time / 60) + " minutes";
161 } else if (time >= 3600) {
162 timeString = ((time/60) / 60) + " hours";
163 } else {
164 timeString = time + " seconds";
165 }
166 return timeString;
167 }
168
169 //---ACCESSOR/MUTATOR METHODS---
170
171 //---ATTRIBUTES---
172
173 /**
174 * This is the friendly identifier of the
175 * component this class is running in.
176 * eg, a Filter may be called "filter1",
177 * If this class does not have an owning
178 * component, a name from the configuration
179 * can be placed here. This name could also
180 * be changed to null for utility classes.
181 */
182 private String _name = "EMail Alert";
183
184 /**
185 * This holds a reference to the
186 * system logger that is being used.
187 */
188 private Logger _logger = ReferenceManager.getInstance().getLogger();
189
190 //---STATIC ATTRIBUTES---
191
192 }