=head1 NAME

Smokeping::probes::Curl - a curl(1) probe for SmokePing

=head1 OVERVIEW

Fetches an HTTP or HTTPS URL using curl(1).

=head1 SYNOPSIS

 *** Probes ***

 +Curl

 binary = /usr/bin/curl
 forks = 5
 offset = 50%
 step = 300

 # The following variables can be overridden in each target section
 agent = User-Agent: Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6c
 extraargs = -6 --head --user user:password
 extrare = / /
 follow_redirects = yes
 include_redirects = yes
 insecure_ssl = 1
 interface = eth0
 pings = 5
 ssl2 = 1
 timeout = 20
 urlformat = http://%host%/ # mandatory

 # [...]

 *** Targets ***

 probe = Curl # if this should be the default probe

 # [...]

 + mytarget
 # probe = Curl # if the default probe is something else
 host = my.host
 agent = User-Agent: Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6c
 extraargs = -6 --head --user user:password
 extrare = / /
 follow_redirects = yes
 include_redirects = yes
 insecure_ssl = 1
 interface = eth0
 pings = 5
 ssl2 = 1
 timeout = 20
 urlformat = http://%host%/ # mandatory

=head1 DESCRIPTION

(see curl(1) for details of the options below)

=head1 VARIABLES

Supported probe-specific variables:

=over

=item binary

The location of your curl binary.

Default value: /usr/bin/curl

=item forks

Run this many concurrent processes at maximum

Example value: 5

Default value: 5

=item offset

If you run many probes concurrently you may want to prevent them from
hitting your network all at the same time. Using the probe-specific
offset parameter you can change the point in time when each probe will
be run. Offset is specified in % of total interval, or alternatively as
'random', and the offset from the 'General' section is used if nothing
is specified here. Note that this does NOT influence the rrds itself,
it is just a matter of when data acqusition is initiated.
(This variable is only applicable if the variable 'concurrentprobes' is set
in the 'General' section.)

Example value: 50%

=item step

Duration of the base interval that this probe should use, if different
from the one specified in the 'Database' section. Note that the step in
the RRD files is fixed when they are originally generated, and if you
change the step parameter afterwards, you'll have to delete the old RRD
files or somehow convert them. (This variable is only applicable if
the variable 'concurrentprobes' is set in the 'General' section.)

Example value: 300

=back

Supported target-specific variables:

=over

=item agent

The "-A" curl(1) option.  This is a full HTTP User-Agent header including
the words "User-Agent:". Note that it does not need any quotes around it.

Example value: User-Agent: Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6c

=item extraargs

Any extra arguments you might want to hand to curl(1). The arguments
should be separated by the regexp specified in "extrare", which
contains just the space character (" ") by default.

Note that curl will be called with the resulting list of arguments
without any shell expansion. If you need to specify any arguments
containing spaces, you should set "extrare" to something else.

As a complicated example, to explicitly set the "Host:" header in Curl
requests, you need to set "extrare" to something else, eg. "/;/",
and then specify C<extraargs = --header;Host: www.example.com>.

Example value: -6 --head --user user:password

=item extrare

The regexp used to split the extraargs string into an argument list,
in the "/regexp/" notation.  This contains just the space character 
(" ") by default, but if you need to specify any arguments containing spaces,
you can set this variable to a different value.

Example value: / /

Default value: / /

=item follow_redirects

If this variable is set to 'yes', curl will follow any HTTP redirection steps (the '-L' option).
If set to 'no', HTTP Location: headers will not be followed. See also 'include_redirects'.

Example value: yes

Default value: no

=item include_redirects

If this variable is set to 'yes', the measurement result will include the time
spent on following any HTTP redirection steps. If set to 'no', only the last
step is measured. See also 'follow_redirects'.

Example value: yes

Default value: no

=item insecure_ssl

The "-k" curl(1) option. Accept SSL connections that don't have a secure
certificate chain to a trusted CA. Note that if you are going to monitor
https targets, you'll probably have to either enable this option or specify
the CA path to curl through extraargs below. For more info, see the
curl(1) manual page.

Example value: 1

=item interface

The "--interface" curl(1) option.  Bind to a specific interface, IP address or
host name.

Example value: eth0

=item pings

How many pings should be sent to each target, if different from the global
value specified in the Database section. Note that the number of pings in
the RRD files is fixed when they are originally generated, and if you
change this parameter afterwards, you'll have to delete the old RRD
files or somehow convert them.

Example value: 5

=item ssl2

The "-2" curl(1) option.  Force SSL2.

Example value: 1

=item timeout

The "-m" curl(1) option.  Maximum timeout in seconds.

Example value: 20

Default value: 10

=item urlformat

The template of the URL to fetch.  Can be any one that curl supports.
Any occurrence of the string '%host%' will be replaced with the
host to be probed.

Example value: http://%host%/

This setting is mandatory.

=back


=head1 AUTHORS

 Gerald Combs <gerald [AT] ethereal.com>
 Niko Tyni <ntyni@iki.fi>

=head1 NOTES

You should consider setting a lower value for the C<pings> variable than the
default 20, as repetitive URL fetching may be quite heavy on the server.

The URL to be tested used to be specified by the variable 'url' in earlier
versions of Smokeping, and the 'host' setting did not influence it in any
way. The variable name has now been changed to 'urlformat', and it can
(and in most cases should) contain a placeholder for the 'host' variable.

=head1 SEE ALSO

curl(1), L<http://curl.haxx.se/>

=cut