#! /usr/bin/php -q
<?php
# $argc = antall argumenter som blir sendt til filen
# $argv = arguementene som blir sendt, kobles med [0-9] for hvilken variabel
# fwrite(STDOUT,"text her"); brukes istedenfor print / echo for riktig skriving til console.
# Exit Errorlevel, 0=OK, 1=Warning, 2=Critical, 3=Unknown
# Eksempel: exit(2);  <== F�r da critical status
# $_REQUEST[''] brukes for flags, Eksempel: $_REQUEST["-D"] sjekker -D flagget.

## Predefinerte OID'r:
$HP_PhyDrvStatus = ".1.3.6.1.4.1.232.3.2.5.1.1.6"; // 
$HP_PhyDrvSmartStatus = ".1.3.6.1.4.1.232.3.2.5.1.1.57"; // 

## SNMP query og output
function snmp_query($host,$community,$oid) {
	if (!$snmpcheck=@snmpget("$host","$community","$oid")) {
		fwrite(STDOUT,"Unable to get info, host down?");
		exit(3);
	} else {
		return $snmpcheck;
	}
}
## Argument Variabler
if ($argc > 1) {
        $host = $argv[1];
        $community = $argv[2];
        if (empty($community)) {
		fwrite(STDOUT,"Error: Missing Community");
                exit(3);
        }
	if (!$walk1=@snmpwalk($host, $community, $HP_PhyDrvStatus)) {
                fwrite(STDOUT,"Unable to get info, host down?\n");
                exit(3);
	} else if (!$walk2=@snmpwalk($host, $community, $HP_PhyDrvSmartStatus)) {
		fwrite(STDOUT,"Unable to get info, host down?\n");
                exit(3);
	} else {
		$i = "0";
		foreach ($walk1 as $status) {
		  $i++;
		  switch($status) {
	        	case 2:
		           $result ="OK";
		           $errorlevel1 = "0";
	        	   break;
		        case 3:
		           $result = "Failed";
	        	   $errorlevel2 = "2";
	        	   break;
		        case 4:
	         	  $result = "Failing";
		           $errorlevel3 = "1";
		           break;
	        	default:
		           $result = "unknown result";
		           $errorlevel4 = "3";
		   }
		   fwrite(STDOUT,"Disk $i Status: $result\n");
		}

		$i = "0";
		foreach ($walk2 as $status) {
		   $i++;
		   switch($status) {
		        case 2:
	        	   $result ="OK";
		           $errorlevel5 = "0";
		           break;
	        	case 3:
		           $result = "Failed";
		           $errorlevel6 = "2";
	        	   break;
		        case 4:
		           $result = "Failing";
		           $errorlevel7 = "1";
		           break;
		        default:
		           $result = "unknown result";
		           $errorlevel8 = "3";
		   }
		   fwrite(STDOUT,"Disk $i SmartStatus: $result\n");
		}
		
		if ($errorlevel2 || $errorlevel3 || $errorlevel4 || $errorlevel6 || $errorlevel7 || $errorlevel8) {
			if ($errorlevel2 || $errorlevel6) {
		                exit(2); //Critical error
		        }
		        if ($errorlevel3 || $errorlevel7) {
	        	        exit(1); //Warning Error
		        }
		        if ($errorlevel4 || $errorlevel8) {
                	exit(3); //Unknown Error
	        	}
		} else {
	        	exit(0); //Success
		}
	}
} else {
        fwrite(STDOUT,"Usage: HOSTIP  SNMP-COMMUNITY\n");
}
?>