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.13
Committed: Mon Mar 5 12:45:51 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.12: +4 -4 lines
Log Message:
Now shows OK alerts if the previous alert exceeded the alerters level

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: ajm4 $
17 * @version $Id: EMail__Alerter.java,v 1.12 2001/03/05 12:09:28 ajm4 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.12 $";
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.getLastLevel() >= level)) || (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 }