summaryrefslogtreecommitdiffstats
path: root/charts.d/apache.chart.sh
diff options
context:
space:
mode:
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2016-01-23 04:55:40 +0200
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2016-01-23 04:55:40 +0200
commitcbaf3a08be7820c1ccaaabfb94ab5ec39db6f9b4 (patch)
treed08cf3433eb7c4823cf5026a6006626babad9f9a /charts.d/apache.chart.sh
parent4f9402fe57bb1951c8ac8081c18f38a9cbdab598 (diff)
the apache plugin
Diffstat (limited to 'charts.d/apache.chart.sh')
-rwxr-xr-xcharts.d/apache.chart.sh185
1 files changed, 185 insertions, 0 deletions
diff --git a/charts.d/apache.chart.sh b/charts.d/apache.chart.sh
new file mode 100755
index 0000000000..6c6e36e33f
--- /dev/null
+++ b/charts.d/apache.chart.sh
@@ -0,0 +1,185 @@
+#!/bin/sh
+
+# the URL to download apache status info
+apache_url="http://127.0.0.1:80/server-status?auto"
+
+# _update_every is a special variable - it holds the number of seconds
+# between the calls of the _update() function
+apache_update_every=
+
+# let netdata calculate averages (0)
+# or use apache calculated averages (1)
+apache_averages=0
+
+# convert apache floating point values
+# to integer using this multiplier
+# this only affects precision - the values
+# will be in the proper units
+apache_decimal_detail=1000000
+
+declare -a apache_response=()
+apache_accesses=0
+apache_kbytes=0
+apache_cpuload=0
+apache_uptime=0
+apache_reqpersec=0
+apache_bytespersec=0
+apache_bytesperreq=0
+apache_busyworkers=0
+apache_idleworkers=0
+apache_scoreboard=
+
+apache_get() {
+ apache_response=($(curl -s "${apache_url}"))
+ [ $? -ne 0 -o "${#apache_response[@]}" -eq 0 ] && return 1
+
+ if [ "${apache_response[0]}" != "Total" \
+ -o "${apache_response[1]}" != "Accesses:" \
+ -o "${apache_response[3]}" != "Total" \
+ -o "${apache_response[4]}" != "kBytes:" \
+ -o "${apache_response[6]}" != "CPULoad:" \
+ -o "${apache_response[8]}" != "Uptime:" \
+ -o "${apache_response[10]}" != "ReqPerSec:" \
+ -o "${apache_response[12]}" != "BytesPerSec:" \
+ -o "${apache_response[14]}" != "BytesPerReq:" \
+ -o "${apache_response[16]}" != "BusyWorkers:" \
+ -o "${apache_response[18]}" != "IdleWorkers:" \
+ -o "${apache_response[20]}" != "Scoreboard:" \
+ ]
+ then
+ echo >&2 "apache: Invalid response from apache server: ${apache_response[*]}"
+ return 1
+ fi
+
+ apache_accesses="${apache_response[2]}"
+ apache_kbytes="${apache_response[5]}"
+
+ # float2int "${apache_response[7]}" ${apache_decimal_detail}
+ # apache_cpuload=${FLOAT2INT_RESULT}
+
+ # apache_uptime="${apache_response[9]}"
+
+ if [ ${apache_averages} -eq 1 ]
+ then
+ float2int "${apache_response[11]}" ${apache_decimal_detail}
+ apache_reqpersec=${FLOAT2INT_RESULT}
+
+ float2int "${apache_response[13]}" ${apache_decimal_detail}
+ apache_bytespersec=${FLOAT2INT_RESULT}
+ fi
+
+ float2int "${apache_response[15]}" ${apache_decimal_detail}
+ apache_bytesperreq=${FLOAT2INT_RESULT}
+
+ apache_busyworkers="${apache_response[17]}"
+ apache_idleworkers="${apache_response[19]}"
+ apache_scoreboard="${apache_response[21]}"
+
+ if [ -z "${apache_accesses}" \
+ -o -z "${apache_kbytes}" \
+ -o -z "${apache_cpuload}" \
+ -o -z "${apache_uptime}" \
+ -o -z "${apache_reqpersec}" \
+ -o -z "${apache_bytespersec}" \
+ -o -z "${apache_bytesperreq}" \
+ -o -z "${apache_busyworkers}" \
+ -o -z "${apache_idleworkers}" \
+ -o -z "${apache_scoreboard}" \
+ ]
+ then
+ echo >&2 "apache: empty values got from apache server: ${apache_response[*]}"
+ return 1
+ fi
+
+ return 0
+}
+
+# _check is called once, to find out if this chart should be enabled or not
+apache_check() {
+
+ apache_get
+ if [ $? -ne 0 ]
+ then
+ echo >&2 "apache: cannot find stub_status on URL '${apache_url}'. Please set apache_url='http://apache.server:80/server-status?auto' in $confd/apache.conf"
+ return 1
+ fi
+
+ # this should return:
+ # - 0 to enable the chart
+ # - 1 to disable the chart
+
+ return 0
+}
+
+# _create is called once, to create the charts
+apache_create() {
+ cat <<EOF
+CHART apache.bytesperreq '' "apache Average Response Size (lifetime)" "bytes/request" apache apache area 16005 $apache_update_every
+DIMENSION size '' absolute 1 ${apache_decimal_detail}
+CHART apache.workers '' "apache Workers" "workers" apache apache stacked 16006 $apache_update_every
+DIMENSION idle '' absolute 1 1
+DIMENSION busy '' absolute 1 1
+EOF
+
+ if [ ${apache_averages} -eq 1 ]
+ then
+ # apache calculated averages
+ cat <<EOF2
+CHART apache.requests '' "apache Requests" "requests/s" apache apache line 16001 $apache_update_every
+DIMENSION requests '' absolute 1 ${apache_decimal_detail}
+CHART apache.net '' "apache Bandwidth" "kilobits/s" apache apache area 16002 $apache_update_every
+DIMENSION sent '' absolute 8 $[apache_decimal_detail * 1000]
+EOF2
+ else
+ # netdata calculated averages
+ cat <<EOF3
+CHART apache.requests '' "apache Requests" "requests/s" apache apache line 16001 $apache_update_every
+DIMENSION requests '' incremental 1 1
+CHART apache.net '' "apache Bandwidth" "kilobits/s" apache apache area 16002 $apache_update_every
+DIMENSION sent '' incremental 8 1
+EOF3
+ fi
+
+ return 0
+}
+
+# _update is called continiously, to collect the values
+apache_update() {
+ local reqs net
+ # the first argument to this function is the microseconds since last update
+ # pass this parameter to the BEGIN statement (see bellow).
+
+ # do all the work to collect / calculate the values
+ # for each dimension
+ # remember: KEEP IT SIMPLE AND SHORT
+
+ apache_get || return 1
+
+ if [ ${apache_averages} -eq 1 ]
+ then
+ reqs=${apache_reqpersec}
+ net=${apache_bytespersec}
+ else
+ reqs=${apache_accesses}
+ net=${apache_kbytes}
+ fi
+
+ # write the result of the work.
+ cat <<VALUESEOF
+BEGIN apache.requests $1
+SET requests = $[reqs]
+END
+BEGIN apache.net $1
+SET sent = $[net]
+END
+BEGIN apache.bytesperreq $1
+SET size = $[apache_bytesperreq]
+END
+BEGIN apache.workers $1
+SET idle = $[apache_idleworkers]
+SET busy = $[apache_busyworkers]
+END
+VALUESEOF
+
+ return 0
+}