summaryrefslogtreecommitdiffstats
path: root/lib/probes/EchoPingHttp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/probes/EchoPingHttp.pm')
-rw-r--r--lib/probes/EchoPingHttp.pm164
1 files changed, 164 insertions, 0 deletions
diff --git a/lib/probes/EchoPingHttp.pm b/lib/probes/EchoPingHttp.pm
new file mode 100644
index 0000000..4e261b8
--- /dev/null
+++ b/lib/probes/EchoPingHttp.pm
@@ -0,0 +1,164 @@
+package probes::EchoPingHttp;
+
+=head1 NAME
+
+probes::EchoPingHttp - an echoping(1) probe for SmokePing
+
+=head1 OVERVIEW
+
+Measures HTTP roundtrip times (web servers and caches) for SmokePing.
+
+=head1 SYNOPSYS
+
+ *** Probes ***
+ + EchoPingHttp
+
+ binary = /usr/bin/echoping # mandatory
+
+
+ *** Targets ***
+
+ probe = EchoPingHttp
+
+ + PROBE_CONF
+ url = /
+ ignore_cache = yes
+ revalidate_data = no
+ port = 80 # default value anyway
+ timeout = 50 # default is 10s
+
+=head1 DESCRIPTION
+
+Supported probe-specific variables: those specified in EchoPing(3pm)
+documentation.
+
+Supported target-specific variables:
+
+=over
+
+=item those specified in EchoPing(3pm) documentation
+
+except I<fill>, I<size> and I<udp>.
+
+=item url
+
+The URL to be requested from the web server or cache. Can be either relative
+(/...) for web servers or absolute (http://...) for caches.
+
+=item port
+
+The TCP port to use. The default is 80.
+
+=item ignore_cache
+
+The echoping(1) "-A" option: force the proxy to ignore the cache.
+Enabled if the value is anything other than 'no' or '0'.
+
+=item revalidate_data
+
+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'.
+
+=item timeout
+
+The echoping(1) "-t" option: Number of seconds to wait a reply before giving up. For TCP,
+this is the maximum number of seconds for the whole connection
+(setup and data exchange).
+
+=back
+
+=head1 AUTHOR
+
+Niko Tyni E<lt>ntyni@iki.fiE<gt>
+
+=head1 SEE ALSO
+
+EchoPing(3pm), EchoPingHttps(3pm)
+
+=cut
+
+use strict;
+use base qw(probes::EchoPing);
+use Carp;
+
+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};
+ $port = $self->{properties}{port} unless defined $port;
+
+ $host .= ":$port" if defined $port;
+ return $host;
+}
+
+sub proto_args {
+ my $self = shift;
+ my $target = shift;
+ my $url = $target->{vars}{url};
+ $url = $self->{properties}{url} unless defined $url;
+ $url = "/" unless defined $url;
+
+ my @args = ("-h", $url);
+
+ # -t : timeout
+ my $timeout = $target->{vars}{timeout};
+ $timeout = $self->{properties}{timeout}
+ unless defined $timeout;
+ push @args, "-t $timeout" if $timeout;
+
+ # -A : ignore cache
+ my $ignore = $target->{vars}{ignore_cache};
+ $ignore = $self->{properties}{ignore_cache}
+ unless defined $ignore;
+ $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 = $self->{properties}{revalidate_data}
+ unless defined $revalidate;
+ $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)";
+}
+
+
+1;