--- ldirectord.cvs 2005-08-01 15:47:00.069961097 -0700 +++ ldirectord 2005-08-01 15:46:38.653518119 -0700 @@ -392,6 +392,9 @@ @REAL @VIRTUAL + $ALERTEMAILOUTSERVICE + $ALERTEMAILRESTORESERVICE + $CRLF ); @@ -407,6 +410,9 @@ $RUNPID = "/var/run/ldirectord"; $QUIESCENT = "yes"; +$ALERTEMAILOUTSERVICE = "outofservicemeailaddresshere\@localhost"; +$ALERTEMAILRESTORESERVICE = "restoreservicemeailaddresshere\@localhost"; + $CRLF = "\x0d\x0a"; use Getopt::Std; @@ -2392,6 +2398,7 @@ &system_wrapper("$IPVSADM -a " . "$ipvsadm_args $rforw -w 0"); &ld_log("Quiescent $log_args (Weight set to 0)"); + &ld_alert($rservice, &get_virtual($v), 0); } } else { @@ -2449,6 +2456,7 @@ $or->{"forward"} eq $rforw){ &system_wrapper("$IPVSADM -e $ipvsadm_args"); &ld_log("Restored $log_args (Weight set to $rwght)"); + &ld_alert($rservice, &get_virtual($v), $rwght); } } else { @@ -3286,3 +3294,43 @@ } return($ip); } + +# ld_alert +# send an alert +# pre: message: Message to e-mail out +# post: message and timetsamp sent out as alert +# return: 0 on success +# 1 on error +sub ld_alert +{ + my $mailprog = '/usr/lib/sendmail'; + + my ($real_ip, $virt_ip, $weight) = (@_); + my $now = localtime(); + + my ($junk, $ip_a, $ip_b, $ip_c, $ip_d, $port) = split /^(\d+)\.(\d+)\.(\d+)\.(\d+):(\d+)/, $real_ip; + my $hostname_r = gethostbyaddr(pack('C4',$ip_a, $ip_b, $ip_c, $ip_d), 2); + my ($junk, $ip_a, $ip_b, $ip_c, $ip_d, $port) = split /^(\d+)\.(\d+)\.(\d+)\.(\d+):(\d+)/, $virt_ip; + my $hostname_v = gethostbyaddr(pack('C4',$ip_a, $ip_b, $ip_c, $ip_d), 2); + + open(MAIL, "|$mailprog -t"); + if ($weight == 0) { + print MAIL "To: $ALERTEMAILOUTSERVICE\n"; + } + else { + print MAIL "To: $ALERTEMAILRESTORESERVICE\n"; + } + print MAIL "From: LVS-prod\n"; + if ($weight == 0) { + print MAIL "Subject: LVS $hostname_r:$hostname_v down\n\n"; + } + else { + print MAIL "Subject: LVS $hostname_r:$hostname_v restored\n\n"; + } + + print MAIL "Server Alert at: $now\n"; + print MAIL "$hostname_r (virtual $hostname_v) LVS weight " . $weight . "\n"; + close(MAIL); + + return(0); +}