#!/bin/bash # Display the clock and a string of symbols # if there are criticals/warning/unknown services. CLOCK() { SRVSTS="" CNT=0 while [ $CNT -lt $CRIT ] do SRVSTS=$SRVSTS"*" CNT=$((CNT+1)) done CNT=0 while [ $CNT -lt $WARN ] do SRVSTS=$SRVSTS"x" CNT=$((CNT+1)) done CNT=0 while [ $CNT -lt $UNKN ] do SRVSTS=$SRVSTS"_" CNT=$((CNT+1)) done for i in 1 2 3 do HH=$(date +"%H:%M") STR="$HH $SRVSTS"; STR=${STR:0:16} echo "\\position:1 " > $DEV sleep 0.1 echo "$STR" > $DEV echo "$STR" sleep 0.9 HH=$(date +"%H %M") STR="$HH $SRVSTS"; STR=${STR:0:16} echo "\\position:1 " > $DEV sleep 0.1 echo "$STR" > $DEV echo "$STR" sleep 0.9 done } #show a message for 3 seconds. SHOW() { echo "\\resetall: " > $DEV sleep 1 MSG=$1 STR="$MSG" STR=${STR:0:16} echo $STR > $DEV sleep 3 echo "\\resetall: " > $DEV sleep 1 } # blink a message for 5 seonds BLINK() { MSG=$1 for i in 1 2 3 4 5 do echo "\\resetall: " > $DEV sleep 0.3 STR="$MSG" STR=${STR:0:16} echo $STR > $DEV sleep 0.3 done echo "\\resetall: " > $DEV sleep 1 } # Scrpit starts here. DEV=/tmp/nagios_fifo #check if communication pipe exists and create it if needed. if [ ! -e $DEV ] then mkfifo $DEV fi # check if the display driver is loaded, and start it if needed. if ! ps aux | grep -v grep | grep display > /dev/null 2>&1 then sudo /home/pi/nagios-dspl/display & sleep 10 fi # Do a bit of show at start. ;-) echo "\\resetall: " > $DEV sleep 0.3 echo 'Nagios-Monitor' > $DEV sleep 1 echo "\\resetall: " > $DEV sleep 0.3 COUNT=1 # The real thing starts here. while true do # request service list and filter out unwanted and acknoleged services ssh 10.0.0.1 -l nagiosdspl | grep -v dontCare1 | grep -v dontCare2 | grep -v ACK > /tmp/nagios # Count critical/warning/unknown service status CRIT=$(cat /tmp/nagios | grep CRITICAL | wc -l) WARN=$(cat /tmp/nagios | grep WARNING | wc -l) UNKN=$(cat /tmp/nagios | grep UNKNOWN | wc -l) # Display the clock for 5 seconds. CLOCK # if there are warnings, show warning message. if [ $WARN -gt 0 ] then SHOW "WARNING : $WARN" fi # if there are criticcals, show blinking critical message. if [ $CRIT -gt 0 ] then BLINK "critical : $CRIT" fi done