123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/bin/sh
- HOSTS_FILES="$HOME/.hosts_scanner"
- #HOSTS_FILES="/tmp/hosts"
- verbose=0
- res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
- pids=""
- date_cmd="date --rfc-3339=s"
-
- lock="${res_file}.lock"
-
- clean_exit() {
- echo "Ctrl+C pressed, exiting..."
- for pid in $(echo $pids)
- do
- kill $pid
- echo $pid killed
- done
- rmdir ${res_file}.lock 2>/dev/null
- rm -v $res_file
- exit 0
- }
-
- semlock() {
- while [ 1 ]
- do
- mkdir $1 2>/dev/null && break
- done
- }
-
- semrelease() {
- rmdir $1
- }
-
- trap clean_exit 2
-
- upd_ping() {
- # update ping stat file
- # $1 host
- # $2 file
- # $3 lock
- lock="$3"
- last_up="never"
-
- while [ 1 ]
- do
- rep=$(ping -qc 1 $1 2>/dev/null )
- ret=$?
- rep=$(echo $rep | sed -nE 's/.*rtt min\/avg\/max\/mdev = [0-9]+\.[0-9]+\/([0-9]+\.[0-9]+)\/.*$/\1/p')
- rehost=$(echo $h|sed 's/\./\\./g')
-
- semlock $lock
-
-
- if [ $ret -eq 0 ]
- then
- last_up=$($date_cmd)
- #echo "${res}$rep $hstr $last_up" >> $2
- else
- rep="down"
- #echo "${res}down $hstr $last_up" >> $2
- fi
-
- sed -i "s/^\\s*$rehost\\s.*$/$(printf "%30s %8s %30s\n" $1 $rep "$last_up")/" "$2"
-
- semrelease $lock
-
- sleep 5
- done
- }
-
- for h in $(cat "$HOSTS_FILES")
- do
- printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
- done
-
- for h in $(cat "$HOSTS_FILES" )
- do
- upd_ping $h $res_file $lock &
- pid=$!
- pids="${pids}\n$pid"
- echo "$h updated by $pid" >&2
- done
- sleep 1
-
- while [ 1 ]
- do
- semlock $lock
- clear
- echo "Ping radar $($date_cmd)\n"
- printf "%30s %8s %30s\n" "host" "ping" "last up"
- for i in $(seq 70); do echo -n "="; done
- echo ""
-
- #cat $res_file
-
- #grep -v " down " $res_file
- #grep " down " $res_file
-
- sed -E -e "s/\snever$/$(tput sgr0)\0/" -e "s/^.* down .*$/$(tput setaf 1)\0$(tput sgr0)/" $res_file
-
- semrelease $lock
- sleep 1
- done
|