File: http_loadtime.in

package info (click to toggle)
munin 2.0.76-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,064 kB
  • sloc: perl: 11,684; java: 1,924; sh: 1,632; makefile: 636; javascript: 365; python: 267
file content (130 lines) | stat: -rwxr-xr-x 3,293 bytes parent folder | download | duplicates (3)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!@@GOODSH@@

: << =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/")
 requisites - if true also loads images and stylesheets referenced in the page as well, see wget --page-requisites
              (default: "false")
 cookies - if true saves and loads cookies to and from munin plugin state directory, this can be used for services that
           show session statistics to only use one session per http_loadtime uri configuration (default: "false")

 example:
   [http_loadtime]
   env.target http://localhost.de,http://localhost.de/some-site.html
   env.requisites true
   env.cookies true
   env.warning 5
   env.critical 30

 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 AUTHORS

Unknown authors
(2013) Axel Huebl
(2021) Andreas Perhab <a.perhab@wtioit.at>

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

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

=cut

. "$MUNIN_LIBDIR/plugins/plugin.sh"

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

urls=$(echo "$target" | tr ',' '\n')


request_url() {
    wget --user-agent "Munin - http_loadtime" --no-cache --quiet --output-document=/dev/null "$@" 2>/dev/null
}


escapeUri() {
    echo "$1" | sed 's/[:/.-]/_/g'
}

request_url_with_args_from_env() {
    local uri
    uri=$1
    if [ "$requisites" = "true" ]; then
        set -- --page-requisites "$@"
    fi
    if [ "$cookies" = "true" ]; then
        local cookies_file
        cookies_file="$MUNIN_PLUGSTATE/http_loadtime/$(escapeUri "$uri").cookies.txt"
        mkdir -p "$(dirname "$cookies_file")"
        set -- --load-cookies "$cookies_file" --save-cookies "$cookies_file" --keep-session-cookies "$@"
    fi
    request_url "$@"
}


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

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

    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" | cut -c 1-30)
        if [ "$uri_short" != "$uri" ]; then uri_short="${uri_short}..."; fi
        echo "$(escapeUri "$uri").label $uri_short"
        echo "$(escapeUri "$uri").info page load time"
        print_thresholds "$(escapeUri "$uri")"
    done
    exit 0
fi


for uri in $urls
do
    start=$(date +%s.%N)
    request_url_with_args_from_env "$uri"
    loadtime=$(echo "$start" "$(date +%s.%N)" | awk '{ print($2 - $1); }')

    echo "$(escapeUri "$uri").value $loadtime"
done