petar.company/rrdtools/archive/cpuGuardian.sh

235 lines
4 KiB
Bash
Raw Permalink Normal View History

2025-03-01 00:58:18 +01:00
#!/bin/sh
#
# $VER: cpuGuardian.sh 0.6 (28.6.2005) Riccardo "VIC" Torrini
#
tmp=/tmp/tmp_$$
debug=
trap 'Break' 1 2 15
CleanUp ()
{
rm -f ${tmp}*
}
Break ()
{
echo "${Program}: ** User Break"
CleanUp
exit 2
}
Debug ()
{
[ ${debug} ] && echo "DEBUG: ${1}"
}
Error ()
{
echo "** Error ! ${1}"
CleanUp
exit 2
}
Warning ()
{
echo "* Warning ! ${1}"
CleanUp
exit 1
}
Panic ()
{
echo "** Internal error ! ${1}"
CleanUp
exit 3
}
Message ()
{
echo "* ${1}"
return 1
}
isNotNull ()
{
[ "_${2}" = "_" ] && Error "${1}"
}
CheckFile ()
{
isNotNull "Invalid parameter to CheckFile()" "${1}"
if [ ! -f ${1} ]
then
if [ "_${2}" = "_" ]
then
Error "File not found (${1})"
else
Error "${2}"
fi
fi
}
CheckDir ()
{
isNotNull "Invalid parameter to CheckDir()" "${1}"
if [ ! -d ${1} ]
then
if [ "_${2}" = "_" ]
then
Error "Directory not found (${1})"
else
Error "${2}"
fi
fi
}
FileNotFound ()
{
Message "File not found (`basename ${1}`)"
}
DirectoryNotFound ()
{
Message "Directory not found (${1})"
}
FileExist ()
{
Message "File exist (`basename ${1}`)"
}
# Main
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/local/vbin
dbHome=/var/db/rrd
db=${dbHome}/cpu.rrd
images=/home/web/data/stats/cpu
host=`hostname`
CheckDir ${images}
CheckDir ${dbHome}
cd ${dbHome}
case ${1:-NULL} in
NULL)
Error "missing command"
;;
createAndInitializeDB)
test -f ${db} && Error "we are on-air, don't try to destroy existing db (${db})"
rrdtool create ${db} \
--start `date -v2000y -v6m -v21d -v0H -v0M -v0S +%s` \
--step 300 \
DS:cpuHeat:GAUGE:600:0:200 \
DS:fan0Speed:GAUGE:600:0:9000 \
DS:fan1Speed:GAUGE:600:0:9000 \
DS:fan2Speed:GAUGE:600:0:9000 \
DS:Vcore:GAUGE:600:0:5 \
DS:cpuLoad:GAUGE:600:U:U \
DS:swapFree:GAUGE:600:0:100 \
DS:rootFree:GAUGE:600:0:100 \
DS:varFree:GAUGE:600:0:100 \
DS:tmpFree:GAUGE:600:0:100 \
DS:homeFree:GAUGE:600:0:100 \
DS:usrFree:GAUGE:600:0:100 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:12:840 \
RRA:AVERAGE:0.5:288:900 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:12:840 \
RRA:MAX:0.5:288:900 \
RRA:LAST:0.5:1:600 \
RRA:LAST:0.5:12:840 \
RRA:LAST:0.5:288:900
;;
collect)
CheckFile ${db} "db not found (${db})"
rrdtool update ${db} N:0:0:0:0:0:`uptime | awk '{gsub(",", ""); print $(NF-2)}'`:`swapinfo | awk '/Interleaved/ {gsub("%", ""); print $(NF-1)}'`:`df | awk '{gsub("%", "", $5); if($6 == "/") $6 = "/root"; gsub("/", "", $6); used[$6] = $5;} END {printf( "%d:%d:%d:%d:%d\n", used["root"], used["var"], used["tmp"], used["home"], used["usr"] )}'`
;;
dump)
;;
reload)
;;
daily|weekly|monthly|yearly)
CheckFile ${db} "db not found (${db})"
type=${1:-NULL}
case ${type} in
daily)
dfrom="-s `date -v-1d +%s`"
dend=""
;;
weekly)
dfrom="-s `date -v-1w +%s`"
dend=""
;;
monthly)
dfrom="-s `date -v-1m +%s`"
dend=""
;;
yearly)
dfrom="-s `date -v-12m +%s`"
dend=""
;;
esac
##thisCanvas="--imgformat PNG --width 400 --height 100"
##thisGeometry="--lower-limit 0 --base 1000 --upper-limit 100 --rigid"
##thisRange="--start -24h --end now"
thisCanvas="--imgformat PNG"
thisGeometry=""
thisRange="${dfrom} ${dend}"
rrdtool graph ${images}/${type}-load.png \
${thisCanvas} ${thisGeometry} ${thisRange} \
--title "${host} cpuLoad (${type})" \
--vertical-label load \
DEF:my=${db}:cpuLoad:AVERAGE \
LINE2:my#ff0000
rrdtool graph ${images}/${type}-disk.png \
${thisCanvas} ${thisGeometry} ${thisRange} \
--title "${host} diskSpace (${type})" \
--vertical-label space \
DEF:swap=${db}:swapFree:AVERAGE \
DEF:root=${db}:rootFree:AVERAGE \
DEF:var=${db}:varFree:AVERAGE \
DEF:tmp=${db}:tmpFree:AVERAGE \
DEF:home=${db}:homeFree:AVERAGE \
DEF:usr=${db}:usrFree:AVERAGE \
LINE2:swap#ff00FF:swap \
LINE2:root#c00000:/root \
LINE2:var#00ff00:/var \
LINE2:tmp#00c000:/tmp \
LINE2:home#0000ff:/home \
LINE2:usr#0000c0:/usr
##GPRINT:swap:MAX:%3.0lf%%
;;
help)
echo "Usage: ${0} [create|collect|update|dump|reload|daily|weekly|monthly|yearly|help]"
exit 1
;;
*)
echo "bad command"
exit 2
;;
esac
exit 0