summaryrefslogtreecommitdiffstats
path: root/lib/Smokeping/probes/EchoPingPlugin.pm
blob: 36ca35998ad9a8739219783279fb05b540856e36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package Smokeping::probes::EchoPingPlugin;

=head1 301 Moved Permanently

This is a Smokeping probe module. Please use the command 

C<smokeping -man Smokeping::probes::EchoPingPlugin>

to view the documentation or the command

C<smokeping -makepod Smokeping::probes::EchoPingPlugin>

to generate the POD document.

=cut

sub pod_hash {
	return {
		name => <<DOC,
Smokeping::probes::EchoPingPlugin - a basis for using echoping(1) plugins as probes for SmokePing
DOC
		overview => <<DOC,
Measures roundtrip times for SmokePing with an echoping(1) plugin. The plugins
currently shipped with echoping are implemented as separate probes based
on this class, but the class can also be used directly.
DOC
		authors => <<'DOC',
Niko Tyni <ntyni@iki.fi>
DOC
        notes => <<'DOC',
The I<fill>, I<size> and I<udp> EchoPing variables are not valid by default for EchoPingPlugin -derived probes.
DOC
		see_also => <<DOC,
L<Smokeping::probes::EchoPing>
DOC
	}
}

use strict;
use base qw(Smokeping::probes::EchoPing);
use Carp;

sub _init {
    my $self = shift;
    # plugins don't generally fit with filling, size or udp.
    my $arghashref = $self->features;
    delete $arghashref->{size};
    delete $arghashref->{fill};
    delete $arghashref->{udp};
}


sub proto_args {
	my $self = shift;
	my $target = shift;
	my $plugin = $target->{vars}{plugin};
	return ("-m", $plugin);
}

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;
	$self->SUPER::test_usage;
	return;
}

sub ProbeDesc($) {
	return "Pings using an echoping(1) plugin";
}

sub targetvars {
	my $class = shift;
	my $h = $class->SUPER::targetvars;
	delete $h->{udp};
	delete $h->{fill};
	delete $h->{size};
    return $class->_makevars($h, {
    });
}

1;