Aby dane urzadzenie bylo uwzgledniane przy badaniu statusu zaznaczamy wskazana nizej opcje na jego karcie:

Skrypt znalezc mozna w katalogu programu lub pobrac:
http://pyxisisp.pl/download/pinginfra.sh
Uzupelniamy swoje dane dostepowe do bazy Pyxisa i uruchamiamy w cron'ie co jedna minute. Skrypt ma zabezpieczenie i nie uruchomi sie dopoty, dopoki jedna jego instancja nie zakonczy sprawdzania i zapisu do bazy.
Kod: Zaznacz cały
#!/bin/sh
#
# pinginframysql.sh - zapisywanie do bazy czasu odpowiedzi ICMP dla
# wybranych urzadzen infrastruktury
#
#############################################################################
# (c) 2016 Piotr Szkut PYXIS4SQL - v1.0 dla PYXIS4SQL od wersji 4.23 #
#############################################################################
BAZA=PYXIS4SQL # Nazwa bazy danych Pyxisa
USER=pyxis # Uzytkownik bazy
HASLO=mojetajnehaslo # Haslo
HOST=localhost # Adres IP komputera na którym znajduje sie baza
# Parametry polecenia ping
SIZE=64 # Rozmiar pakietu
CZEKAJ=0.01 # Czas pomiedzy kolejnymi probami [s]
ILOSCPROB=5 # Ilosc prob (wynik jest srenim czasem odpowiedzi ze wszystkich prob)
# Jesli nie wiesz co robisz, to nizej lepiej nie grzebac :-)
#############################################################################
LCK=/var/lock/LCK_pinginfra_$HOST"_"$BAZA
if [ -e $LCK ]; then
MOD_DATE=`stat --format=%Y ${LCK}`
TODAY=`date +%s`
DIFF=$(((TODAY-MOD_DATE)/60))
if [ $DIFF -gt 4 ]
then
echo "Usuwam stary plik lock $LCK"
rm -v ${LCK}
fi
fi
lockfile -r 0 $LCK || exit 1
PATH1=/tmp/pyxis4sql.tmp
PLIKNAZWA=/SQL_$HOST"_"$BAZA"_"$$.sql
mkdir -p $PATH1
PLIK=$PATH1$PLIKNAZWA
echo "TRUNCATE PingInfra; " > $PLIK
echo "START TRANSACTION;" >> $PLIK
START=`date +"%Y-%m-%d %H:%M:%S"`
echo "insert into PingInfra (PI_CZAS, PI_INDEXINFRA, PI_ODKIEDYDOWN, PI_STATUS) values (0, -1,'$START', 'START');" >> $PLIK
echo "insert into PingInfra (PI_CZAS, PI_INDEXINFRA) values " >> $PLIK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se \
"select INF_INDEX, INF_IP from vInfrastruktura where INF_CZYZAWIESZONE=0 and INF_POMINPING=0 and Length(INF_IP)>6 and INF_IP<>'0.0.0.0';"\
| while read INF_INDEX INF_IP; do
CZAS=$(ping -q -s 64 -i $CZEKAJ -c $ILOSCPROB -w 0.3 -W 1 $INF_IP | tail -1| awk '{print $4}' | cut -d '/' -f 2)
if [ -z "$CZAS" ]; then CZAS="-1"
fi
SQLPART="($CZAS, $INF_INDEX), "
echo $SQLPART >> $PLIK
if [ -z $1 ]; then echo "$INF_IP $CZAS"
elif [ $1 != "-s" ]; then echo "$INF_IP $CZAS"
fi
done
echo "(0, 0); " >> $PLIK
echo "update PingInfra set PI_STATUS='Up' where PI_CZAS>=0 and PI_INDEXINFRA>0; " >> $PLIK
echo "update PingInfra set PI_STATUS='Down', PI_ODKIEDYDOWN=NOW() where PI_CZAS<0 and PI_INDEXINFRA>0; " >> $PLIK
echo "update PingInfra set PI_ODKIEDYDOWN=NOW(), PI_STATUS='END' where PI_INDEXINFRA=0; " >> $PLIK
echo "insert PingInfra (PI_STATUS, PI_INDEXINFRA, PI_CZAS) select 'Skip', INF_INDEX, -1 from Infrastruktura where INF_POMINPING=1 or INF_CZYZAWIESZONE=1 ; " >> $PLIK
echo "COMMIT; " >> $PLIK
ZAPIS="1"
ZAPIS=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select if((select PI_ODKIEDYDOWN from PingInfra where PI_INDEXINFRA=0) > '$START', 0, 1);")
if [ $ZAPIS = "1" ]; then
if [ -z $1 ]; then echo "Zapis do MySQL na $HOST"
fi
mysql -h $HOST -u $USER -p$HASLO $BAZA < $PLIK
else
if [ -z $1 ]; then echo "Test starszy od zapisanego w bazie"
fi
fi
rm -f $PLIK
rm -f $LCK
echo "OK"