Initial commit
This commit is contained in:
		
						commit
						5462099c20
					
				
							
								
								
									
										182
									
								
								ArduinoNagiosDisplay.pde
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								ArduinoNagiosDisplay.pde
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,182 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Arduino Nagios Display
 | 
				
			||||||
 | 
					 * Copyright Will Bradley, 2011
 | 
				
			||||||
 | 
					 * Licensed under Creative Commons Attribution-ShareAlike (CC BY-SA) license.
 | 
				
			||||||
 | 
					 *  based on Arduino SimpleClient example
 | 
				
			||||||
 | 
					 *  and shiftOutCode, Hello World example by Carlyn Maw, Tom Igoe, and David A. Mellis.
 | 
				
			||||||
 | 
					 *  (no license information found in examples)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program connects to a matching script on your Nagios server 
 | 
				
			||||||
 | 
					 *  (it must return a string like $00001000200002100000 -- see included php script.)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * YOU'LL NEED TO MODIFY the Local IP, Subnet, SSID, Security Type, 
 | 
				
			||||||
 | 
					 *  Passphrase or WEP key, and the IP, port, hostname, and URL of Nagios.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Pins 5,7,8: Latch, Clock, and Data pins for five daisy chained 595 Shift Registers
 | 
				
			||||||
 | 
					 * Pins 8, 9, 10, 11, 12, 13: Normal WiShield or Diamondback pins
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * If you want to change this script to something besides an 8x5 LED matrix, look at the magic numbers of 5, 7, and 8 in the printData function below.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Pin connected to ST_CP of 74HC595
 | 
				
			||||||
 | 
					int latchPin = 5;
 | 
				
			||||||
 | 
					//Pin connected to SH_CP of 74HC595
 | 
				
			||||||
 | 
					int clockPin = 7;
 | 
				
			||||||
 | 
					////Pin connected to DS of 74HC595
 | 
				
			||||||
 | 
					int dataPin = 6;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <WiServer.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define WIRELESS_MODE_INFRA	1
 | 
				
			||||||
 | 
					#define WIRELESS_MODE_ADHOC	2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Wireless configuration parameters ----------------------------------------
 | 
				
			||||||
 | 
					unsigned char local_ip[] = {192,168,1,3};	// IP address of WiShield
 | 
				
			||||||
 | 
					unsigned char gateway_ip[] = {192,168,1,1};	// router or gateway IP address
 | 
				
			||||||
 | 
					unsigned char subnet_mask[] = {255,255,255,0};	// subnet mask for the local network
 | 
				
			||||||
 | 
					const prog_char ssid[] PROGMEM = {"MyNetworkName"};		// max 32 bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char security_type = 0;	// 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2 -- edit WEP or WPA pass/keys below accordingly
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WPA/WPA2 passphrase
 | 
				
			||||||
 | 
					const prog_char security_passphrase[] PROGMEM = {"myWPApassword"};	// max 64 characters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WEP 128-bit keys
 | 
				
			||||||
 | 
					// sample HEX keys
 | 
				
			||||||
 | 
					prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,	// Key 0
 | 
				
			||||||
 | 
									  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Key 1
 | 
				
			||||||
 | 
									  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Key 2
 | 
				
			||||||
 | 
									  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	// Key 3
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// setup the wireless mode
 | 
				
			||||||
 | 
					// infrastructure - connect to AP
 | 
				
			||||||
 | 
					// adhoc - connect to another WiFi device
 | 
				
			||||||
 | 
					unsigned char wireless_mode = WIRELESS_MODE_INFRA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char ssid_len;
 | 
				
			||||||
 | 
					unsigned char security_passphrase_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IP Address for your Nagios server
 | 
				
			||||||
 | 
					uint8 ip[] = {192,168,1,2};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Create request object; put Nagios' port, hostname, and URL path here. See the attached nag.php script.
 | 
				
			||||||
 | 
					GETrequest getData(ip, 80, "my-nagios-server.com", "/nag.php?minimal=1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// End of configuration parameters ----------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void displayData(int numberToDisplay) {
 | 
				
			||||||
 | 
					        // take the latchPin low so 
 | 
				
			||||||
 | 
					        // the LEDs don't change while you're sending in bits:
 | 
				
			||||||
 | 
					        digitalWrite(latchPin, LOW);
 | 
				
			||||||
 | 
					        // shift out the bits:
 | 
				
			||||||
 | 
					        shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        //take the latch pin high so the LEDs will light up:
 | 
				
			||||||
 | 
					        digitalWrite(latchPin, HIGH);
 | 
				
			||||||
 | 
					        // pause before next value:
 | 
				
			||||||
 | 
					        delay(1); 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Function that prints data from the server
 | 
				
			||||||
 | 
					void printData(char* data, int len) {
 | 
				
			||||||
 | 
					  String matrix;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  digitalWrite(latchPin, LOW); // start writing to LEDs
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // Print the data returned by the server
 | 
				
			||||||
 | 
					  // Note that the data is not null-terminated, may be broken up into smaller packets, and 
 | 
				
			||||||
 | 
					  // includes the HTTP header. 
 | 
				
			||||||
 | 
					  for(int i=0;i<len;i++) {
 | 
				
			||||||
 | 
					    if(data[i] == '$')
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      for(int rows=0;rows<5;rows++){
 | 
				
			||||||
 | 
					        int rowData = 0;
 | 
				
			||||||
 | 
					        for(int cols=0;cols<8;cols++){
 | 
				
			||||||
 | 
					          i++;
 | 
				
			||||||
 | 
					          char thisData = data[i];
 | 
				
			||||||
 | 
					          // a 0 in Nagios means the LED should be on
 | 
				
			||||||
 | 
					          if(thisData == '0') {
 | 
				
			||||||
 | 
					            // the absolute value of cols-7 is used so binary 10000000 shows up as 128 instead of 1 (left light on, not right)
 | 
				
			||||||
 | 
					            rowData += (1<<abs(cols-7));  
 | 
				
			||||||
 | 
					            Serial.print((1<<abs(cols-7)));
 | 
				
			||||||
 | 
					            Serial.print("+");
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          if(thisData == '1') {
 | 
				
			||||||
 | 
					            // any other value means the LED should be off
 | 
				
			||||||
 | 
					            Serial.print("0");
 | 
				
			||||||
 | 
					            Serial.print("+");
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          if(thisData == '2') {
 | 
				
			||||||
 | 
					            Serial.print("0"); 
 | 
				
			||||||
 | 
					            Serial.print("+");
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          matrix += thisData;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        shiftOut(dataPin, clockPin, MSBFIRST, rowData);  // write to LEDs 
 | 
				
			||||||
 | 
					        Serial.print("=");
 | 
				
			||||||
 | 
					        Serial.println(rowData);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      Serial.println('*');
 | 
				
			||||||
 | 
					      Serial.println(matrix);
 | 
				
			||||||
 | 
					      digitalWrite(latchPin, HIGH);  // stop writing to LEDs
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void setup() {
 | 
				
			||||||
 | 
					    // Initialize WiServer (we'll pass NULL for the page serving function since we don't need to serve web pages) 
 | 
				
			||||||
 | 
					  WiServer.init(NULL);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // Enable Serial output and ask WiServer to generate log messages (optional)
 | 
				
			||||||
 | 
					  Serial.begin(57600);
 | 
				
			||||||
 | 
					  WiServer.enableVerboseMode(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Have the processData function called when data is returned by the server
 | 
				
			||||||
 | 
					  getData.setReturnFunc(printData);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //set pins to output so you can control the shift register
 | 
				
			||||||
 | 
					  pinMode(latchPin, OUTPUT);
 | 
				
			||||||
 | 
					  pinMode(clockPin, OUTPUT);
 | 
				
			||||||
 | 
					  pinMode(dataPin, OUTPUT);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // flash the display and clear everything upon startup
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  delay(100);
 | 
				
			||||||
 | 
					  displayData(255);
 | 
				
			||||||
 | 
					  displayData(255);
 | 
				
			||||||
 | 
					  displayData(255);
 | 
				
			||||||
 | 
					  displayData(255);
 | 
				
			||||||
 | 
					  displayData(255);
 | 
				
			||||||
 | 
					  delay(100);  
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					  displayData(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Time (in millis) when the data should be retrieved 
 | 
				
			||||||
 | 
					long updateTime = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void loop(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Check if it's time to get an update
 | 
				
			||||||
 | 
					  if (millis() >= updateTime) {
 | 
				
			||||||
 | 
					    getData.submit();    
 | 
				
			||||||
 | 
					    // Get an update every 30 seconds
 | 
				
			||||||
 | 
					    updateTime += 1000 * 30;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // Run WiServer
 | 
				
			||||||
 | 
					  WiServer.server_task();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  delay(10);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										418
									
								
								nag.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										418
									
								
								nag.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,418 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					// nag.php by Will Bradley, www.zyphon.com/arduino-nagios
 | 
				
			||||||
 | 
					// Script to parse Nagios status.dat and present it in simplified HTML.
 | 
				
			||||||
 | 
					// usage: nag.php for human view, nag.php?minimal=1 for computer view.
 | 
				
			||||||
 | 
					// 
 | 
				
			||||||
 | 
					// Based on statusXML.php by Jason Antman
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// +----------------------------------------------------------------------+
 | 
				
			||||||
 | 
					// | PHP EMS Tools      http://www.php-ems-tools.com                      |
 | 
				
			||||||
 | 
					// +----------------------------------------------------------------------+
 | 
				
			||||||
 | 
					// | Copyright (c) 2006, 2007 Jason Antman.                               |
 | 
				
			||||||
 | 
					// |                                                                      |
 | 
				
			||||||
 | 
					// | This program is free software; you can redistribute it and/or modify |
 | 
				
			||||||
 | 
					// | it under the terms of the GNU General Public License as published by |
 | 
				
			||||||
 | 
					// | the Free Software Foundation; either version 3 of the License, or    |
 | 
				
			||||||
 | 
					// | (at your option) any later version.                                  |
 | 
				
			||||||
 | 
					// |                                                                      |
 | 
				
			||||||
 | 
					// | This program is distributed in the hope that it will be useful,      |
 | 
				
			||||||
 | 
					// | but WITHOUT ANY WARRANTY; without even the implied warranty of       |
 | 
				
			||||||
 | 
					// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        |
 | 
				
			||||||
 | 
					// | GNU General Public License for more details.                         |
 | 
				
			||||||
 | 
					// |                                                                      |
 | 
				
			||||||
 | 
					// | You should have received a copy of the GNU General Public License    |
 | 
				
			||||||
 | 
					// | along with this program; if not, write to:                           |
 | 
				
			||||||
 | 
					// |                                                                      |
 | 
				
			||||||
 | 
					// | Free Software Foundation, Inc.                                       |
 | 
				
			||||||
 | 
					// | 59 Temple Place - Suite 330                                          |
 | 
				
			||||||
 | 
					// | Boston, MA 02111-1307, USA.                                          |
 | 
				
			||||||
 | 
					// +----------------------------------------------------------------------+
 | 
				
			||||||
 | 
					// | Authors: Jason Antman <jason@jasonantman.com>                        |
 | 
				
			||||||
 | 
					// +----------------------------------------------------------------------+
 | 
				
			||||||
 | 
					//      $Id: nag.php,v 1.0 2011/12/11 03:76:14 wbradley Exp $
 | 
				
			||||||
 | 
					//      $Source: ArduinoNagiosDisplay/nag.php,v $
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// change the statusFile to the location of status.dat on your Nagios system
 | 
				
			||||||
 | 
					$statusFile = "/var/cache/nagios3/status.dat";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$nag_version = getFileVersion($statusFile); // returns integer 2 or 3
 | 
				
			||||||
 | 
					$created_ts = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$debug = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if($nag_version == 3)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    $data = getData3($statusFile); // returns an array
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    $data = getData2($statusFile); // returns an array
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$hosts = $data['hosts'];
 | 
				
			||||||
 | 
					$services = $data['services'];
 | 
				
			||||||
 | 
					$program = "";
 | 
				
			||||||
 | 
					if(array_key_exists("program", $data))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    $program = $data['program'];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo outputHTML($hosts, $services, $program);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function outputHTML($hosts, $services, $program)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					if($_GET["minimal"] == "1") {
 | 
				
			||||||
 | 
					  $minimal = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					$ret = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // begin outputting XML
 | 
				
			||||||
 | 
					    //header("Content-type: text/xml");
 | 
				
			||||||
 | 
					    if($minimal){ 
 | 
				
			||||||
 | 
					        $ret .= "$";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					    	$ret .= "<html>"."\n";
 | 
				
			||||||
 | 
					    	$ret .= '<head><style type="text/css">body {font:15px arial,sans-serif; } dt { font-weight: bold; float: left; margin-right: 1em; }</style></head>'."\n";
 | 
				
			||||||
 | 
					    	$ret .= "<body>"."\n";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // program status
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    if($program != "")
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						$ret .= '<programStatus>'."\n";
 | 
				
			||||||
 | 
						foreach($program as $key => $val)
 | 
				
			||||||
 | 
						  {
 | 
				
			||||||
 | 
						    $key = xmlname($key);
 | 
				
			||||||
 | 
						    $val = xmlstring($val);
 | 
				
			||||||
 | 
						    $ret .= '      <'.$key.'>'.$val.'</'.$key.'>'."\n";
 | 
				
			||||||
 | 
						  }
 | 
				
			||||||
 | 
						$ret .= '</programStatus>'."\n";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					    // hosts
 | 
				
			||||||
 | 
					    foreach($hosts as $hostName => $hostArray)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
						if($minimal) {
 | 
				
			||||||
 | 
						  $ret .= $hostArray['current_state'];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
						  $ret .= "<dt>".$hostArray['host_name']."</dt>";
 | 
				
			||||||
 | 
						  $ret .= "<dd>".$hostArray['current_state']."</dd>";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
						$current_state = $hostArray['current_state'];
 | 
				
			||||||
 | 
						$ret .= '   <host>'."\n";
 | 
				
			||||||
 | 
						foreach($hostArray as $key => $val)
 | 
				
			||||||
 | 
						  {
 | 
				
			||||||
 | 
						    $key = xmlname($key);
 | 
				
			||||||
 | 
						    $val = xmlstring($val);
 | 
				
			||||||
 | 
						    $ret .= '      <'.$key.'>'.$val.'</'.$key.'>'."\n";
 | 
				
			||||||
 | 
						  }
 | 
				
			||||||
 | 
						$ret .= '   </host>'."\n";
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // loop through the services
 | 
				
			||||||
 | 
					    foreach ($services as $hostName => $service)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						foreach ($service as $serviceDesc => $serviceArray)
 | 
				
			||||||
 | 
						  {
 | 
				
			||||||
 | 
						    if($minimal) {
 | 
				
			||||||
 | 
						      $ret .= $serviceArray['current_state'];
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    else {
 | 
				
			||||||
 | 
						      $ret .= "<dt>".$serviceArray['host_name']." ".$serviceArray['service_description']."</dt>";
 | 
				
			||||||
 | 
						      $ret .= "<dd>".$serviceArray['current_state']."</dd>";
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						  }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(!$minimal){
 | 
				
			||||||
 | 
						$ret .= "</body></html>";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// replace reserved characters in key for name
 | 
				
			||||||
 | 
					function xmlname($s)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  $s = str_replace("<", "<", $s);
 | 
				
			||||||
 | 
					  $s = str_replace(">", ">", $s);
 | 
				
			||||||
 | 
					  $s = str_replace("&", "&", $s);
 | 
				
			||||||
 | 
					  return $s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function xmlstring($s)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  $s = str_replace("<", "<", $s);
 | 
				
			||||||
 | 
					  $s = str_replace(">", ">", $s);
 | 
				
			||||||
 | 
					  $s = str_replace("&", "&", $s);
 | 
				
			||||||
 | 
					  return $s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// figure out what version the file is
 | 
				
			||||||
 | 
					function getFileVersion($statusFile)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  global $created_ts;
 | 
				
			||||||
 | 
					  $version = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  $fh = fopen($statusFile, 'r');
 | 
				
			||||||
 | 
					  $inInfo = false;
 | 
				
			||||||
 | 
					  while($line = fgets($fh))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if(trim($line) == "info {")
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  $inInfo = true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      elseif(trim($line) == "}")
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  $inInfo = false;
 | 
				
			||||||
 | 
						  break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if($inInfo)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						  $vals = explode("=", $line);
 | 
				
			||||||
 | 
						  if(trim($vals[0]) == "created")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      $created = $vals[1];
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						  elseif(trim($vals[0]) == "version")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      if(substr($vals[1], 0, 1) == "3")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							  $version = 3;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  return $version;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// parse nagios2 status.dat
 | 
				
			||||||
 | 
					function getData2($statusFile)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // the keys to get from host status:
 | 
				
			||||||
 | 
					    $host_keys = array('host_name', 'has_been_checked', 'check_execution_time', 'check_latency', 'check_type', 'current_state', 'current_attempt', 'state_type', 'last_state_change', 'last_time_up', 'last_time_down', 'last_time_unreachable', 'last_notification', 'next_notification', 'no_more_notifications', 'current_notification_number', 'notifications_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'active_checks_enabled', 'passive_checks_enabled', 'last_update');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // keys to get from service status:
 | 
				
			||||||
 | 
					    $service_keys = array('host_name', 'service_description', 'has_been_checked', 'check_execution_time', 'check_latency', 'current_state', 'state_type', 'last_state_change', 'last_time_ok', 'last_time_warning', 'last_time_unknown', 'last_time_critical', 'plugin_output', 'last_check', 'notifications_enabled', 'active_checks_enabled', 'passive_checks_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'last_update', 'is_flapping');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # open the file
 | 
				
			||||||
 | 
					    $fh = fopen($statusFile, 'r');
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # variables to keep state
 | 
				
			||||||
 | 
					    $inSection = false;
 | 
				
			||||||
 | 
					    $sectionType = "";
 | 
				
			||||||
 | 
					    $lineNum = 0;
 | 
				
			||||||
 | 
					    $sectionData = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $hostStatus = array();
 | 
				
			||||||
 | 
					    $serviceStatus = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #variables for total hosts and services
 | 
				
			||||||
 | 
					    $typeTotals = array();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # loop through the file
 | 
				
			||||||
 | 
					    while($line = fgets($fh))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
						$lineNum++; // increment counter of line number, mainly for debugging
 | 
				
			||||||
 | 
						$line = trim($line); // strip whitespace
 | 
				
			||||||
 | 
						if($line == ""){ continue;} // ignore blank line
 | 
				
			||||||
 | 
						if(substr($line, 0, 1) == "#"){	continue;} // ignore comment
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// ok, now we need to deal with the sections
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if(! $inSection)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    // we're not currently in a section, but are looking to start one
 | 
				
			||||||
 | 
						    if(strstr($line, " ") && (substr($line, -1) == "{")) // space and ending with {, so it's a section header
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$sectionType = substr($line, 0, strpos($line, " ")); // first word on line is type
 | 
				
			||||||
 | 
							$inSection = true;
 | 
				
			||||||
 | 
							// we're now in a section
 | 
				
			||||||
 | 
							$sectionData = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// increment the counter for this sectionType
 | 
				
			||||||
 | 
							if(isset($typeTotals[$sectionType])){$typeTotals[$sectionType]=$typeTotals[$sectionType]+1;}else{$typeTotals[$sectionType]=1;}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
						if($inSection && $line == "}") // closing a section
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    if($sectionType == "service")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$serviceStatus[$sectionData['host_name']][$sectionData['service_description']] = $sectionData;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    if($sectionType == "host")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$hostStatus[$sectionData["host_name"]] = $sectionData;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    $inSection = false;
 | 
				
			||||||
 | 
						    $sectionType = "";
 | 
				
			||||||
 | 
						    continue;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    // we're currently in a section, and this line is part of it
 | 
				
			||||||
 | 
						    $lineKey = substr($line, 0, strpos($line, "="));
 | 
				
			||||||
 | 
						    $lineVal = substr($line, strpos($line, "=")+1);
 | 
				
			||||||
 | 
						    
 | 
				
			||||||
 | 
						    // add to the array as appropriate
 | 
				
			||||||
 | 
						    if($sectionType == "service")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							if(in_array($lineKey, $service_keys))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							    $sectionData[$lineKey] = $lineVal;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    elseif($sectionType == "host")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							if(in_array($lineKey, $host_keys))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
							    $sectionData[$lineKey] = $lineVal;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    // else continue on, ignore this section, don't save anything
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    fclose($fh);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    $retArray = array("hosts" => $hostStatus, "services" => $serviceStatus);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return $retArray;    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// parse nagios3 status.dat
 | 
				
			||||||
 | 
					function getData3($statusFile)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  global $debug;
 | 
				
			||||||
 | 
					    // the keys to get from host status:
 | 
				
			||||||
 | 
					  $host_keys = array('host_name', 'modified_attributes', 'check_command', 'check_period', 'notification_period', 'check_interval', 'retry_interval', 'event_handler', 'has_been_checked', 'should_be_scheduled', 'check_execution_time', 'check_latency', 'check_type', 'current_state', 'last_hard_state', 'last_event_id', 'current_event_id', 'current_problem_id', 'last_problem_id', 'plugin_output', 'long_plugin_output', 'performance_data', 'last_check', 'next_check', 'check_options', 'current_attempt', 'max_attempts', 'state_type', 'last_state_change', 'last_hard_state_change', 'last_time_up', 'last_time_down', 'last_time_unreachable', 'last_notification', 'next_notification', 'no_more_notifications', 'current_notification_number', 'current_notification_id', 'notifications_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'flap_detection_enabled', 'failure_prediction_enabled', 'process_performance_data', 'obsess_over_host', 'last_update', 'is_flapping', 'percent_state_change', 'scheduled_downtime_depth');
 | 
				
			||||||
 | 
					  // keys to get from service status:
 | 
				
			||||||
 | 
					  $service_keys = array('host_name', 'service_description', 'modified_attributes', 'check_command', 'check_period', 'notification_period', 'check_interval', 'retry_interval', 'event_handler', 'has_been_checked', 'should_be_scheduled', 'check_execution_time', 'check_latency', 'check_type', 'current_state', 'last_hard_state', 'last_event_id', 'current_event_id', 'current_problem_id', 'last_problem_id', 'current_attempt', 'max_attempts', 'state_type', 'last_state_change', 'last_hard_state_change', 'last_time_ok', 'last_time_warning', 'last_time_unknown', 'last_time_critical', 'plugin_output', 'long_plugin_output', 'performance_data', 'last_check', 'next_check', 'check_options', 'current_notification_number', 'current_notification_id', 'last_notification', 'next_notification', 'no_more_notifications', 'notifications_enabled', 'active_checks_enabled', 'passive_checks_enabled', 'event_handler_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'flap_detection_enabled', 'failure_prediction_enabled', 'process_performance_data', 'obsess_over_service', 'last_update', 'is_flapping', 'percent_state_change', 'scheduled_downtime_depth');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # open the file
 | 
				
			||||||
 | 
					    $fh = fopen($statusFile, 'r');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # variables to keep state
 | 
				
			||||||
 | 
					    $inSection = false;
 | 
				
			||||||
 | 
					    $sectionType = "";
 | 
				
			||||||
 | 
					    $lineNum = 0;
 | 
				
			||||||
 | 
					    $sectionData = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $hostStatus = array();
 | 
				
			||||||
 | 
					    $serviceStatus = array();
 | 
				
			||||||
 | 
					    $programStatus = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #variables for total hosts and services
 | 
				
			||||||
 | 
					    $typeTotals = array();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # loop through the file
 | 
				
			||||||
 | 
					    while($line = fgets($fh))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
						$lineNum++; // increment counter of line number, mainly for debugging
 | 
				
			||||||
 | 
						$line = trim($line); // strip whitespace
 | 
				
			||||||
 | 
						if($line == ""){ continue;} // ignore blank line
 | 
				
			||||||
 | 
						if(substr($line, 0, 1) == "#"){	continue;} // ignore comment
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// ok, now we need to deal with the sections
 | 
				
			||||||
 | 
						if(! $inSection)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    // we're not currently in a section, but are looking to start one
 | 
				
			||||||
 | 
						  if(substr($line, strlen($line)-1, 1) == "{") // space and ending with {, so it's a section header
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$sectionType = substr($line, 0, strpos($line, " ")); // first word on line is type
 | 
				
			||||||
 | 
							$inSection = true;
 | 
				
			||||||
 | 
							// we're now in a section
 | 
				
			||||||
 | 
							$sectionData = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// increment the counter for this sectionType
 | 
				
			||||||
 | 
							if(isset($typeTotals[$sectionType])){$typeTotals[$sectionType]=$typeTotals[$sectionType]+1;}else{$typeTotals[$sectionType]=1;}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    	elseif($inSection && trim($line) == "}") // closing a section
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    if($sectionType == "servicestatus")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$serviceStatus[$sectionData['host_name']][$sectionData['service_description']] = $sectionData;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    elseif($sectionType == "hoststatus")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
							$hostStatus[$sectionData["host_name"]] = $sectionData;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    elseif($sectionType == "programstatus")
 | 
				
			||||||
 | 
						      {
 | 
				
			||||||
 | 
							$programStatus = $sectionData;
 | 
				
			||||||
 | 
						      }
 | 
				
			||||||
 | 
						    $inSection = false;
 | 
				
			||||||
 | 
						    $sectionType = "";
 | 
				
			||||||
 | 
						    continue;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						    // we're currently in a section, and this line is part of it
 | 
				
			||||||
 | 
						    $lineKey = substr($line, 0, strpos($line, "="));
 | 
				
			||||||
 | 
						    $lineVal = substr($line, strpos($line, "=")+1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    // add to the array as appropriate
 | 
				
			||||||
 | 
						    if($sectionType == "servicestatus" || $sectionType == "hoststatus" || $sectionType == "programstatus")
 | 
				
			||||||
 | 
						    {
 | 
				
			||||||
 | 
						      if($debug){ echo "LINE ".$lineNum.": lineKey=".$lineKey."= lineVal=".$lineVal."=\n";}
 | 
				
			||||||
 | 
						      $sectionData[$lineKey] = $lineVal;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    // else continue on, ignore this section, don't save anything
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    fclose($fh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $retArray = array("hosts" => $hostStatus, "services" => $serviceStatus, "program" => $programStatus);
 | 
				
			||||||
 | 
					    return $retArray;    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// this formats the age of a check in seconds into a nice textual description
 | 
				
			||||||
 | 
					function ageString($seconds)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						$age = "";
 | 
				
			||||||
 | 
						if($seconds > 86400)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							$days = (int)($seconds / 86400);
 | 
				
			||||||
 | 
							$seconds = $seconds - ($days * 86400);
 | 
				
			||||||
 | 
							$age .= $days." days ";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if($seconds > 3600)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							$hours = (int)($seconds / 3600);
 | 
				
			||||||
 | 
							$seconds = $seconds - ($hours * 3600);
 | 
				
			||||||
 | 
							$age .= $hours." hours ";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if($seconds > 60)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							$minutes = (int)($seconds / 60);
 | 
				
			||||||
 | 
							$seconds = $seconds - ($minutes * 60);
 | 
				
			||||||
 | 
							$age .= $minutes." minutes ";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						$age .= $seconds." seconds ";
 | 
				
			||||||
 | 
						return $age;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    // the keys to get from host status:
 | 
				
			||||||
 | 
					    $host_keys = array('host_name', 'has_been_checked', 'check_execution_time', 'check_latency', 'check_type', 'current_state', 'current_attempt', 'state_type', 'last_state_change', 'last_time_up', 'last_time_down', 'last_time_unreachable', 'last_notification', 'next_notification', 'no_more_notifications', 'current_notification_number', 'notifications_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'active_checks_enabled', 'passive_checks_enabled', 'last_update');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // keys to get from service status:
 | 
				
			||||||
 | 
					    $service_keys = array('host_name', 'service_description', 'has_been_checked', 'check_execution_time', 'check_latency', 'current_state', 'state_type', 'last_state_change', 'last_time_ok', 'last_time_warning', 'last_time_unknown', 'last_time_critical', 'plugin_output', 'last_check', 'notifications_enabled', 'active_checks_enabled', 'passive_checks_enabled', 'problem_has_been_acknowledged', 'acknowledgement_type', 'last_update', 'is_flapping');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user