#!/usr/bin/env php array( 'protocol_version' => '1.0', 'method' => 'GET', 'timeout' => $timeout ) ); $context = stream_context_create($options); $printer_toner_url = "$protocol://$host/DevMgmt/ConsumableConfigDyn.xml"; $ch = curl_init(str_replace(" ","%20",$printer_toner_url)); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $xml_str = curl_exec($ch); curl_close($ch); if($xml_str === false) { $toner_info_available = false; $error_messages .= "Cannot access printer.".$messages_separator; } else { $xml_str = preg_replace("/<([a-z][a-z0-9]*)[^>:]:/si","<$1$2_",$xml_str); $xml_str = preg_replace("/<(\\/[a-z][a-z0-9]*)[^>:]:/si","<$1$2_",$xml_str); $xml=new SimpleXMLElement($xml_str); if($xml === false) { $toner_info_parseable = false; $error_messages .= "Toner info is not parseable.".$messages_separator; foreach(libxml_get_errors() as $error) { $error_messages .= $error->message.$messages_separator; } } else { try { $color_toner_level = intval($xml->ccdy_ConsumableInfo[0]->d_ConsumablePercentageLevelRemaining[0]); $black_toner_level = intval($xml->ccdy_ConsumableInfo[1]->d_ConsumablePercentageLevelRemaining[0]); } catch (Exception $e) { $toner_info_parseable = false; $error_messages .= "Toner info is not parseable.".$messages_separator; $error_messages .= $e->getMessage().$messages_separator; } } } if((!$toner_info_available) || (!$toner_info_parseable)) { echo $crit_msg.$error_messages; exit($STATE_CRIT); } else if(($color_toner_level == 0) || ($black_toner_level == 0)) { if($color_toner_level == 0) echo $warn_msg."Color toner level is reporting empty.".$messages_separator; else echo "Color toner level is $color_toner_level%.".$messages_separator; if($black_toner_level == 0) echo $warn_msg."Black toner level is reporting empty.".$messages_separator; else echo "Black toner level is $black_toner_level%.".$messages_separator; exit($STATE_WARN); } else { echo "Printer responded with OK status. Black level toner is $black_toner_level%, color level toner is $color_toner_level%."; exit($STATE_OK); }