#!/usr/bin/php 0 ) { echo " | "; foreach ( $perfdata as $name => $perf ) { $str = $name."=".$perf['value']; $str .= ";"; if ( isset ( $perf['warn'] ) ) $str .= $perf['warn']; $str .= ";"; if ( isset ( $perf['crit'] ) ) $str .= $perf['crit']; $str .= ";"; if ( isset ( $perf['min'] ) ) $str .= $perf['min']; $str .= ";"; if ( isset ( $perf['max'] ) ) $str .= $perf['max']; $str = preg_replace ( '@(;+)$@', ';', $str ); echo $str." "; } } echo "\n"; exit($return); } // Echo help if invalid number of arguments if ( $_SERVER['argc'] != 10 ) { help(); nagios_return(3,"Too few arguments"); } // Get commandline arguments $hostname = $_SERVER['argv'][1]; $type = $_SERVER['argv'][2]; $user = $_SERVER['argv'][3]; $pass = $_SERVER['argv'][4]; $sensor = $_SERVER['argv'][5]; $min_warn = $_SERVER['argv'][6]; $min_crit = $_SERVER['argv'][7]; $max_warn = $_SERVER['argv'][8]; $max_crit = $_SERVER['argv'][9]; // Unit table for sensors $units = array ( 2 => "C", 3 => "C", 40 => "hPa", 65 => "%", ); // Get XML from all4x00 if ( $type == 4500 ) { $buf = file_get_contents ( "http://".$user.":".$pass."@".$hostname."/xml/xml4000.xml" ); } else { $buf = file_get_contents ( "http://".$user.":".$pass."@".$hostname."/xml" ); } if ( !$buf ) { nagios_return ( 3, "Could not query data. Downloading XML failed." ); } // Clean up XML if ( $type == "4500" ) { $buf = str_replace ( '', '', $buf); $buf .= ''; } else { $buf = str_replace ( '
', '', $buf ); } $dom = new SimpleXMLElement ( $buf ); $dom = $dom->data; // Get values from xml $var = "t".$sensor; $value = trim($dom->$var); $var = "n".$sensor; $name = trim($dom->$var); $var = "min".$sensor; $min = trim($dom->$var); $var = "max".$sensor; $max = trim($dom->$var); $var = "s".$sensor; $type = trim($dom->$var); if ( $value == NULL ) nagios_return ( 2, "Sensor ".$sensor." does not exist" ); if ( $value == -20480 ) nagios_return ( 2, "Sensor ".$name." (".$sensor.") is not connected" ); // Check if boolean if ( $min_warn == $max_warn && $min_crit == $max_crit && $min_crit == $min_warn && ( $min_warn == 0 || $min_warn == 1 ) ) { if ( $value != $max_crit ) { nagios_return ( 2, $name." has been triggered" ); } else { nagios_return ( 0, $name ); } } $unit = $units[$type]; // Get unit from table $base_str = $name." - ".$value." ".$unit." (".$min." ".$unit."/".$max." ".$unit.")"; $perf = array ( $name => array ( "value" => $value, "min" => $min, "max" => $max )); // Check thresholds if ( $value > $max_crit ) { nagios_return ( 2, "Value is too high - ".$base_str, $perf); } else if ( $value > $max_warn ) { nagios_return ( 1, "Value is too high - ".$base_str, $perf); } if ( $value < $min_crit ) { nagios_return ( 2, "Value is too low - ".$base_str, $perf); } else if ( $value < $min_warn ) { nagios_return ( 1, "Value is too low - ".$base_str, $perf); } nagios_return ( 0, $base_str, $perf ); ?>