The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# See copyright, etc in below POD section.
######################################################################

require 5.006_001;
use lib '../blib/lib';        # testing
use Getopt::Long;
use Pod::Usage;
use strict;
use vars qw ($Debug $VERSION);

use lib "/usr/lib/nagios/plugins" ;
use utils qw(%ERRORS &print_revision &support &usage);
use IPC::Locker;

$VERSION = '1.496';

#======================================================================
# main

our $PROGNAME = "check_lockerd";
my %opt_req_params = (
    host => "localhost",
);

autoflush STDOUT 1;
autoflush STDERR 1;

Getopt::Long::Configure('bundling');
if (! GetOptions (
		  "h|help"	=> \&print_usage,
		  "v|debug"	=> \&debug,
		  "V|version"	=> \&version,
		  "p|port=i"	=> sub {$opt_req_params{port}   = $_[1];},
		  "H|host|hostname=s"	=> sub {$opt_req_params{host}   = $_[1];},
		  )) {
    usage("Bad options passed, use --help for more information.\n");
}

check_lockerd(%opt_req_params);

#----------------------------------------------------------------------

sub print_usage {
    print_revision($PROGNAME, $VERSION);
    pod2usage(-verbose=>2, -exitval=>2, -output=>\*STDOUT, -noperldoc=>1);
    support();
    exit $ERRORS{'OK'};
}

sub version {
    print_revision($PROGNAME, $VERSION);
    exit $ERRORS{'OK'};
}

sub debug {
    $Debug = 1;
    $IPC::Locker::Debug = 1;
}

#######################################################################

sub check_lockerd {
    my %params = (@_);

    # Config requestor
    my $locker = new IPC::Locker (%params);

    # Send a request to the server, get reply & trap errors
    my $res = $locker->ping_status();
    if ($res && $res->{ok}) {
	print "LOCKERD OK - $res->{status}\n";
	exit $ERRORS{OK};
    } else {
	print "LOCKERD CRITICAL - $res->{status}\n";
	exit $ERRORS{CRITICAL};
    }
}

#######################################################################
__END__

=pod

=head1 NAME

check_lockerd - Under Nagios, check the lockerd daemon on the specified host.

=head1 SYNOPSIS

  check_lockerd --host hostname -p port

=head1 DESCRIPTION

Check_lockerd is a nagios plugin for the IPC::Locker daemon.

Add to Nagios's checkcommands.cfg:

    define command{
	command_name	check_lockerd
	command_line	$USER1$/check_lockerd -H $HOSTADDRESS$
	}

A quicker, but less accurate check is possible using the default Nagios
check_tcp plugin as follows:

    define command{
	command_name	check_lockerd
	command_line	$USER1$/check_tcp -H $HOSTADDRESS$ -p 1751
	}

=head1 ARGUMENTS

=over 4

=item --help

Displays this message and program version and exits.

=item --host

Specifies host name to check for a process.

=item --port

Specifies the port number to contact the "lockerd" on.  (default 1752)

=back

=head1 DISTRIBUTION

The latest version is available from CPAN and from L<http://www.veripool.org/>.

Copyright 2006-2017 by Wilson Snyder.  This package is free software; you
can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.

=head1 AUTHORS

Wilson Snyder <wsnyder@wsnyder.org>

=head1 SEE ALSO

L<IPC::Locker>, L<IPC::Locker>, L<lockerd>, L<nagios>

=cut

######################################################################
### Local Variables:
### compile-command: "./check_lockerd "
### End: