|
@@ -0,0 +1,258 @@
+#!/usr/bin/php
+<?php
+// Author: Carsten Schoene
+// $LastChangedDate: 2015-02-01 18:52:22 +0100 (So, 01. Feb 2015) $
+// Rev: $Rev: 9776 $
+// required arguments
+// $1 = Host / IP
+// $2 = read community string
+
+//$grad = iconv("UTF-8","ISO-8859-15","°");
+$grad = "°";
+define('MYNAME',"check_snmp_brocade_health");
+define('OK',0);
+define('WARNING',1);
+define('CRITICAL',2);
+define('UNKNOWN',3);
+define('DEPENDENT',4);
+
+openlog(MYNAME,LOG_PID | LOG_ODELAY,LOG_MAIL);
+
+if ( ! extension_loaded("snmp") ) {
+ syslog(LOG_ERR,"snmp extension not loaded!");
+ exit;
+}
+
+ini_set("display_errors","on");
+// get working directory
+define('BASE',dirname(__FILE__));
+
+$cmdlineopt = getopt("H:C:");
+if (empty($cmdlineopt)) {
+ echo "Usage: " . MYNAME . " -H [<hostname> | <ipaddress>] -C [<community>]\n";
+ echo "\t -H\t Hostname or IP address (default: localhost)\n";
+ echo "\t -C\t Community (default: public)\n";
+ exit(1);
+}
+if ( isset($cmdlineopt['H']) ) {
+ $hostname = $cmdlineopt['H'];
+} else {
+ $hostname = "localhost";
+}
+
+if ( isset($cmdlineopt['C']) ) {
+ $community = $cmdlineopt['C'];
+} else {
+ $community = "public";
+}
+
+
+// get product type -> .1.3.6.1.4.1.1991.1.1.1.1.26.0
+/*
+0 - invalid
+1 - mg8
+2 - ni40G
+3 - imr
+4 - biRx800
+5 - niXmr16000
+6 - biRx400
+7 - niXmr8000
+8 - biRx200
+9 - niXmr4000
+10 - niMlx16
+11 - niMlx8
+12 - niMlx4
+13 - niMlx32
+14 - niXmr32000
+15 - biRx32
+16 - niCES2000Series
+17 - niCER2000Series
+18 - brMlxE4
+19 - brMlxE8
+20 - brMlxE16
+21 - brMlxE32
+50 - biNI2
+66 - biBB
+77 - biM4
+78 - biNI
+83 - biSLB
+87 - biWG
+*/
+$prod = @snmpget($hostname,$community,".1.3.6.1.4.1.1991.1.1.1.1.26.0");
+if (empty($prod) ) {
+ print "No brocade device found\n";
+ exit(UNKNOWN);
+} else {
+ $prodarr = explode(": ",$prod);
+ $product_id = $prodarr[1];
+}
+switch ($product_id) {
+ case "18":
+ // temperature
+ $chassis = "";
+ $chassistemp = $chassis . "";
+ $chassiswarntemp = $chassis . "";
+ $chassisshutdowntemp = $chassis . "";
+ $chassistempfactor = "0.5";
+
+ // power supply
+ $psu = ".1.3.6.1.4.1.1991.1.1.1.2.1.1";
+ $psuidx = $psu . ".1";
+ $psudscr = $psu . ".2";
+ $psustat = $psu . ".3";
+ $psustates = array(1 => "other", 2 => "normal", 3 => "failure");
+
+ // fans
+ $fan = ".1.3.6.1.4.1.1991.1.1.1.3.1.1";
+ $fanidx = $fan . ".1";
+ $fandscr = $fan . ".2";
+ $fanstat = $fan . ".3";
+ $fanstates = array(1 => "other", 2 => "normal", 3 => "failure");
+ break;
+ case "66":
+ // temperature
+ $chassis = ".1.3.6.1.4.1.1991.1.1.1.1";
+ $chassistemp = $chassis . ".18";
+ $chassiswarntemp = $chassis . ".19";
+ $chassisshutdowntemp = $chassis . ".20";
+ $chassistempfactor = "0.5";
+
+ // power supply
+ $psu = ".1.3.6.1.4.1.1991.1.1.1.2.1.1";
+ $psuidx = $psu . ".1";
+ $psudscr = $psu . ".2";
+ $psustat = $psu . ".3";
+ $psustates = array(1 => "other", 2 => "normal", 3 => "failure");
+
+ // fans
+ $fan = ".1.3.6.1.4.1.1991.1.1.1.3.1.1";
+ $fanidx = $fan . ".1";
+ $fandscr = $fan . ".2";
+ $fanstat = $fan . ".3";
+ $fanstates = array(1 => "other", 2 => "normal", 3 => "failure");
+ break;
+ default:
+ exit();
+}
+
+
+// check temperature
+if ( !empty($chassistemp) ) {
+ $curtemp = @snmpget($hostname,$community,$chassistemp.".0");
+}
+$output = $tempoutput = $fanoutput = $psuoutput = $tempstate = $psustate = $fanstate = "";
+
+if (!empty($curtemp)) {
+ $curtemparr = explode(": ",$curtemp);
+ $curtemp = $curtemparr[1];
+ $warntemp = @snmpget($hostname,$community,$chassiswarntemp.".0");
+ $warntemparr = explode(": ",$warntemp);
+ $warntemp = $warntemparr[1];
+ $shuttemp = @snmpget($hostname,$community,$chassisshutdowntemp.".0");
+ $shuttemparr = explode(": ",$shuttemp);
+ $shuttemp = $shuttemparr[1];
+ if ( is_numeric($chassistempfactor) ) {
+ $curtemp = $curtemp * $chassistempfactor;
+ $warntemp = $warntemp * $chassistempfactor;
+ $shuttemp = $shuttemp * $chassistempfactor;
+ }
+ $crittemp = $shuttemp - 2;
+ $lowcrittemp = $shuttemp - 10;
+ if ( $curtemp < $crittemp && $curtemp > $warntemp ) {
+ $tempstate = CRITICAL;
+ $tempoutput = "Chassis Temperature " . $curtemp . $grad."C is near shutdown level";
+ }elseif ( $curtemp < $lowcrittemp && $curtemp > $warntemp ) {
+ $tempstate = WARNGING;
+ $tempoutput = "Chassis Temperature " . $curtemp . $grad. "C has reached warnging level (".$warntemp.$grad."C)";
+ }elseif ( $curtemp < $warntemp ) {
+ $tempstate = OK;
+ $tempoutput = "Chassis Temperature " . $curtemp . $grad. "C is normal";
+ } else {
+ $tempstate = UNKNOWN;
+ $tempoutput = "Chassis Temperature is unknown";
+ }
+} else {
+ $tempstate = OK;
+ $tempoutput = "No temprature sensor found";
+}
+
+
+// check power supply
+if ( !empty($psuidx) ) {
+ $psusensorCount = count(@snmpwalk($hostname,$community,$psuidx));
+} else {
+ $psusensorCount = 0;
+ $psustate = OK;
+ $psuoutput = "";
+}
+if ( $psusensorCount > 0 ) {
+ foreach ( snmpwalk($hostname,$community,$psuidx) as $psusensor ) {
+ $psusensorarr = explode(": ",$psusensor);
+ $a = $psusensorarr[1];
+ $psuNameline = @snmpget($hostname,$community,$psudscr . ".". $a);
+ $psuNameArr = explode("\"", $psuNameline);
+ $psuStateline = @snmpget($hostname,$community,$psustat . ".". $a);
+ $psuStatArr = explode(": ",$psuStateline);
+ $psustatus = $psustates[$psuStatArr[1]];
+ if ( $a == 1 ) {
+ $psuoutput = "PSU${a} => $psustatus";
+ } else {
|