Hi,

I added the "monitorfile" option to ldirectord some time ago. The patch
below by Fernanda Weiden adds some useful log output for other check
types than HTTP and also changes the log format to something more
human-readable.

Julius

diff -r e0f9eeef2e31 ldirectord/ldirectord.in
--- a/ldirectord/ldirectord.in  Thu Aug 07 17:15:05 2008 +1000
+++ b/ldirectord/ldirectord.in  Fri Aug 08 15:37:30 2008 +0200
@@ -2452,7 +2452,7 @@ sub check_http
        my $recstr = $$r{receive};
        if ($res->is_success && (!($recstr =~ /.+/) || 
                                $res->content =~ /$recstr/)) {
-               service_set($v, $r, "up", {do_log => 1}, $res->content);
+               service_set($v, $r, "up", {do_log => 1}, $res->status_line);
                &ld_debug(2, "check_http: $$r{url} is up\n");
                return $SERVICE_UP;
        }
@@ -2629,7 +2629,7 @@ sub check_ldap
        my $ldap = Net::LDAP->new("$$r{server}", port => $port,
                                        timeout => $$v{negotiatetimeout});
        if(!$ldap) {
-               service_set($v, $r, "down", {do_log => 1});
+               service_set($v, $r, "down", {do_log => 1}, "Connection failed");
                &ld_debug(4, "Connection failed");
                return $SERVICE_DOWN;
        }
@@ -2642,7 +2642,7 @@ sub check_ldap
                $mesg = $ldap->bind ;
        }
        if ($mesg->is_error) {
-               service_set($v, $r, "down", {do_log => 1});
+               service_set($v, $r, "down", {do_log => 1}, "Bind failed");
                &ld_debug(4, "Bind failed");
                return $SERVICE_DOWN;
        }
@@ -2655,7 +2655,7 @@ sub check_ldap
                );
 
        if($result->count != 1) {
-               service_set($v, $r, "down", {do_log => 1});
+               service_set($v, $r, "down", {do_log => 1}, "No answer 
received");
                &ld_debug(2, "Count failed : " . $result->count);
                return $SERVICE_DOWN;
        }
@@ -2663,10 +2663,10 @@ sub check_ldap
        my $href = $result->as_struct;
        my @arrayOfDNs  = keys %$href ;
        if (!($recstr =~ /.+/) || $arrayOfDNs[0] =~ /$recstr/) {
-               service_set($v, $r, "up", {do_log => 1});
-               return $SERVICE_UP;
-       } else {
-               service_set($v, $r, "down", {do_log => 1});
+               service_set($v, $r, "up", {do_log => 1}, "Success");
+               return $SERVICE_UP;
+       } else {
+               service_set($v, $r, "down", {do_log => 1}, "Response mismatch");
                &ld_debug(4,"Message differs : " . ", " . $$r{receive} 
                                . ", " . $arrayOfDNs[0] . ".");
                return $SERVICE_DOWN;
@@ -3178,19 +3178,19 @@ sub check_dns
        };
  
        if (@$ eq "timeout\n" or ! $query) {
-                service_set($v, $r, "down", {do_log => 1});
+                service_set($v, $r, "down", {do_log => 1}, "Connection timed 
out");
                 return $SERVICE_DOWN;
        }
  
        foreach $rr ($query->answer) {
                if (($rr->type eq "A" and $rr->address eq $$r{"receive"}) or
                    ($rr->type eq "PTR" and $rr->ptrdname eq $$r{"receive"})) {
-                       service_set($v, $r, "up", {do_log => 1});
+                       service_set($v, $r, "up", {do_log => 1}, "Success");
                        return $SERVICE_UP;
                }
        }
  
-       service_set($v, $r, "down", {do_log => 1});
+       service_set($v, $r, "down", {do_log => 1}, "Response mismatch");
        return $SERVICE_DOWN;
 }
 
@@ -3264,7 +3264,7 @@ sub service_set()
        my ($real, $virtual, $virt, $now);
        
        if ($$flags{'do_log'}) {
-               $now = time();
+               $now = localtime();
                
                if (!defined($log_msg)) {
                        $log_msg = "-";
@@ -3311,9 +3311,12 @@ sub service_set()
                        }
                        
                        if ($$v{"monitorfile"} and $$flags{"do_log"}) {
+                               my $real_log_msg = $real_id;
+                               $real_log_msg =~ tr/:/ /s;
+                               $real_log_msg =~ s/\\//g;
                                unless(
                                        open(CHECKLOG, ">>$$v{monitorfile}") and
-                                       print CHECKLOG 
"$now|$$|$real_id|$state|$log_msg\n" and
+                                       print CHECKLOG "[$now] [$$] 
$real_log_msg [$state] $log_msg\n" and
                                        close(CHECKLOG)
                                ) { die("Error writing to monitorfile 
'$$v{monitorfile}': $!"); }
                        }

_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to