#!/usr/bin/perl 
#Author:
#        Otavio Honorio (otavio.honorio@opservices.com.br)
use strict;
use Getopt::Long;
use POSIX;
use File::Basename;
# Setting environment
$ENV{"USER"}="opuser";
$ENV{"HOME"}="/home/opuser";
# Global variables
our $name = basename($0, ".pl");
our $path = "/usr/local/opmon/libexec";
our $bin = $path."/check_nrpe";
our ($oHelp, $oVerbose, $oWarn, $oCrit, $oHost, $oPort, $oCommand, $oArgs, %hash);
#--------------------------------------------------------------------------------------
sub main {
	getOption();
	my @hosts = split(/,/,$oHost);
	my ($exec, $mgs, $i);
	foreach (@hosts) {
		if ($_ =~ /(.+):(\d+)/) {
			$_ = $1;
			$oPort = $2;
		}
		if (!$oArgs) {
			$exec = `$bin -H $_ -p $oPort -t 30 -c $oCommand`;
			print $exec if ($oVerbose);
			parse($exec);
		} else {
			$exec = `$bin -H $_ -p $oPort -t 30 -c $oCommand -a $oArgs`;
			print $exec if ($oVerbose);
			parse($exec);
		}
	}
	for my $key (keys %hash) {
		$mgs .= $key.": ".$hash{$key}." <br> ";
		if ($hash{$key} eq "Running") {
			$i++;
		}
	}
	if ($i == 1) {
		quit($mgs,0);
	}else{
		quit($mgs,2);	
	}
}
#--------------------------------------------------------------------------------------
sub parse {
	my $exec = shift;
	chomp($exec);
	if ($exec =~ /[A-Z]\s([A-Z]+):.+/) {
		$hash{$_} = "Running" if ($1 eq "OK");
		$hash{$_} = "Not Running" if ($1 eq "CRITICAL");
	}else{
		$hash{$_} = "\s($exec)";
	}
}
#--------------------------------------------------------------------------------------
sub quit {
	my $mgs = shift;
	my $code = shift;
	print $mgs,"\n";
	exit($code);
}
#--------------------------------------------------------------------------------------
sub getOption  {
	Getopt::Long::Configure('bundling');
	GetOptions(
		'c|command=s' => \$oCommand,
		'h|help' => \$oHelp,
		'v|verbose' => \$oVerbose,
		'H|host=s' => \$oHost,
		'p|port=i' => \$oPort,
		'v|verbose' => \$oVerbose,
		'a|args=s' => \$oArgs,
        );

	$oPort = 5666 if (!$oPort);

	if ($oHelp) {
		printUsage();
		exit(1);
	}
	if ((!$oHost) or (!$oCommand)) {
		printUsage();
		exit(1);
	}
}
#--------------------------------------------------------------------------------------
sub printUsage {
       print <<EOB
Usage: $name.pl [OPTION]...

-h, --help
-v, --verbose
-H, --host
	host1,host2 or host1:port, host2:port
-c, --command
-a, --args (Optional)
-p, --port

Usage:  $name.pl -H opmon1,opmon2 -c daemon_opmon
	$name.pl -H opmon1,opmon2 -c process -a 1: 1: rtgpoll
	$name.pl -H opmon1,opmon2 -p 5666 -c process -a 1: 1: rtgpoll
	$name.pl -H opmon1:5666,opmon2:5667 -c process -a 1: 1: rtgpoll

EOB
}
#--------------------------------------------------------------------------------------
&main;
