#!/usr/bin/perl

# Parsing Nagios3 status.dat and outputs as XML.
# Copy script to: /usr/lib/cgi-bin/nagios3

use strict;
use CGI;
use XML::Writer;	# libxml-writer-perl
use Nagios::StatusLog;	# libnagios-object-perl

my $cgi = CGI->new();
if (defined($cgi->request_method)) {
	print $cgi->header('text/xml');
}

my $log = Nagios::StatusLog->new(Filename => '/var/cache/nagios3/status.dat', Version => 3.0);
my $writer = XML::Writer->new();
$writer->xmlDecl();
$writer->startTag('nagios', 'version' => $log->info->version, 'created' => $log->info->created);
$writer->startTag('hosts');
foreach my $hostname ($log->list_hosts()) {
	$writer->startTag('host');
	my $host = $log->host($hostname);
	foreach my $tag ($host->list_tags()) {
		$writer->startTag($tag);
		$writer->characters($host->{$tag});
		$writer->endTag($tag);
	}
	$writer->startTag('services');
	foreach my $servicename ($log->list_services_on_host($hostname)) {
		$writer->startTag('service');
		my $service = $log->service($hostname, $servicename);
		foreach my $tag ($service->list_tags()) {
			$writer->startTag($tag);
			$writer->characters($service->{$tag});
			$writer->endTag($tag);
		}
		$writer->endTag('service');
	}
	$writer->endTag('services');
	$writer->endTag('host');
}
$writer->endTag('hosts');
$writer->endTag('nagios');