Ping Radar : ping a list of hosts and display response time
sh
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test.sh 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/bin/sh
  2. HOSTS_FILES="$HOME/.hosts_scanner"
  3. #HOSTS_FILES="/tmp/hosts"
  4. verbose=0
  5. res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
  6. pids=""
  7. date_cmd="date --rfc-3339=s"
  8. lock="${res_file}.lock"
  9. clean_exit() {
  10. echo "Ctrl+C pressed, exiting..."
  11. for pid in $(echo $pids)
  12. do
  13. kill $pid
  14. echo $pid killed
  15. done
  16. rmdir ${res_file}.lock 2>/dev/null
  17. rm -v $res_file
  18. exit 0
  19. }
  20. semlock() {
  21. while [ 1 ]
  22. do
  23. mkdir $1 2>/dev/null && break
  24. done
  25. }
  26. semrelease() {
  27. rmdir $1
  28. }
  29. trap clean_exit 2
  30. upd_ping() {
  31. # update ping stat file
  32. # $1 host
  33. # $2 file
  34. # $3 lock
  35. lock="$3"
  36. last_up="never"
  37. while [ 1 ]
  38. do
  39. rep=$(ping -qc 1 $1 2>/dev/null )
  40. ret=$?
  41. rep=$(echo $rep | sed -nE 's/.*rtt min\/avg\/max\/mdev = [0-9]+\.[0-9]+\/([0-9]+\.[0-9]+)\/.*$/\1/p')
  42. rehost=$(echo $h|sed 's/\./\\./g')
  43. semlock $lock
  44. if [ $ret -eq 0 ]
  45. then
  46. last_up=$($date_cmd)
  47. #echo "${res}$rep $hstr $last_up" >> $2
  48. else
  49. rep="down"
  50. #echo "${res}down $hstr $last_up" >> $2
  51. fi
  52. sed -i "s/^\\s*$rehost\\s.*$/$(printf "%30s %8s %30s\n" $1 $rep "$last_up")/" "$2"
  53. semrelease $lock
  54. sleep 5
  55. done
  56. }
  57. for h in $(cat "$HOSTS_FILES")
  58. do
  59. printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
  60. done
  61. for h in $(cat "$HOSTS_FILES" )
  62. do
  63. upd_ping $h $res_file $lock &
  64. pid=$!
  65. pids="${pids}\n$pid"
  66. echo "$h updated by $pid" >&2
  67. done
  68. sleep 1
  69. while [ 1 ]
  70. do
  71. semlock $lock
  72. clear
  73. echo "Ping radar $($date_cmd)\n"
  74. printf "%30s %8s %30s\n" "host" "ping" "last up"
  75. for i in $(seq 70); do echo -n "="; done
  76. echo ""
  77. #cat $res_file
  78. #grep -v " down " $res_file
  79. #grep " down " $res_file
  80. sed -E -e "s/\snever$/$(tput sgr0)\0/" -e "s/^.* down .*$/$(tput setaf 1)\0$(tput sgr0)/" $res_file
  81. semrelease $lock
  82. sleep 1
  83. done