SOURCES: mon-msql-mysql-timeout.patch (NEW) - new; timeout specifi...

arekm arekm at pld-linux.org
Fri Dec 8 15:03:04 CET 2006


Author: arekm                        Date: Fri Dec  8 14:03:04 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new; timeout specified from configuration by Przemyslaw Plewa <pepe at pepe000 at wp.pl>

---- Files affected:
SOURCES:
   mon-msql-mysql-timeout.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/mon-msql-mysql-timeout.patch
diff -u /dev/null SOURCES/mon-msql-mysql-timeout.patch:1.1
--- /dev/null	Fri Dec  8 15:03:04 2006
+++ SOURCES/mon-msql-mysql-timeout.patch	Fri Dec  8 15:02:59 2006
@@ -0,0 +1,56 @@
+diff -ruN mon-1.1.0pre1.org/mon.d/msql-mysql.monitor mon-1.1.0pre1/mon.d/msql-mysql.monitor
+--- mon-1.1.0pre1.org/mon.d/msql-mysql.monitor	2004-06-09 07:18:04.000000000 +0200
++++ mon-1.1.0pre1/mon.d/msql-mysql.monitor	2006-12-08 15:00:05.000000000 +0100
+@@ -53,17 +53,27 @@
+ 
+ use DBI;
+ use Getopt::Long;
++use POSIX ':signal_h';
+ 
+ my @details=();
+ my @failures=();
+ 
+-GetOptions( \%options, "mode=s", "port=i", "username=s", "password=s", "database=s" );
++my $mask = POSIX::SigSet->new( SIGALRM );
++my $action = POSIX::SigAction->new( 
++       sub { die "connect timeout" },        # the handler code ref
++       $mask,
++       # not using (perl 5.8.2 and later) 'safe' switch or sa_flags
++);
++
++GetOptions( \%options, "mode=s", "port=i", "username=s", "password=s", "database=s", "timeout=i" );
+ 
+ # uncomment these two lines and provide suitable information if you don't
+ # want to pass sensitive information on the command line
+ #$options{username} ||= "username";
+ #$options{password} ||= "password";
+ 
++$options{timeout} = 60 if ! $options{timeout};
++
+ if( $0 =~ m/\/msql\.monitor$/ || $options{mode} =~ m/msql/i ) { 
+ 	$mode = "mSQL";
+ 	$options{port} = 1114 if ! $options{port};
+@@ -76,8 +86,21 @@
+ }
+ 
+ for $host( @ARGV ) {
+-	my( $dbh ) = DBI->connect( "DBI:$mode:$options{database}:$host:$options{port}", $options{username}, $options{password}, { PrintError => 0 } );
+-	if( ! $dbh ) {
++	my $dbh = 0;
++	my $oldaction = POSIX::SigAction->new();
++	sigaction( 'ALRM', $action, $oldaction );
++	eval {
++		alarm $options{timeout};
++		$dbh = DBI->connect( "DBI:$mode:$options{database}:$host:$options{port}", $options{username}, $options{password}, { PrintError => 0 } );
++		alarm 0;
++	};
++	alarm 0;
++        sigaction( 'ALRM', $oldaction );
++	if ($@) {
++		push( @failures, $host);
++		push( @details, "$host: Could not connect to $mode server on $options{port}: $@\n");
++		next;
++	} elsif( ! $dbh ) {
+ 		push( @failures, $host);
+ 	    	push( @details, "$host: Could not connect to $mode server on $options{port}: " . $DBI::errstr . "\n");
+ 		next;
================================================================


More information about the pld-cvs-commit mailing list