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.18 by tdb, Fri Mar 16 17:13:49 2001 UTC vs.
Revision 1.26 by tdb, Tue May 21 16:47:16 2002 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org.uk
4 + * Copyright (C) 2000-2002 i-scream
5 + *
6 + * This program is free software; you can redistribute it and/or
7 + * modify it under the terms of the GNU General Public License
8 + * as published by the Free Software Foundation; either version 2
9 + * of the License, or (at your option) any later version.
10 + *
11 + * This program is distributed in the hope that it will be useful,
12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 + * GNU General Public License for more details.
15 + *
16 + * You should have received a copy of the GNU General Public License
17 + * along with this program; if not, write to the Free Software
18 + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 + */
20 +
21   //---PACKAGE DECLARATION---
22 < package uk.org.iscream.client.alerters;
22 > package uk.org.iscream.cms.server.client.alerters;
23  
24   //---IMPORTS---
25 < import uk.org.iscream.client.*;
26 < import uk.org.iscream.core.*;
27 < import uk.org.iscream.util.*;
28 < import uk.org.iscream.componentmanager.*;
9 <
10 < import java.util.*;
25 > import uk.org.iscream.cms.server.client.*;
26 > import uk.org.iscream.cms.server.core.*;
27 > import uk.org.iscream.cms.server.util.*;
28 > import uk.org.iscream.cms.server.componentmanager.*;
29   import java.io.*;
30 < import java.text.*;
30 > import java.util.StringTokenizer;
31  
32 +
33   /**
34   * This alerter delivers alerts using e-mail.
35   *
36   * @author  $Author$
37   * @version $Id$
38   */
39 < public class EMail__Alerter implements PluginAlerter {
39 > public class EMail__Alerter extends AlerterSkeleton {
40  
41   //---FINAL ATTRIBUTES---
42  
# Line 26 | Line 45 | public class EMail__Alerter implements PluginAlerter {
45       */
46      public final String REVISION = "$Revision$";
47      
48 +    /**
49 +     * A description of this alerter
50 +     */
51      public final String DESC = "Sends alerts over e-mail.";
52      
31    public final String DEFAULT_LEVEL = Alert.alertLevels[0];
32    
33    public final String NOT_CONFIGURED = "<NOT CONFIGURED>";
34    
53   //---STATIC METHODS---
54  
55   //---CONSTRUCTORS---
56  
39    public EMail__Alerter() {      
40        _logger.write(toString(), Logger.SYSINIT, "IRC Alerter started");
41    }
42
57   //---PUBLIC METHODS---
58  
59 +    /**
60 +     * Implements the abstract method from the skeleton class.
61 +     * This method will attempt to send an alert
62 +     * message using the configured email configuration.
63 +     *
64 +     * @param alert the alert to send
65 +     */
66      public void sendAlert(Alert alert) {
67 <        ConfigurationProxy cp = ConfigurationProxy.getInstance();
68 <        String levelName;
67 >        // get the subject and replace fields
68 >        String subject;
69          try {
70 <            levelName = cp.getProperty(_name, "Alerter.EMail.level");
70 >            subject = _cp.getProperty(_name, "Alerter.EMail.subject");
71          } catch (PropertyNotFoundException e) {
72 <            levelName = DEFAULT_LEVEL;
73 <            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.level value unavailable using default of " + levelName);
72 >            subject = NOT_CONFIGURED;
73 >            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
74          }
75 <        int level = StringUtils.getStringPos(levelName, Alert.alertLevels);
76 <        // only send if it's equal (or above) our level
77 <        if(((alert.getLevel() == 0) && (alert.getLastLevel() >= level)) || (alert.getLevel() >= level)) {
78 <            String alertType = Alert.alertLevels[alert.getLevel()];
79 <            String thresholdType = Alert.thresholdLevels[alert.getThreshold()];
80 <            String timeFirstSince = DateUtils.formatTime((System.currentTimeMillis() - alert.getInitialAlertTime())/1000, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs");
81 <            String timeFirstOccured = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(alert.getInitialAlertTime()));
82 <
83 <            // sort out the subject
84 <            String subject;
85 <            try {
86 <                subject = cp.getProperty(_name, "Alerter.EMail.subject");
87 <            } catch (PropertyNotFoundException e) {
88 <                subject = NOT_CONFIGURED;
89 <                _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
75 >        subject = processAlertMessage(subject, alert);
76 >                    
77 >        // get the message body and replace fields
78 >        String message;
79 >        try {
80 >            message = _cp.getProperty(_name, "Alerter.EMail.message");
81 >        } catch (PropertyNotFoundException e) {
82 >            message = NOT_CONFIGURED;
83 >            _logger.write(toString(), Logger.WARNING, "Alerter.EMail.message value unavailable using default of " + message);
84 >        }
85 >        message = processAlertMessage(message, alert);
86 >        
87 >        // attempt to send the actual message
88 >        try {
89 >            // create SMTP message
90 >            Smtp smtp = new Smtp(_cp.getProperty(_name, "Alerter.EMail.smtpServer"));
91 >            // set our sender
92 >            smtp.setSender(_cp.getProperty(_name, "Alerter.EMail.sender"));
93 >            
94 >            // list of destination addresses
95 >            String destList = _cp.getProperty("Host."+alert.getSource(), "Alerter.EMail.destList");
96 >            
97 >            // set the to: list
98 >            StringTokenizer st = new StringTokenizer(destList, ";");
99 >            while (st.hasMoreTokens()) {
100 >                smtp.setTo(st.nextToken());
101              }
102 <            subject = StringUtils.replaceText(subject, "%level%", alertType);
103 <            subject = StringUtils.replaceText(subject, "%threshold%", thresholdType);
104 <            subject = StringUtils.replaceText(subject, "%source%", alert.getSource());
105 <            subject = StringUtils.replaceText(subject, "%value%", alert.getValue());
106 <            subject = StringUtils.replaceText(subject, "%thresholdValue%", alert.getThresholdValue());
107 <            subject = StringUtils.replaceText(subject, "%attributeName%", alert.getAttributeName());
108 <            subject = StringUtils.replaceText(subject, "%timeTillNextAlert%",  DateUtils.getTimeString(Long.parseLong(alert.getTimeTillNextAlert())));
109 <            subject = StringUtils.replaceText(subject, "%timeSinceFirstAlert%", timeFirstSince);
110 <            subject = StringUtils.replaceText(subject, "%timeOfFirstAlert%", timeFirstOccured);
111 <                        
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%",  DateUtils.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 <            }
102 >
103 >            // prepare to print the message            
104 >            PrintWriter out = smtp.getOutputStream();
105 >            out.println("Subject: "+subject+"\n");
106 >            
107 >            // send the message
108 >            out.println(message);
109 >            smtp.sendMessage();
110 >            smtp.close();
111 >            _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ Alert.alertLevels[alert.getLevel()] + " level");
112          }
113 +        catch(IOException e) {
114 +            _logger.write(toString(), Logger.ERROR, "Error whilst sending message: "+e);
115 +        }
116 +        catch(PropertyNotFoundException e) {
117 +            _logger.write(toString(), Logger.ERROR, "Error obtaining essential configuration: "+e);
118 +        }
119      }
120  
121      /**
122       * Overrides the {@link java.lang.Object#toString() Object.toString()}
123       * method to provide clean logging (every class should have this).
124       *
125 <     * This uses the uk.org.iscream.util.NameFormat class
125 >     * This uses the uk.org.iscream.cms.server.util.NameFormat class
126       * to format the toString()
127       *
128       * @return the name of this class and its CVS revision
# Line 146 | Line 135 | public class EMail__Alerter implements PluginAlerter {
135      }
136  
137      /**
138 <     * return the String representation of what the filter does
138 >     * Return the String representation of what the alerter does
139 >     *
140 >     * @return the description
141       */
142      public String getDescription(){
143          return DESC;
# Line 155 | Line 146 | public class EMail__Alerter implements PluginAlerter {
146   //---PRIVATE METHODS---
147      
148   //---ACCESSOR/MUTATOR METHODS---
149 +    
150 +    /**
151 +     * Returns the "friendly" name of this class. This
152 +     * is simply an accessor for _name, required due to
153 +     * inheritance issues with extending AlerterSkeleton.
154 +     *
155 +     * @return the friendly name
156 +     */
157 +    protected String getFName() {
158 +        return _name;
159 +    }
160  
161   //---ATTRIBUTES---
162      
# Line 167 | Line 169 | public class EMail__Alerter implements PluginAlerter {
169       * can be placed here.  This name could also
170       * be changed to null for utility classes.
171       */
172 <    private String _name = "EMail Alert";
173 <
172 <    /**
173 <     * This holds a reference to the
174 <     * system logger that is being used.
175 <     */
176 <    private Logger _logger = ReferenceManager.getInstance().getLogger();
177 <
172 >    protected String _name = "EMail";
173 >    
174   //---STATIC ATTRIBUTES---
175  
176   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines