packages: nagios-plugin-check_rsync/check_rsync.cfg (NEW), nagios-plugin-ch...

glen glen at pld-linux.org
Fri May 28 09:18:10 CEST 2010


Author: glen                         Date: Fri May 28 07:18:10 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- new, used mdk spec as base

---- Files affected:
packages/nagios-plugin-check_rsync:
   check_rsync.cfg (NONE -> 1.1)  (NEW), check_rsync.pl (NONE -> 1.1)  (NEW), nagios-plugin-check_rsync.spec (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/nagios-plugin-check_rsync/check_rsync.cfg
diff -u /dev/null packages/nagios-plugin-check_rsync/check_rsync.cfg:1.1
--- /dev/null	Fri May 28 09:18:10 2010
+++ packages/nagios-plugin-check_rsync/check_rsync.cfg	Fri May 28 09:18:05 2010
@@ -0,0 +1,4 @@
+define command {
+	command_name    check_rsync
+	command_line    /usr/lib/nagios/plugins/check_rsync -H $HOSTADDRESS$ $ARG1$
+}

================================================================
Index: packages/nagios-plugin-check_rsync/check_rsync.pl
diff -u /dev/null packages/nagios-plugin-check_rsync/check_rsync.pl:1.1
--- /dev/null	Fri May 28 09:18:10 2010
+++ packages/nagios-plugin-check_rsync/check_rsync.pl	Fri May 28 09:18:05 2010
@@ -0,0 +1,191 @@
+#!/usr/bin/perl
+#
+# check_rsync  -  Check Rsync and modules availability
+# Version: 1.02
+#
+# Copyright (C) 2006-2008 Thomas Guyot-Sionnest <tguyot at gmail.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+
+use POSIX;
+use strict;
+use strict;
+use Getopt::Long;
+
+use vars qw($opt_H $opt_p $opt_m);
+use vars qw($PROGNAME %RSYNCMSG $cpid);
+use lib "/usr/local/nagios/libexec";
+use utils qw($TIMEOUT %ERRORS);
+
+$PROGNAME = "check_rsync";
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+%RSYNCMSG = (
+  '0' => 'Success',
+  '1' => 'Syntax or usage error',
+  '2' => 'Protocol incompatibility',
+  '3' => 'Errors selecting input/output files, dirs',
+  '4' => 'Requested action not supported',
+  '5' => 'Error starting client-server protocol',
+  '6' => 'Daemon unable to append to log-file',
+  '10' => 'Error in socket I/O',
+  '11' => 'Error in file I/O',
+  '12' => 'Error in rsync protocol data stream',
+  '13' => 'Errors with program diagnostics',
+  '14' => 'Error in IPC code',
+  '20' => 'Received SIGUSR1 or SIGINT',
+  '21' => 'Some error returned by waitpid()',
+  '22' => 'Error allocating core memory buffers',
+  '23' => 'Partial transfer due to error',
+  '24' => 'Partial transfer due to vanished source files',
+  '25' => 'The --max-delete limit stopped deletions',
+  '30' => 'Timeout in data send/receive',
+);
+$cpid = 0;
+
+Getopt::Long::Configure('bundling');
+GetOptions (
+  "H=s" => \$opt_H, "hostname=s" => \$opt_H,
+  "p=s" => \$opt_p, "port=s" => \$opt_p,
+  "m=s@" => \$opt_m, "module=s@" => \$opt_m );
+
+unless (defined($opt_H)){
+  print "Usage: $PROGNAME -H <host> [-p <port>] [-m <module>[,<user>,<password>] [-m <module>[,<user>,<password>]...]]\n";
+  exit $ERRORS{'UNKNOWN'};
+}
+
+my $host = $opt_H;
+my $port = defined($opt_p) ? $opt_p : 873;
+my $verbose = 0; # Not implemented as argument yet
+
+# Create an array for each -m arguments and store them in @modules
+my @modules;
+if (defined($opt_m)) {
+  for(@$opt_m) {
+    my @tmpmod = split(/,/);
+    my ($modname, $username) = @tmpmod;
+    my $pass = join(',', splice(@tmpmod, 2));
+    print STDERR "Adding module $modname\n" if ($verbose);
+    if ($pass) {
+      print STDERR "Module $modname using authentication ($username, $pass)\n" if ($verbose > 2);
+      push @modules, [ $modname, $username, $pass ];
+      } else {
+      push @modules, [ $modname ];
+    }
+  }
+}
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+  print "CRITICAL: Rsync timed out\n";
+  kill SIGKILL, $cpid if ($cpid);
+  exit $ERRORS{"CRITICAL"};
+};
+
+# Rsync arguments
+my $source = "rsync://$host";
+
+alarm($TIMEOUT);
+
+# Get a list of modules to see if rsync is up
+my $command = "/usr/bin/rsync --port=$port $source";
+
+# Workaround to kill stale rsync processes
+$cpid = open(RSYNC, "$command|") or report_error("Unable to execute rsync: $!");
+my $result;
+{
+  local $/;
+  $result = <RSYNC>;
+}
+close(RSYNC);
+my $error_code = $?;
+
+#Turn off alarm
+alarm(0);
+$cpid = 0;
+
+my $realerr = $error_code >> 8;
+report_error("Rsync command $command failed with error " . $realerr . ": " . (defined $RSYNCMSG{"$realerr"} ? $RSYNCMSG{"$realerr"} : "Unknown error")) if ($realerr != 0);
+
+# If one or more -m, check if these modules exists first...
+if (@modules) {
+
+  my @result = split(/\n/, $result);
+
+  foreach my $mod (@modules) {
+    my $match = 0;
+    for (@result) {
+      $match = 1 if (/^$$mod[0]\s/);
+    }
+    report_error("Module $$mod[0] not found") if ($match == 0);
+  }
+} else { # else just return OK
+  print "OK: Rsync is up\n";
+  exit $ERRORS{'OK'};
+}
+
+# Check each -m aruments...
+for my $arg (@modules) {
+  if (defined($$arg[1]) and defined($$arg[2])) {
+    $source = "rsync://$$arg[1]" . '@' . "$host/$$arg[0]";
+    $ENV{'RSYNC_PASSWORD'} = $$arg[2];
+  } else {
+    $source = "rsync://$host/$$arg[0]";
+    $ENV{'RSYNC_PASSWORD'} = '';
+  }
+
+  alarm($TIMEOUT);
+
+  # Better safe than sorry...
+  undef $error_code;
+  undef $result;
+  # Get a file listing of the root of the module
+  $command = "/usr/bin/rsync --port=$port $source";
+
+  # Workaround to kill stale rsync processes
+  $cpid = open(RSYNC, "$command|") or report_error("Unable to execute rsync: $!");
+  {
+    local $/;
+    $result = <RSYNC>;
+  }
+  close(RSYNC);
+  $error_code = $?;
+
+  #Turn off alarm
+  alarm(0);
+  $cpid = 0;
+
+  $realerr = $error_code >> 8;
+  report_error("Rsync command failed on module $$arg[0] with error " . $realerr . ": " . (defined $RSYNCMSG{$realerr} ? $RSYNCMSG{$realerr} : "Unknown error")) if ($realerr != 0);
+}
+
+if (@modules > 0) {
+  print "OK: Rsync is up with ", scalar(@modules), " module tested\n" if (@modules == 1);
+  print "OK: Rsync is up with ", scalar(@modules), " modules tested\n" if (@modules > 1);
+  exit $ERRORS{'OK'};
+} else { # We hould never end up here :)
+  print "UNKNOWN: The unexpected occured (bug?)\n";
+  exit $ERRORS{'UNKNOWN'};
+}
+
+# Report error passed as one string, print rsync messages to STDERR
+sub report_error {
+  my $report = shift;
+  print "CRITICAL: $report\n";
+  exit $ERRORS{'CRITICAL'};
+}
+

