#!/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; }