144 lines
3.8 KiB
Perl
Executable File
144 lines
3.8 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
use strict;
|
|
use warnings;
|
|
|
|
use lib (split /:/, q{}); # PERL5LIB
|
|
use FindBin;use lib "$FindBin::RealBin/../lib";use lib "$FindBin::RealBin/../thirdparty/lib/perl5"; # LIBDIR
|
|
|
|
use Smokeping::Info;
|
|
use Getopt::Long 2.25 qw(:config no_ignore_case);
|
|
use Pod::Usage 1.14;
|
|
|
|
'$Revision: 3879 $ ' =~ /Revision: (\S*)/;
|
|
my $Revision = $1;
|
|
|
|
sub main()
|
|
{
|
|
# parse options
|
|
my %opt = (mode=>'plain',separator=>';',format=>'%le',start=>'end-24h',end=>'now');
|
|
|
|
GetOptions(\%opt, 'help|h', 'man', 'version', 'noaction|no-action|n','no-head',
|
|
'start=s','end=s','filter=s','mode=s','separator=s','format=s') or exit(1);
|
|
if($opt{help}) { pod2usage(1) }
|
|
if($opt{man}) { pod2usage(-exitstatus => 0, -verbose => 2) }
|
|
if($opt{version}) { print "smokeinfo $Revision\n"; exit(0) }
|
|
if($opt{noaction}) { die "ERROR: don't know how to \"no-action\".\n" }
|
|
my $config = shift @ARGV;
|
|
|
|
my $si = Smokeping::Info->new($config);
|
|
my $nodes = $si->fetch_nodes(pattern=>$opt{filter},mode=>$opt{mode});
|
|
my @rows = qw(med_avg med_min med_max med_now loss_avg loss_max loss_now);
|
|
print '# ',join $opt{separator}, 'node_path',@rows if not $opt{'no-head'};
|
|
print "\n";
|
|
for my $node (@$nodes) {
|
|
my $data = $si->stat_node($node,$opt{start},$opt{end});
|
|
print join $opt{separator},$node->{path},map {defined $data->{$_} ? sprintf($opt{format},$data->{$_}) : '?'} @rows;
|
|
print "\n";
|
|
}
|
|
}
|
|
|
|
main;
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
smokeinfo - poll smokeping site for numeric information
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
B<smokeinfo> path/to/config.cfg [I<options>]
|
|
|
|
--start x rrd graph start time. (default now-24h)
|
|
|
|
--end y rrd graph end time. (default now)
|
|
|
|
--filter pattern search pattern for node selection
|
|
|
|
--mode plain (default) how to use the pattern
|
|
- plain
|
|
- recursive
|
|
- regexp
|
|
|
|
--separator ; (default)
|
|
|
|
--format %le (default)
|
|
|
|
--no-head do not print a header
|
|
|
|
--man show man-page and exit
|
|
-h, --help display this help and exit
|
|
--version output version information and exit
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
SmokeInfo is a simple frontend to the L<Smokeping::Info> module. It provides
|
|
access to numeric data stored in the rrd files.
|
|
|
|
Note that --start and --end are passed directly to rrd graph. This means
|
|
they work on the same syntax.
|
|
|
|
=head2 Examples
|
|
|
|
Get all data all nodes
|
|
|
|
smokeinfo etc/config
|
|
|
|
Only show nodes directly under /Customers
|
|
|
|
smokeinfo --filter=/Customers/ etc/config
|
|
|
|
Show all nodes under /Customers
|
|
|
|
smokeinfo --mode=recursive --filter=/Customers/ etc/config
|
|
|
|
Show all nodes with '_wlan_' in the name
|
|
|
|
smokeinfo --mode=regexp --filter=_wlan_ etc/config
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<smokeping(1)>
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright (c) 2009 by OETIKER+PARTNER AG. All rights reserved.
|
|
|
|
=head1 LICENSE
|
|
|
|
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 2 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 the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
=head1 AUTHOR
|
|
|
|
S<Tobi Oetiker E<lt>tobi@oetiker.chE<gt>>
|
|
|
|
=head1 HISTORY
|
|
|
|
2009-01-05 to Initial Version
|
|
|
|
=cut
|
|
|
|
# Emacs Configuration
|
|
#
|
|
# Local Variables:
|
|
# mode: cperl
|
|
# eval: (cperl-set-style "PerlStyle")
|
|
# mode: flyspell
|
|
# mode: flyspell-prog
|
|
# End:
|
|
#
|
|
# vi: sw=4 et
|
|
|