================================================================
Index: packages/nagios-plugin-check_rsync/nagios-plugin-check_rsync.spec
diff -u /dev/null packages/nagios-plugin-check_rsync/nagios-plugin-check_rsync.spec:1.1
--- /dev/null	Fri May 28 09:18:10 2010
+++ packages/nagios-plugin-check_rsync/nagios-plugin-check_rsync.spec	Fri May 28 09:18:05 2010
@@ -0,0 +1,55 @@
+# $Revision$, $Date$
+%define		plugin	check_rsync
+%include	/usr/lib/rpm/macros.perl
+Summary:	Nagios rsync plugin
+Name:		nagios-plugin-%{plugin}
+Version:	1.02
+Release:	1
+License:	GPL
+Group:		Networking
+Source0:	check_rsync.pl
+Source1:	check_rsync.cfg
+URL:		http://exchange.nagios.org/directory/Plugins/Network-Protocols/Rsync/check_rsync/details
+BuildRequires:	rpm-perlprov >= 4.1-13
+Requires:	nagios-common
+Requires:	nagios-plugins-libs
+Requires:	rsync
+BuildArch:	noarch
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define		_sysconfdir	/etc/nagios/plugins
+%define		plugindir	%{_prefix}/lib/nagios/plugins
+
+%define		_noautoreq	perl(utils)
+
+%description
+Checks rsync servers availability, as well as (optionally) individual
+modules availability. It also supports authentication on modules.
+
+%prep
+%setup -qcT
+cp -p %{SOURCE0} %{plugin}
+%{__sed} -i -e 's,/usr/local/nagios/libexec,%{plugindir},' %{plugin}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{plugindir}}
+install -p %{plugin} $RPM_BUILD_ROOT%{plugindir}/%{plugin}
+cp -a %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/%{plugin}.cfg
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%attr(640,root,nagios) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{plugin}.cfg
+%attr(755,root,root) %{plugindir}/%{plugin}
+
+%define date	%(echo `LC_ALL="C" date +"%a %b %d %Y"`)
+%changelog
+* %{date} PLD Team <feedback at pld-linux.org>
+All persons listed below can be reached at <cvs_login>@pld-linux.org
+
+$Log$
+Revision 1.1  2010/05/28 07:18:05  glen
+- new, used mdk spec as base
================================================================


More information about the pld-cvs-commit mailing list