#!/bin/sh
DISPLAY=192.168.0.102
COMMUNITY=public
YELLOW=90
RED=95
export DISPLAY COMMUNITY YELLOW RED
if test -z "$BB"; then
echo "BB not set; test run"
BB=echo
BBHOME=/usr/lib/hobbit/server
export BB BBHOME
fi
# Update the column status
# status hostname testname color message
status()
{
hostname=`echo "$1"|tr . ,`
$BB $DISPLAY "status $hostname.$2 $3 `date`
$4
"
}
# Send performance data separately for better control
# trends hostname rrdfile data
trends()
{
hostname=`echo "$1"|tr . ,`
$BB $DISPLAY "data $hostname.trends
[$2.rrd]
$3
"
}
# The result from snmpwalk is a very long text where each line looks like:
# .1.3.6.more.numbers = Type: value
get_value()
{
echo "$snmp_results"|grep -e "^$1."|sed -e 's,^[^:]*: ,,'|tr -d \"
}
enterprises_oid=.1.3.6.1.4.1
netgear_oid=$enterprises_oid.4526
productID_oid=$netgear_oid.100
readyNAS_oid=$productID_oid.12
nasManager_oid=$netgear_oid.18
nasMgrSoftwareVersion_oid=$nasManager_oid.1
diskTable_oid=$nasManager_oid.3
diskEntry_oid=$diskTable_oid.1
diskNumber_oid=$diskEntry_oid.1
diskChannel_oid=$diskEntry_oid.2
diskModel_oid=$diskEntry_oid.3
diskState_oid=$diskEntry_oid.4
diskTemperature_oid=$diskEntry_oid.5
# Store temperatures in disks.temp$i.rrd where $i is the number of the disk
# disks hostname
disks()
{
color=green
tempdata=
i=1
number=`get_value "$diskNumber_oid.$i"`
if test -z "$number"; then
status $1 disks clear "No disk info"
return
fi
message="
| # | Channel | Model | State | Temperature |
"
while test ! -z "$number"; do
bullet=green
channel=`get_value "$diskChannel_oid.$i"`
model=`get_value "$diskModel_oid.$i"`
state=`get_value "$diskState_oid.$i"`
if test "$state" != "ok"; then
bullet=red
color=red
fi
temp=`get_value "$diskTemperature_oid.$i"`
trends $1 "disks.temp$i" "DS:temp:GAUGE:600:U:U $temp"
message="$message
&$bullet | $number | $channel | $model | $state | $temp |
"
i=`expr $i + 1`
number=`get_value "$diskNumber_oid.$i"`
done
message="$message
"
status $1 disks $color "$message"
}
fanTable_oid=$nasManager_oid.4
fanEntry_oid=$fanTable_oid.1
fanNumber_oid=$fanEntry_oid.1
fanRPM_oid=$fanEntry_oid.2
fanType_oid=$fanEntry_oid.3
# Store rpm in fans.rpm$i.rrd where $i is the number of the fan
# fans hostname
fans()
{
color=green
i=1
number=`get_value "$fanNumber_oid.$i"`
if test -z "$number"; then
status $1 fans clear "No fan info"
return
fi
message="
| # | RPM | Type |
"
while test ! -z "$number"; do
bullet=green
rpm=`get_value "$fanRPM_oid.$i"`
trends $1 "fans.rpm$i" "DS:rpm:GAUGE:600:U:U $rpm"
type=`get_value "$fanType_oid.$i"`
message="$message
&$bullet | $number | $rpm | $type |
"
i=`expr $i + 1`
number=`get_value "$fanNumber_oid.$i"`
done
message="$message
"
status $1 fans $color "$message"
}
temperatureTable_oid=$nasManager_oid.5
temperatureEntry_oid=$temperatureTable_oid.1
temperatureNumber_oid=$temperatureEntry_oid.1
temperatureValue_oid=$temperatureEntry_oid.2
temperatureStatus_oid=$temperatureEntry_oid.3
# Store temperature in temperature.temp$i.rrd where $i is the number of the temperature
# temperature hostname
temperature()
{
color=green
i=1
number=`get_value "$temperatureNumber_oid.$i"`
if test -z "$number"; then
status $1 temperature clear "No temperature info"
return
fi
message="
| # | Value | Status |
"
while test ! -z "$number"; do
bullet=green
value=`get_value "$temperatureValue_oid.$i"`
trends $1 "temperature.temp$i" "DS:temp:GAUGE:600:U:U $value"
status=`get_value "$temperatureStatus_oid.$i"`
if test "$status" != "ok"; then
bullet=red
color=red
fi
message="$message
&$bullet | $number | $value | $status |
"
i=`expr $i + 1`
number=`get_value "$temperatureNumber_oid.$i"`
done
message="$message
"
status $1 temperature $color "$message"
}
volumeTable_oid=$nasManager_oid.7
volumeEntry_oid=$volumeTable_oid.1
volumeNumber_oid=$volumeEntry_oid.1
volumeName_oid=$volumeEntry_oid.2
volumeRAIDLevel_oid=$volumeEntry_oid.3
volumeStatus_oid=$volumeEntry_oid.4
volumeSize_oid=$volumeEntry_oid.5
volumeFreeSpace_oid=$volumeEntry_oid.6
# Store percent full in volumes.space$i.rrd where $i is the number of the volume
# volumes hostname
volumes()
{
color=green
i=1
number=`get_value "$volumeNumber_oid.$i"`
if test -z "$number"; then
status $1 volumes clear "No volume info"
return
fi
message="
| # | Name | RAID Level | Status | Size MB | Free MB | Used % |
"
while test ! -z "$number"; do
bullet=green
name=`get_value "$volumeName_oid.$i"`
level=`get_value "$volumeRAIDLevel_oid.$i"`
status=`get_value "$volumeStatus_oid.$i"`
size=`get_value "$volumeSize_oid.$i"`
free=`get_value "$volumeFreeSpace_oid.$i"`
space=`expr 100 - 100 \* $free / $size`
trends $1 "volumes.space$i" "DS:space:GAUGE:600:U:U $space"
if test "$space" -gt $YELLOW; then
bullet=yellow
color=yellow
fi
if test "$space" -gt $RED; then
bullet=red
color=red
fi
if test "$status" != "ok"; then
bullet=red
color=red
fi
message="$message
&$bullet | $number | $name | $level | $status | $size | $free | $space |
"
i=`expr $i + 1`
number=`get_value "$volumeNumber_oid.$i"`
done
message="$message
"
status $1 volumes "$color" "$message"
}
psuTable_oid=$nasManager_oid.8
psuEntry_oid=$psuTable_oid.1
psuNumber_oid=$psuEntry_oid.1
psuDesc_oid=$psuEntry_oid.2
psuStatus_oid=$psuEntry_oid.3
# psu hostname
psu()
{
color=green
i=1
number=`get_value "$psuNumber_oid.$i"`
if test -z "$number"; then
status $1 psu clear "No psu info"
return
fi
message="
| # | Description | Status |
"
while test ! -z "$number"; do
bullet=green
desc=`get_value "$psuDesc_oid.$i"`
status=`get_value "$psuStatus_oid.$i"`
if test "$status" != "ok"; then
bullet=red
color=red
fi
message="$message
&$bullet | $number | $desc | $status |
"
i=`expr $i + 1`
number=`get_value "$psuNumber_oid.$i"`
done
message="$message
"
status $1 psu "$color" "$message"
}
# The rest of the mib is for traps
# readynas ipaddr hostname
readynas()
{
snmp_results=`snmpwalk -v 1 -c "$COMMUNITY" -On $1 $nasManager_oid`
if test -z "$snmp_results"; then
status $2 status red
exit
fi
nasMgrSoftwareVersion=`get_value "$nasMgrSoftwareVersion_oid"`
status $2 status green "Software Version: $nasMgrSoftwareVersion"
disks $2
fans $2
temperature $2
volumes $2
psu $2
}
$BBHOME/bin/bbhostgrep readynas |
while read HOSTIP HOSTNAME JUNK; do
readynas $HOSTIP $HOSTNAME
done