#!/usr/bin/perl

$VERSION="1.2";

($warning, $critical) = @ARGV;

$status_log="/usr/local/opmon/var/status.log";
if (not(-e "$status_log")) {
   print "CRITICO - status.log nao existe.\n";
   exit(2);
}

open(STATUS, $status_log);
@status=<STATUS>;
close(STATUS);

$total=0;
$total_disable=0;
$sum=0;
$max=0;
$min=250;
for ($i=0; $i<=$#status; $i++) {
	if ("$status[$i]" =~ "servicestatus") {
		$check_latency=$status[$i+13];
		chomp($check_latency);
		$active_enabled=$status[$i+42];
		chomp($active_enabled);
		if ($active_enabled =~ "active_checks_enabled") {
			 @parts=split(/[=]/,$active_enabled);
			$active_checks_enabled = $parts[1];
		}
		if ($active_checks_enabled == 1) {
			$total++;
			if ($check_latency  =~ "check_latency") { 
				@parts=split(/[=]/,$check_latency);
				$value=($parts[1]);
				$sum=$sum+$value;
				if ($value>$max) {
					$max=$value;
				}
				if ($value<$min) {
					$min=$value
				}
			}
		}
		else {
			$total_disable++;
		}
	}
}

$pct_temp=$sum/$total;
$pct_temp=sprintf("%.03f",$pct_temp);
$cp_unit='s';

if ($pct_temp>$critical) {
   print "Critical - Latencia media: $pct_temp segundos ($sum /$total active checks enabled / $total_disable active checks disabled) - Latencia minima: $min segundos - Latencia maxima: $max segundos |Media=$pct_temp$cp_unit;$warning;$critical;0; Minima=$min$cp_unit;$warning;$critical;0; Maxima=$max$cp_unit;$warning;$critical;0;\n";
   exit(2);
}elsif ($pct_temp>$warning) {
   print "Warning - Latencia media: $pct_temp segundos ($sum /$total active checks enabled / $total_disable active checks disabled) - Latencia minima: $min segundos - Latencia maxima: $max segundos |Media=$pct_temp$cp_unit;$warning;$critical;0; Minima=$min$cp_unit;$warning;$critical;0; Maxima=$max$cp_unit;$warning;$critical;0;\n";
   exit(1);
}else{
   print "Ok - Latencia media: $pct_temp segundos ($sum /$total active checks enabled / $total_disable active checks disabled) - Latencia minima: $min segundos - Latencia maxima: $max segundos |Media=$pct_temp$cp_unit;$warning;$critical;0; Minima=$min$cp_unit;$warning;$critical;0; Maxima=$max$cp_unit;$warning;$critical;0;\n";
   exit(0);
}
