/[monit]/monit/alert.c
ViewVC logotype

Diff of /monit/alert.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.44 by martinp, Thu Oct 6 21:14:42 2005 UTC revision 1.45 by martinp, Sat Nov 5 14:09:00 2005 UTC
# Line 66  Line 66 
66    
67  static void copy_mail(Mail_T, Mail_T);  static void copy_mail(Mail_T, Mail_T);
68  static void replace_bare_linefeed(Mail_T *);  static void replace_bare_linefeed(Mail_T *);
69  static void substitute(Mail_T*, char *, const char *, const char *);  static void substitute(Mail_T *, Event_T);
70    
71    
72  /* ------------------------------------------------------------------ Public */  /* ------------------------------------------------------------------ Public */
# Line 75  static void substitute(Mail_T*, char *, Line 75  static void substitute(Mail_T*, char *,
75  /**  /**
76   * Notify registred users about the event   * Notify registred users about the event
77   * @param E An Event object   * @param E An Event object
78     * @return If failed, return HANDLER_ALERT flag or inverse flag if passed
79   */   */
80  void handle_alert(Event_T E) {  int handle_alert(Event_T E) {
81    
82    Service_T s;    Service_T s;
83      int rv = HANDLER_PASSED;
84    
85    ASSERT(E);    ASSERT(E);
86    
87    s= Event_get_source(E);    s= Event_get_source(E);
88      if(!s) {
89        log("Aborting alert\n");
90        return rv;
91      }
92    
93    if(s->maillist || Run.maillist) {    if(s->maillist || Run.maillist) {
94      Mail_T m;      Mail_T m;
95      Mail_T n;      Mail_T n;
# Line 122  void handle_alert(Event_T E) { Line 129  void handle_alert(Event_T E) {
129            tmp->opt_message= xstrdup(Event_get_message(E));            tmp->opt_message= xstrdup(Event_get_message(E));
130          }          }
131    
132          substitute(&tmp, s->name, EVENT_DESCRIPTION(E),          substitute(&tmp, E);
           Event_get_action_description(E));  
133    
134          replace_bare_linefeed(&tmp);          replace_bare_linefeed(&tmp);
135    
136          tmp->next= list;          tmp->next= list;
137          list= tmp;          list= tmp;
138    
139          DEBUG("%s notification is sent to %s\n", EVENT_DESCRIPTION(E), m->to);          DEBUG("%s notification is sent to %s\n", Event_get_description(E), m->to);
140    
141        }        }
142    
# Line 180  void handle_alert(Event_T E) { Line 186  void handle_alert(Event_T E) {
186          if(Event_get_message(E))          if(Event_get_message(E))
187            tmp->opt_message= xstrdup(Event_get_message(E));            tmp->opt_message= xstrdup(Event_get_message(E));
188    
189          substitute(&tmp, s->name, EVENT_DESCRIPTION(E),          substitute(&tmp, E);
           Event_get_action_description(E));  
190    
191          replace_bare_linefeed(&tmp);          replace_bare_linefeed(&tmp);
192    
193          tmp->next= list;          tmp->next= list;
194          list= tmp;          list= tmp;
195    
196          DEBUG("%s notification is sent to %s\n", EVENT_DESCRIPTION(E), m->to);          DEBUG("%s notification is sent to %s\n", Event_get_description(E), m->to);
197    
198        }        }
199    
# Line 196  void handle_alert(Event_T E) { Line 201  void handle_alert(Event_T E) {
201    
202      if(list) {      if(list) {
203    
204        sendmail(list);        if(!sendmail(list)) {
205            rv = HANDLER_ALERT;
206          }
207        gc_mail_list(&list);        gc_mail_list(&list);
208    
209      }      }
# Line 205  void handle_alert(Event_T E) { Line 212  void handle_alert(Event_T E) {
212    
213    }    }
214    
215      return rv;
216    
217  }  }
218    
219    
220  static void substitute(Mail_T *m, char *name, const char *event,  static void substitute(Mail_T *m, Event_T e) {
                        const char *action) {  
221    
222    char host[STRLEN];    char host[STRLEN];
223    char now[STRLEN];    char timestamp[STRLEN];
224    
225    ASSERT(m && name && event && action);    ASSERT(m && e);
226    
   Util_getRFC822Date(NULL, now, STRLEN);  
227    if(gethostname(host, sizeof(host)) < 0) {    if(gethostname(host, sizeof(host)) < 0) {
228      snprintf(host, STRLEN, "%s", LOCALHOST);      snprintf(host, STRLEN, "%s", LOCALHOST);
229    }    }
230    
231      Util_getRFC822Date(&e->collected, timestamp, STRLEN);
232      
233    Util_replaceString(&(*m)->from, "$HOST", host);    Util_replaceString(&(*m)->from, "$HOST", host);
234    Util_replaceString(&(*m)->subject, "$DATE", now);    Util_replaceString(&(*m)->subject, "$DATE", timestamp);
235    Util_replaceString(&(*m)->message, "$DATE", now);    Util_replaceString(&(*m)->message, "$DATE", timestamp);
236    Util_replaceString(&(*m)->subject, "$HOST", host);    Util_replaceString(&(*m)->subject, "$HOST", host);
237    Util_replaceString(&(*m)->message, "$HOST", host);    Util_replaceString(&(*m)->message, "$HOST", host);
238    Util_replaceString(&(*m)->subject, "$PROGRAM", name);    Util_replaceString(&(*m)->subject, "$PROGRAM", Event_get_source_name(e));
239    Util_replaceString(&(*m)->message, "$PROGRAM", name);    Util_replaceString(&(*m)->message, "$PROGRAM", Event_get_source_name(e));
240    Util_replaceString(&(*m)->subject, "$SERVICE", name);    Util_replaceString(&(*m)->subject, "$SERVICE", Event_get_source_name(e));
241    Util_replaceString(&(*m)->message, "$SERVICE", name);    Util_replaceString(&(*m)->message, "$SERVICE", Event_get_source_name(e));
242    Util_replaceString(&(*m)->subject, "$EVENT", event);    Util_replaceString(&(*m)->subject, "$EVENT", Event_get_description(e));
243    Util_replaceString(&(*m)->message, "$EVENT", event);    Util_replaceString(&(*m)->message, "$EVENT", Event_get_description(e));
244    Util_replaceString(&(*m)->subject, "$ACTION", action);    Util_replaceString(&(*m)->subject, "$ACTION", Event_get_action_description(e));
245    Util_replaceString(&(*m)->message, "$ACTION", action);    Util_replaceString(&(*m)->message, "$ACTION", Event_get_action_description(e));
246  }  }
247    
248    

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.45

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26