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.12
Committed: Mon Mar 5 12:09:28 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.11: +4 -4 lines
Log Message:
Now responds to OK messages even if that isn't the level its monitoring.

Maybe not ideal just yet though, it should only get OK's if its level has been passed, but not sure how to do that yet.

File Contents

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