#!@@BASH@@
# -*- sh -*-

: << =cut

=head1 NAME

http_loadtime - Plugin to graph the HTTP response times of specific pages

=head1 CONFIGURATION

The following environment variables are used by this plugin

 target - comma separated URL(s) to fetch (default: "http://localhost/")
 example:
   [http_loadtime]
   env.target http://localhost.de,http://localhost.de/some-site.html
   env.requisites true

 Do not enable the download of page requisites (env.requisites) for https
 sites since wget needs incredible long to perform this on big sites...

=head1 AUTHOR

Unknown authors
(2013) Axel Huebl

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

. $MUNIN_LIBDIR/plugins/plugin.sh

target=${target:-"http://localhost/"}
requisites=${requisites:-"false"}

urls=`echo $target | tr "," "\n"`
wget_opt="--user-agent munin/http_loadtime --no-cache -q"
if [ "$requisites" == "true" ]; then
  wget_opt="$wget_opt --page-requisites"
fi

time_bin=`which time`

if [ "$1" = "autoconf" ]; then
    result="yes"
    command -v $time_bin 2>&1 >/dev/null || result=1
    command -v tr        2>&1 >/dev/null || result=1
    command -v wget      2>&1 >/dev/null || result=1
    if [ "$result" != "yes" ]; then
	echo "no (programs time, wget and tr required)"
	exit 0
    fi

    # if $target contains more than one url
    if ! wget -q -O /dev/null $target; then

        # check if urls respond
        #
        for uri in $urls
        do
            wget --spider $uri $wget_opt
            if [ "$?" != "0" ]; then
                echo "no (Cannot run wget against \"$uri\")"
                exit 0
            fi
        done
    fi
    echo yes
    exit 0
fi

if [ "$1" = "config" ]; then
    echo "graph_title HTTP loadtime of a page"
    echo "graph_args --base 1000 -l 0"
    echo "graph_vlabel Load time in seconds"
    echo "graph_category network"
    echo "graph_info This graph shows the load time in seconds"
    for uri in $urls
    do
        uri_short=`echo ${uri:0:30}`
        if [ "$uri_short" != "$uri" ]; then uri_short=$uri_short"..."; fi
        esc_uri="$(clean_fieldname "$uri")"
        echo $esc_uri".label $uri_short"
        echo $esc_uri".info page load time"
    done
    exit 0
fi

TEMPO_DIR=$(mktemp -dt munin_http_loadtime.XXXXXX) || exit 1

trap "rm -rf $TEMPO_DIR" EXIT

cd $TEMPO_DIR || exit 1

for uri in $urls
do
    loadtime=`$time_bin -f "%e" wget $wget_opt --header='Accept-Encoding: gzip,deflate' $uri 2>&1`

    esc_uri="$(clean_fieldname "$uri")"
    echo $esc_uri".value $loadtime"
done

exit 0
