#!/usr/bin/perl
use strict;
use Getopt::Long;

our($conf) = "/etc/smsd.conf";
our($warning);
our($critical);

sub main 
{

	my $outgoing;
	my $failed;
	my $queue_name;
	my $msg;
	my $failed_msg;
	my $aux;


	parse_args();

	if (!-f $conf) {
		print "CRITICAL - Impossivel encontrar arquivo de configuracao $conf\n";
		exit 2;
	}

	$queue_name = "";
	open(CFILE,"<$conf");
	foreach(<CFILE>) {
		if (m/^queues\s*=(.*)$/) {
			$queue_name = $1;
			$queue_name =~ s/[ \t]//g;
		}
		if (m/^failed\s*=(.*)$/) {
			$failed = $1;
			$failed =~ s/[ \t]//g;
		}

	}

	seek(CFILE,0,0);

	$outgoing = "";
	$aux = 0;
	foreach(<CFILE>) {
		if (m/^$queue_name.*=(.*)$/ && $aux == 1) { 
			$outgoing = $1;
			$outgoing =~ s/[ \t]//g;
			$aux = 0;
			seek(CFILE,0,2);
		}
		if (m/^\[queues\].*$/) {
			$aux = 1;
		}
	}
	close(CFILE);

	if ($outgoing eq "" || !-d $outgoing) {
		print "UNKNOWN - Impossivel determinar spool de mensagens\n";
		exit 3;
	}

	$msg = `ls -la $outgoing | wc -l |xargs echo -n`;
	$failed_msg = `ls -la $failed | wc -l |xargs echo -n`;
	
	$msg -= 3;
	$failed_msg -= 3;

	print "Mensagens na fila: $msg  Failed: $failed_msg | mensagens=$msg;$warning;$critical;;\n";
	exit 2 if ($failed_msg != 0 || $msg > $critical);
	exit 1 if ($msg > $warning);
	exit 0;

}

sub parse_args
{
	GetOptions(
		'w|warning=i'           => \$warning,
		'c|critical=i'          => \$critical,
	)or do {
                print_usage();
        };


}

sub print_usage
{
	print "$0 -w <warning> -c <critical>\n";
	exit 3;
}

&main();
