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
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/EMail__Alerter.java (file contents):
Revision 1.15 by ajm, Tue Mar 6 02:33:55 2001 UTC vs.
Revision 1.24 by tdb, Tue May 29 17:02:34 2001 UTC

# Line 1 | Line 1
1   //---PACKAGE DECLARATION---
2 < package uk.ac.ukc.iscream.client.alerters;
2 > package uk.org.iscream.cms.server.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.*;
5 > import uk.org.iscream.cms.server.client.*;
6 > import uk.org.iscream.cms.server.core.*;
7 > import uk.org.iscream.cms.server.util.*;
8 > import uk.org.iscream.cms.server.componentmanager.*;
9   import java.io.*;
10 < import java.text.*;
10 > import java.util.StringTokenizer;
11  
12 +
13   /**
14   * This alerter delivers alerts using e-mail.
15   *
16   * @author  $Author$
17   * @version $Id$
18   */
19 < public class EMail__Alerter implements PluginAlerter {
19 > public class EMail__Alerter extends AlerterSkeleton {
20  
21   //---FINAL ATTRIBUTES---
22  
# Line 26 | Line 25 | public class EMail__Alerter implements PluginAlerter {
25       */
26      public final String REVISION = "$Revision$";
27      
28 +    /**
29 +     * A description of this alerter
30 +     */
31      public final String DESC = "Sends alerts over e-mail.";
32      
31    public final String DEFAULT_LEVEL = Alert.alertLevels[0];
32    
33    public final String NOT_CONFIGURED = "<NOT CONFIGURED>";
34    
33   //---STATIC METHODS---
34  
35   //---CONSTRUCTORS---
36  
39    public EMail__Alerter() {      
40        _logger.write(toString(), Logger.SYSINIT, "IRC Alerter started");
41    }
42
37   //---PUBLIC METHODS---
38  
39 +    /**
40 +     * Implements the abstract method from the skeleton class.
41 +     * This method will attempt to send an alert
42 +     * message using the configured email configuration.
43 +     *
44 +     * @param alert the alert to send
45 +     */
46      public void sendAlert(Alert alert) {
47 <        ConfigurationProxy cp = ConfigurationProxy.getInstance();
48 <        String levelName;
47 >        // get the subject and replace fields
48 >        String subject;
49          try {
50 <            levelName = cp.getProperty(_name, "Alerter.EMail.level");
50 >            subject = _cp.getProperty(_name, "Alerter.EMail.subject");
51          } catch (PropertyNotFoundException e) {
52 <            levelName = DEFAULT_LEVEL;
53 <            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.level value unavailable using default of " + levelName);
52 >            subject = NOT_CONFIGURED;
53 >            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
54          }
55 <        int level = StringUtils.getStringPos(levelName, Alert.alertLevels);
56 <        // only send if it's equal (or above) our level
57 <        if(((alert.getLevel() == 0) && (alert.getLastLevel() >= level)) || (alert.getLevel() >= level)) {
58 <            String alertType = Alert.alertLevels[alert.getLevel()];
59 <            String thresholdType = Alert.thresholdLevels[alert.getThreshold()];
60 <            String timeFirstSince = DateUtils.formatTime(System.currentTimeMillis() - alert.getInitialAlertTime(), "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs");
61 <            String timeFirstOccured = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(alert.getInitialAlertTime()));
62 <
63 <            // sort out the subject
64 <            String subject;
65 <            try {
66 <                subject = cp.getProperty(_name, "Alerter.EMail.subject");
67 <            } catch (PropertyNotFoundException e) {
68 <                subject = NOT_CONFIGURED;
69 <                _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
55 >        subject = processAlertMessage(subject, alert);
56 >                    
57 >        // get the message body and replace fields
58 >        String message;
59 >        try {
60 >            message = _cp.getProperty(_name, "Alerter.EMail.message");
61 >        } catch (PropertyNotFoundException e) {
62 >            message = NOT_CONFIGURED;
63 >            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.message value unavailable using default of " + message);
64 >        }
65 >        message = processAlertMessage(message, alert);
66 >        
67 >        // attempt to send the actual message
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 >            // list of destination addresses
75 >            String destList = _cp.getProperty("Host."+alert.getSource(), "Alerter.EMail.destList");
76 >            
77 >            // set the to: list
78 >            StringTokenizer st = new StringTokenizer(destList, ";");
79 >            while (st.hasMoreTokens()) {
80 >                smtp.setTo(st.nextToken());
81              }
82 <            subject = StringUtils.replaceText(subject, "%level%", alertType);
83 <            subject = StringUtils.replaceText(subject, "%threshold%", thresholdType);
84 <            subject = StringUtils.replaceText(subject, "%source%", alert.getSource());
85 <            subject = StringUtils.replaceText(subject, "%value%", alert.getValue());
86 <            subject = StringUtils.replaceText(subject, "%thresholdValue%", alert.getThresholdValue());
87 <            subject = StringUtils.replaceText(subject, "%attributeName%", alert.getAttributeName());
88 <            subject = StringUtils.replaceText(subject, "%timeTillNextAlert%",  getTimeString(Long.parseLong(alert.getTimeTillNextAlert())));
89 <            subject = StringUtils.replaceText(subject, "%timeSinceFirstAlert%", timeFirstSince);
90 <            subject = StringUtils.replaceText(subject, "%timeOfFirstAlert%", timeFirstOccured);
91 <                        
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 <                // get the default destination list
105 <                String destList = cp.getProperty(_name, "Alerter.EMail.defaultDestList");
106 <                // check if the source we're alerting about has a specific destination
107 <                String sourceDestList = cp.getProperty("Host."+alert.getSource(), "Alerter.EMail.destList");
108 <                if(sourceDestList != null) {
109 <                    // if there is a source destination list, use it
110 <                    destList = sourceDestList;
111 <                }
112 <                
113 <                // set the to: list
114 <                StringTokenizer st = new StringTokenizer(destList, ";");
115 <                while (st.hasMoreTokens()) {
116 <                    smtp.setTo(st.nextToken());
117 <                }
118 <    
119 <                // prepare to print the message            
120 <                PrintWriter out = smtp.getOutputStream();
121 <                out.println("Subject: "+subject);
122 <                out.println();
123 <                
124 <                // send the message
125 <                out.println(message);
126 <                smtp.sendMessage();
127 <                smtp.close();
128 <                _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ alertType + " level");
129 <            }
130 <            catch(IOException e) {
131 <                _logger.write(toString(), Logger.ERROR, "Error whilst sending message: "+e);
132 <            }
133 <            catch(PropertyNotFoundException e) {
134 <                _logger.write(toString(), Logger.ERROR, "Error obtaining essential configuration: "+e);
135 <            }
82 >
83 >            // prepare to print the message            
84 >            PrintWriter out = smtp.getOutputStream();
85 >            out.println("Subject: "+subject+"\n");
86 >            
87 >            // send the message
88 >            out.println(message);
89 >            smtp.sendMessage();
90 >            smtp.close();
91 >            _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ Alert.alertLevels[alert.getLevel()] + " level");
92          }
93 +        catch(IOException e) {
94 +            _logger.write(toString(), Logger.ERROR, "Error whilst sending message: "+e);
95 +        }
96 +        catch(PropertyNotFoundException e) {
97 +            _logger.write(toString(), Logger.ERROR, "Error obtaining essential configuration: "+e);
98 +        }
99      }
100  
101      /**
102       * Overrides the {@link java.lang.Object#toString() Object.toString()}
103       * method to provide clean logging (every class should have this).
104       *
105 <     * This uses the uk.ac.ukc.iscream.util.NameFormat class
105 >     * This uses the uk.org.iscream.cms.server.util.NameFormat class
106       * to format the toString()
107       *
108       * @return the name of this class and its CVS revision
# Line 153 | Line 115 | public class EMail__Alerter implements PluginAlerter {
115      }
116  
117      /**
118 <     * return the String representation of what the filter does
118 >     * Return the String representation of what the alerter does
119 >     *
120 >     * @return the description
121       */
122      public String getDescription(){
123          return DESC;
124      }
125  
126   //---PRIVATE METHODS---
163
164    private String getTimeString(long time) {
165        String timeString = null;
166        if (time >= 60) {
167            timeString = (time / 60) + " minutes";
168        } else if (time >= 3600) {
169            timeString = ((time/60) / 60) + " hours";
170        } else {
171            timeString = time + " seconds";
172        }
173        return timeString;
174    }
127      
128   //---ACCESSOR/MUTATOR METHODS---
129 +    
130 +    /**
131 +     * Returns the "friendly" name of this class. This
132 +     * is simply an accessor for _name, required due to
133 +     * inheritance issues with extending AlerterSkeleton.
134 +     *
135 +     * @return the friendly name
136 +     */
137 +    protected String getFName() {
138 +        return _name;
139 +    }
140  
141   //---ATTRIBUTES---
142      
# Line 186 | Line 149 | public class EMail__Alerter implements PluginAlerter {
149       * can be placed here.  This name could also
150       * be changed to null for utility classes.
151       */
152 <    private String _name = "EMail Alert";
153 <
191 <    /**
192 <     * This holds a reference to the
193 <     * system logger that is being used.
194 <     */
195 <    private Logger _logger = ReferenceManager.getInstance().getLogger();
196 <
152 >    protected String _name = "EMail";
153 >    
154   //---STATIC ATTRIBUTES---
155  
156   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines