#!/usr/bin/perl
($host, $community, $pattern) = @ARGV;
$snmpwalk = "/usr/bin/snmpwalk";
$snmpget = "/usr/bin/snmpget";

sub main() {

	&parse_args();

	# Define the array following the MIB specification:
	@statesName = ( "Unknow", "Other", "Unknow", "OK"  , "Non Critical Upper"  , "Critical Upper", "Non Recoverable Upper", "Non Critical Lower", "Critical Lower", "Non Recoverable Lower", "Failed" );
	`$snmpget -v1 -c $community $host .1.3.6.1.2.1.1.1.0 >/dev/null 2>&1`;
        if( $? != 0 ) {
                print "CRITICAL - SNMP nao habilitado\n";
                exit(2);
        }

	`$snmpget -v1 -c $community $host .1.3.6.1.4.1.674.10892.1.700.10.1.7.1.1 >/dev/null 2>&1`;
	if( $? != 0 ) {
                print "CRITICAL - Impossivel encontrar OIDs OpenManager\n";
                exit(2);
        }


        # puplate the temp array with disk status
        @tempFanState = `$snmpwalk -v1 -c $community $host .1.3.6.1.4.1.674.10892.1.700.12.1.5.1`;
        # lets parse the result
        foreach( @tempFanState ) {
                push( @arrayFanState, $1 ) if( m/^.*INTEGER: (\d)$/);
        }

        @tempFanName = `$snmpwalk -v1 -c $community $host .1.3.6.1.4.1.674.10892.1.700.12.1.8.1`;
        # lets parse the result
        foreach( @tempFanName ) {
		if( m/^.*STRING: (.*)$/) {
			$tmp = $1;
			$tmp =~ s/\"//g;
                	push( @arrayFanName, $tmp );
		}
        }

        @tempFanRPM = `$snmpwalk -v1 -c $community $host .1.3.6.1.4.1.674.10892.1.700.12.1.6.1`;
        # lets parse the result
        foreach( @tempFanRPM ) {
                push( @arrayFanRPM, $1 ) if( m/^.*INTEGER: (\d*)$/);
        }

	$critical = 0;
	$i=0;	
	foreach $state (@arrayFanState) {
		if($state != 3) {
			$critical = 1;
		}
		$i++
	}
	$perfparse = '';
	print "Status dos Coolers -> ";
	for($i=0; $i<=$#arrayFanState; $i++) {
		if ($arrayFanName[$i] =~ /$pattern/i) {
			print " $arrayFanName[$i]($arrayFanRPM[$i]RPM) = $statesName[$arrayFanState[$i]]   "; 
			$perfparse .= "'" . $arrayFanName[$i] . "'" . "=$arrayFanRPM[$i]RPM;;;; ";
		}
	}

	print "|$perfparse";
	#foreach $state (@arrayDiskState) {
	#	print " Disk$i = $statesName[$state]   ";
	#	$i++;
	#}
	print "\n";	

	if($critical == 1) {
		return 2;	
	}else{
		return 0;
	}


}

sub parse_args() {

	if ($#ARGV<2) {

		print "Usage:\n\t$0 [host] [community] [pattern]\n\n";
		print "\tEx: $0 192.168.10.1 public 'MOD 1'\n";
		exit(1);

	}

}

exit(&main());
