144 lines
3.5 KiB
Perl
Executable File
144 lines
3.5 KiB
Perl
Executable File
#!/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;
|
|
}
|