1
0
mirror of https://github.com/librenms/librenms-agent.git synced 2024-05-09 09:54:52 +00:00
librenms-librenms-agent/snmp/apache-stats.sh
Tobias Frederick 5c5b32dcd8 Fix apache-stats.sh
2020-04-30 21:00:25 +02:00

214 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script produces LibreNMS apache-stats output. The only dependency is curl.
# 20200102, joseph.tingiris@gmail.com
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#
# Functions
#
function debugecho() {
if [ ${#Debug} -gt 0 ]; then
echo debug: $@
fi
}
#
# Globals
#
Tmp_File=/tmp/apache_status
# Debug=on; use environment, i.e. Debug=on apache-stats.sh
if [ "${DEBUG}" != "" ]; then
Debug=${DEBUG}
else
if [ "${Debug}" != "" ]; then
Debug=${Debug}
fi
fi
# set default values to U; not all apache's have all stats
Total_Accesses="U"
Total_kBytes="U"
CPULoad="U"
Uptime="U"
ReqPerSec="U"
BytesPerSec="U"
BytesPerReq="U"
BusyWorkers="U"
IdleWorkers="U"
Scoreboard="U"
# set default scoreboard counters to 0
let Scoreboard_=0
let ScoreboardDot=0
let ScoreboardC=0
let ScoreboardD=0
let ScoreboardG=0
let ScoreboardI=0
let ScoreboardK=0
let ScoreboardL=0
let ScoreboardR=0
let ScoreboardS=0
let ScoreboardW=0
#
# Main
#
curl --silent --fail "http://localhost/server-status?auto" -o ${Tmp_File} &> /dev/null
if [ $? -ne 0 ]; then
# curl failed
exit 1
fi
if [ ! -s ${Tmp_File} ]; then
# empty output
exit 1
fi
while read Line; do
Field=${Line%:*}
Value=${Line#*: }
debugecho "Line: ${Line}"
debugecho "Field: ${Field}"
debugecho "Value: ${Value}"
debugecho
if [ "${Field}" == "Total Accesses" ]; then
Total_Accesses=${Value}
fi
if [ "${Field}" == "Total kBytes" ]; then
Total_kBytes=${Value}
fi
if [ "${Field}" == "CPULoad" ]; then
CPULoad=${Value}
fi
if [ "${Field}" == "Uptime" ]; then
Uptime=${Value}
fi
if [ "${Field}" == "ReqPerSec" ]; then
ReqPerSec=${Value}
fi
if [ "${Field}" == "BytesPerSec" ]; then
BytesPerSec=${Value}
fi
if [ "${Field}" == "BytesPerReq" ]; then
BytesPerReq=${Value}
fi
if [ "${Field}" == "BusyWorkers" ]; then
BusyWorkers=${Value}
fi
if [ "${Field}" == "IdleWorkers" ]; then
IdleWorkers=${Value}
fi
if [ "${Field}" == "Scoreboard" ]; then
Scoreboard=${Value}
fi
done < ${Tmp_File}
# value output order must be this ...
echo "${Total_Accesses}"
echo "${Total_kBytes}"
echo "${CPULoad}"
echo "${Uptime}"
echo "${ReqPerSec}"
echo "${BytesPerSec}"
echo "${BytesPerReq}"
echo "${BusyWorkers}"
echo "${IdleWorkers}"
debugecho "Scoreboard = ${Scoreboard}"
for (( c=0; c<${#Scoreboard}; c++ )); do
if [ "${Scoreboard:$c:1}" == "_" ]; then
let Scoreboard_=${Scoreboard_}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "." ]; then
let ScoreboardDot=${ScoreboardDot}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "C" ]; then
let ScoreboardC=${ScoreboardC}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "D" ]; then
let ScoreboardD=${ScoreboardD}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "G" ]; then
let ScoreboardG=${ScoreboardG}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "I" ]; then
let ScoreboardI=${ScoreboardI}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "K" ]; then
let ScoreboardK=${ScoreboardK}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "L" ]; then
let ScoreboardL=${ScoreboardL}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "R" ]; then
let ScoreboardR=${ScoreboardR}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "S" ]; then
let ScoreboardS=${ScoreboardS}+1
continue
fi
if [ "${Scoreboard:$c:1}" == "W" ]; then
let ScoreboardW=${ScoreboardW}+1
continue
fi
debugecho "${Scoreboard:$c:1}"
done
# scoreboard output order must be this ...
echo ${Scoreboard_}
echo ${ScoreboardS}
echo ${ScoreboardR}
echo ${ScoreboardW}
echo ${ScoreboardK}
echo ${ScoreboardD}
echo ${ScoreboardC}
echo ${ScoreboardL}
echo ${ScoreboardG}
echo ${ScoreboardI}
echo ${ScoreboardDot}
# clean up
if [ -f ${Tmp_File} ]; then
rm -f ${Tmp_File} &> /dev/null
fi