diff options
Diffstat (limited to 'lib/Smokeping/probes')
-rw-r--r-- | lib/Smokeping/probes/EchoPing.pm | 4 | ||||
-rw-r--r-- | lib/Smokeping/probes/EchoPingDNS.pm | 104 | ||||
-rw-r--r-- | lib/Smokeping/probes/EchoPingPlugin.pm | 22 |
3 files changed, 121 insertions, 9 deletions
diff --git a/lib/Smokeping/probes/EchoPing.pm b/lib/Smokeping/probes/EchoPing.pm index 65bac3e..305e3ca 100644 --- a/lib/Smokeping/probes/EchoPing.pm +++ b/lib/Smokeping/probes/EchoPing.pm @@ -112,7 +112,7 @@ sub make_host { return $target->{addr}; } -sub make_post_args { +sub post_args { return (); } @@ -181,7 +181,7 @@ sub make_commandline { $count |= $self->pings($target); my @args = $self->make_args($target); - my @post_args = $self->make_post_args($target); + my @post_args = $self->post_args($target); my $host = $self->make_host($target); push @args, $self->proto_args($target); push @args, $self->count_args($count); diff --git a/lib/Smokeping/probes/EchoPingDNS.pm b/lib/Smokeping/probes/EchoPingDNS.pm new file mode 100644 index 0000000..dc22f17 --- /dev/null +++ b/lib/Smokeping/probes/EchoPingDNS.pm @@ -0,0 +1,104 @@ +package Smokeping::probes::EchoPingDNS; + +=head1 301 Moved Permanently + +This is a Smokeping probe module. Please use the command + +C<smokeping -man Smokeping::probes::EchoPingDNS> + +to view the documentation or the command + +C<smokeping -makepod Smokeping::probes::EchoPingDNS> + +to generate the POD document. + +=cut + +sub pod_hash { + return { + name => <<DOC, +Smokeping::probes::EchoPingDNS - an echoping(1) probe for SmokePing +DOC + overview => <<DOC, +Measures DNS roundtrip times for SmokePing with the echoping_dns plugin. +DOC + authors => <<'DOC', +Niko Tyni <ntyni@iki.fi> +DOC + notes => <<'DOC', +The I<fill>, I<size> and I<udp> EchoPing variables are not valid. + +Plugins, including echoping_dns, are available starting with echoping version 6. +DOC + see_also => <<DOC, +L<Smokeping::probes::EchoPing>, +L<Smokeping::probes::EchoPingPlugin> +DOC + } +} + +use strict; +use base qw(Smokeping::probes::EchoPingPlugin); +use Carp; + +sub plugin_args { + my $self = shift; + my $target = shift; + my @args = ("-t", $target->{vars}{dns_type}); + my $tcp = $target->{vars}{dns_tcp}; + if ($tcp and $tcp ne "no") { + push @args, "--tcp"; + } + push @args, $target->{vars}{dns_request}; + return @args; +} + +sub test_usage { + my $self = shift; + my $bin = $self->{properties}{binary}; + # side effect: this sleeps for a random time between 0 and 1 seconds + # is there anything smarter to do? + croak("Your echoping binary doesn't support the dns plugin") + if `$bin -m dns 127.0.0.1 2>&1` =~ /(not compiled|invalid option|usage)/i; + $self->SUPER::test_usage; + return; +} + +sub ProbeDesc($) { + return "DNS pings using the echoping_dns plugin"; +} + +sub targetvars { + my $class = shift; + my $h = $class->SUPER::targetvars; + delete $h->{udp}; + delete $h->{fill}; + delete $h->{size}; + $h->{plugin}{default} = 'dns'; + return $class->_makevars($h, { + _mandatory => [ 'dns_request' ], + dns_request => { + _doc => <<DOC, +The DNS request (domain name) to be queried. +DOC + _example => 'example.org', + }, + dns_type => { + _doc => <<DOC, +The echoping_dns '-t' option: type of data requested (NS, A, SOA etc.) +DOC + _example => 'AAAA', + _default => 'A', + }, + dns_tcp => { + _doc => <<DOC, +The echoping_dns '--tcp' option: use only TCP ('virtual circuit'). +Enabled if specified with a value other than 'no' or '0'. +DOC + _example => 'yes', + }, + }, + ); +} + +1; diff --git a/lib/Smokeping/probes/EchoPingPlugin.pm b/lib/Smokeping/probes/EchoPingPlugin.pm index 69c8596..f815030 100644 --- a/lib/Smokeping/probes/EchoPingPlugin.pm +++ b/lib/Smokeping/probes/EchoPingPlugin.pm @@ -54,7 +54,14 @@ sub _init { sub post_args { my $self = shift; my $target = shift; - return $target->{vars}{pluginargs}; + return $self->plugin_args($target); +} + +# derived classes should override this +sub plugin_args { + my $self = shift; + my $target = shift; + return (); } sub proto_args { @@ -67,10 +74,9 @@ sub proto_args { sub test_usage { my $self = shift; my $bin = $self->{properties}{binary}; - # side effect: this sleeps for a random time between 0 and 1 seconds # is there anything smarter to do? - croak("Your echoping binary doesn't support plugins") - if `$bin -m random 127.0.0.1 2>&1` =~ /(not compiled|invalid option|usage)/i; + croak("Your echoping binary doesn't support plugins. At least version 6 is required.") + if `$bin -m improbable_plugin_name 127.0.0.1 2>&1` =~ /invalid option/i; $self->SUPER::test_usage; return; } @@ -86,10 +92,12 @@ sub targetvars { delete $h->{fill}; delete $h->{size}; return $class->_makevars($h, { - pluginname => { + _mandatory => [ 'plugin' ], + plugin => { _doc => <<DOC, -The name of the echoping plugin that will be used. See echoping(1) -for details. +The echoping plugin that will be used. See echoping(1) for details. +This can either be the name of the plugin or a full path to the +plugin shared object. DOC _example => "random", }, |