#!/usr/bin/env perl
=head1 NAME
test.pl - print some information from a socket
=head1 SYNOPSIS
./test.pl [ -h ] [ -v ] <socket|server>
=head1 DESCRIPTION
this script print some information from a given livestatus socket or server
=head1 ARGUMENTS
script has the following arguments
=over 4
=item help
-h
print help and exit
=item verbose
-v
verbose output
=item socket/server
server local socket file or
server remote address of livestatus
=back
=head1 EXAMPLE
./test.pl /tmp/live.sock
=head1 AUTHOR
2009, Sven Nierlein, <nierlein@cpan.org>
=cut
use warnings;
use strict;
use Data::Dumper;
use Getopt::Long;
use Pod::Usage;
use Time::HiRes qw( gettimeofday tv_interval );
use Log::Log4perl qw(:easy);
use lib 'lib';
use lib '../lib';
use Monitoring::Livestatus;
$Data::Dumper::Sortkeys = 1;
#########################################################################
# parse and check cmd line arguments
my ($opt_h, $opt_v, @opt_f);
Getopt::Long::Configure('no_ignore_case');
if(!GetOptions (
"h" => \$opt_h,
"v" => \$opt_v,
"<>" => \&add_file,
)) {
pod2usage( { -verbose => 1, -message => 'error in options' } );
exit 3;
}
if(defined $opt_h) {
pod2usage( { -verbose => 1 } );
exit 3;
}
my $verbose = 0;
if(defined $opt_v) {
$verbose = 1;
}
if(scalar @opt_f == 0) {
pod2usage( { -verbose => 1, -message => 'socket/server is a required option' } );
exit 3;
}
#########################################################################
Log::Log4perl->easy_init($DEBUG);
my $nl = Monitoring::Livestatus->new(
peer => \@opt_f,
verbose => $opt_v,
timeout => 5,
keepalive => 1,
logger => get_logger(),
);
my $log = get_logger();
#########################################################################
my $querys = [
{ 'query' => "GET hostgroups\nColumns: members\nFilter: name = flap\nFilter: name = down\nOr: 2",
'sub' => "selectall_arrayref",
'opt' => {Slice => 1 }
},
# { 'query' => "GET comments",
# 'sub' => "selectall_arrayref",
# 'opt' => {Slice => 1 }
# },
# { 'query' => "GET downtimes",
# 'sub' => "selectall_arrayref",
# 'opt' => {Slice => 1, Sum => 1}
# },
# { 'query' => "GET log\nFilter: time > ".(time() - 600)."\nLimit: 1",
# 'sub' => "selectall_arrayref",
# 'opt' => {Slice => 1, AddPeer => 1}
# },
# { 'query' => "GET services\nFilter: contacts >= test\nFilter: host_contacts >= test\nOr: 2\nColumns: host_name description contacts host_contacts",
# 'sub' => "selectall_arrayref",
# 'opt' => {Slice => 1, AddPeer => 0}
# },
# { 'query' => "GET services\nFilter: host_name = test_host_00\nFilter: description = test_flap_02\nOr: 2\nColumns: host_name description contacts host_contacts",
# 'sub' => "selectall_arrayref",
# 'opt' => {Slice => 1, AddPeer => 0}
# },
];
for my $query (@{$querys}) {
my $sub = $query->{'sub'};
my $t0 = [gettimeofday];
my $stats = $nl->$sub($query->{'query'}, $query->{'opt'});
my $elapsed = tv_interval($t0);
print Dumper($stats);
print "Query took ".($elapsed)." seconds\n";
}
#########################################################################
sub add_file {
my $file = shift;
push @opt_f, $file;
}