summaryrefslogtreecommitdiffstats
path: root/lib/Smokeping/probes/EchoPingHttp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Smokeping/probes/EchoPingHttp.pm')
-rw-r--r--lib/Smokeping/probes/EchoPingHttp.pm143
1 files changed, 143 insertions, 0 deletions
diff --git a/lib/Smokeping/probes/EchoPingHttp.pm b/lib/Smokeping/probes/EchoPingHttp.pm
new file mode 100644
index 0000000..45f9bd9
--- /dev/null
+++ b/lib/Smokeping/probes/EchoPingHttp.pm
@@ -0,0 +1,143 @@
+package Smokeping::probes::EchoPingHttp;
+
+=head1 301 Moved Permanently
+
+This is a Smokeping probe module. Please use the command
+
+C<smokeping -man Smokeping::probes::EchoPingHttp>
+
+to view the documentation or the command
+
+C<smokeping -makepod Smokeping::probes::EchoPingHttp>
+
+to generate the POD document.
+
+=cut
+
+use strict;
+use base qw(Smokeping::probes::EchoPing);
+use Carp;
+
+sub pod_hash {
+ return {
+ name => <<DOC,
+Smokeping::probes::EchoPingHttp - an echoping(1) probe for SmokePing
+DOC
+ overview => <<DOC,
+Measures HTTP roundtrip times (web servers and caches) for SmokePing.
+DOC
+ notes => <<DOC,
+The I<fill>, I<size> and I<udp> EchoPing variables are not valid for EchoPingHttp.
+DOC
+ authors => <<'DOC',
+Niko Tyni <ntyni@iki.fi>
+DOC
+ see_also => <<DOC,
+EchoPing(3pm), EchoPingHttps(3pm)
+DOC
+ }
+}
+
+sub _init {
+ my $self = shift;
+ # HTTP doesn't fit with filling or size
+ my $arghashref = $self->features;
+ delete $arghashref->{size};
+ delete $arghashref->{fill};
+}
+
+# tag the port number after the hostname
+sub make_host {
+ my $self = shift;
+ my $target = shift;
+
+ my $host = $self->SUPER::make_host($target);
+ my $port = $target->{vars}{port};
+
+ $host .= ":$port" if defined $port;
+ return $host;
+}
+
+sub proto_args {
+ my $self = shift;
+ my $target = shift;
+ my $url = $target->{vars}{url};
+
+ my @args = ("-h", $url);
+
+ # -A : ignore cache
+ my $ignore = $target->{vars}{ignore_cache};
+ $ignore = 1
+ if (defined $ignore and $ignore ne "no"
+ and $ignore ne "0");
+ push @args, "-A" if $ignore and not exists $self->{_disabled}{A};
+
+ # -a : force cache to revalidate the data
+ my $revalidate = $target->{vars}{revalidate_data};
+ $revalidate= 1 if (defined $revalidate and $revalidate ne "no"
+ and $revalidate ne "0");
+ push @args, "-a" if $revalidate and not exists $self->{_disabled}{a};
+
+ return @args;
+}
+
+sub test_usage {
+ my $self = shift;
+ my $bin = $self->{properties}{binary};
+ croak("Your echoping binary doesn't support HTTP")
+ if `$bin -h/ 127.0.0.1 2>&1` =~ /(invalid option|not compiled|usage)/i;
+ if (`$bin -a -h/ 127.0.0.1 2>&1` =~ /(invalid option|not compiled|usage)/i) {
+ carp("Note: your echoping binary doesn't support revalidating (-a), disabling it");
+ $self->{_disabled}{a} = undef;
+ }
+
+ if (`$bin -A -h/ 127.0.0.1 2>&1` =~ /(invalid option|not compiled|usage)/i) {
+ carp("Note: your echoping binary doesn't support ignoring cache (-A), disabling it");
+ $self->{_disabled}{A} = undef;
+ }
+
+ $self->SUPER::test_usage;
+ return;
+}
+
+sub ProbeDesc($) {
+ return "HTTP pings using echoping(1)";
+}
+
+sub targetvars {
+ my $class = shift;
+ my $h = $class->SUPER::targetvars;
+ delete $h->{udp};
+ delete $h->{fill};
+ delete $h->{size};
+ return $class->_makevars($h, {
+ url => {
+ _doc => <<DOC,
+The URL to be requested from the web server or cache. Can be either relative
+(/...) for web servers or absolute (http://...) for caches.
+DOC
+ _default => '/',
+ },
+ port => {
+ _doc => 'The TCP port to use.',
+ _example => 80,
+ _re => '\d+',
+ },
+ ignore_cache => {
+ _doc => <<DOC,
+The echoping(1) "-A" option: force the proxy to ignore the cache.
+Enabled if the value is anything other than 'no' or '0'.
+DOC
+ _example => 'yes',
+ },
+ revalidate_data => {
+ _doc => <<DOC,
+The echoping(1) "-a" option: force the proxy to revalidate data with original
+server. Enabled if the value is anything other than 'no' or '0'.
+DOC
+ _example => 'no',
+ },
+ });
+}
+
+1;