| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- #!/bin/bash
- #########################################################################
- # Check WIFI and Reachability #
- # Created by PM-DoIT #
- # ver 0.7 #
- #########################################################################
- #------------------------------ VARIABLES ------------------------------#
- DAT=$(date +%y%m%d" "%T)
- LOG="/var/log/wifi.log"
- WWW=/var/www/wifi/
- test -d $WWW || mkdir $WWW
- #------------------------------ NIC-CHECK ------------------------------#
- interfaces(){
- NIC=$(find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n' | grep -v wlan | head -1)
- WIC=$(find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n' | grep wlan | head -1)
- RTR=$(ip route | grep ^default | awk '{print $3}')
- }
- #------------------------------ IP-CHECK -------------------------------#
- address(){
- echo "------------------------------------"
- if [ ! -z "$NIC" ]; then LIP=$(ip a | grep $NIC | grep "state UP"); fi
- if [ ! -z "$WIC" ]; then WIP=$(ip a | grep $WIC | grep "state UP"); fi
- if [ ! -z "$NIC" ];
- then
- echo -e "- \e[1;32mExist\e[0m \e[1;34mLAN\e[0m interface [\e[1;34m$NIC\e[0m]"
- if [ ! -z "$LIP" ];
- then
- echo -e "- \e[1;34mLAN\e[0m interface is [\e[1;32mUP\e[0m]"
- IPA=$(ifconfig $NIC | grep -w inet | awk '{print $2}')
- echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]"
- if [ ! -z "$WIC" ];
- then
- echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]"
- if [ ! -z "$WIP" ];
- then
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]"
- echo -e "- \e[1;31mDisabling\e[0m [\e[1;36m$WIC\e[0m]"
- ifconfig $WIC down
- else
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]"
- fi
- else
- echo -e "- \e[1;31mNOT\e[0m exist \e[1;36mWIFI\e[0m interface"
- fi
- exit 1
- else
- echo -e "- \e[1;34mLAN\e[0m interface is [\e[1;31mDOWN\e[0m]"
- echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]"
- if [ ! -z "$WIP" ];
- then
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]"
- IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}')
- echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]"
- else
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]"
- echo -e "- \e[1;32mEnabling\e[0m [\e[1;36m$WIC\e[0m]"
- ifconfig $WIC up
- sleep 2
- /usr/bin/systemctl restart NetworkManager
- sleep 4
- interfaces
- IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}')
- echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]"
- fi
- fi
- elif [ ! -z "$WIC" ];
- then
- echo -e "- \e[1;32mExist\e[0m \e[1;36mWIFI\e[0m interface [\e[1;36m$WIC\e[0m]"
- if [ ! -z "$WIP" ];
- then
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;32mUP\e[0m]"
- IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}')
- echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]"
- else
- echo -e "- \e[1;36mWIFI\e[0m interface is [\e[1;31mDOWN\e[0m]"
- echo -e "- \e[1;32mEnabling\e[0m [\e[1;36m$WIC\e[0m]"
- ifconfig $WIC up
- sleep 2
- /usr/bin/systemctl restart NetworkManager
- sleep 4
- interfaces
- IPA=$(ifconfig $WIC | grep -w inet | awk '{print $2}')
- echo -e "- \e[1;32mActual\e[0m IP address [\e[1;35m$IPA\e[0m]"
- fi
- else
- echo -e "- \e[1;31mNOT\e[0m exist ANY interface"
- exit 1
- fi
- }
- #------------------------------ SIGNAL ---------------------------------#
- signal(){
- if [ -z "$WIC" ]; then
- exit 1
- else
- iwconfig $WIC | grep -i --color quality | sed 's/=/ /g' | sed 's/\// /g' | awk '{print $4,$3}' > /tmp/wifi
- SID=$(iwconfig $WIC | grep ESSID | sed 's/:/ /g' | sed 's/"//g' | awk '{print $5}')
- TOT=$(cat /tmp/wifi | awk '{print $1}')
- ACT=$(cat /tmp/wifi | awk '{print $2}')
- PER=$((100*$ACT/$TOT))
- echo $PER > /tmp/wifi
- fi
- }
- #----------------------------- FIX-WIFI --------------------------------#
- fixwifi(){
- echo -e "- \e[1;31mRestarting\e[0m interface [\e[1;36m$WIC\e[0m]"
- ifconfig $WIC down
- sleep 1
- iwconfig $WIC power off
- ifconfig $WIC up
- sleep 2
- /usr/bin/systemctl restart NetworkManager
- sleep 3
- echo "$DAT restarted $WIC" >> $LOG
- }
- #------------------------------ LATENCY --------------------------------#
- latency(){
- ping -c 2 $RTR > /tmp/wifi.ping
- MS=$(cat /tmp/wifi.ping | grep icmp_seq | sed 's/=/ /g' | awk '{print $10}' | sort | tail -1)
- echo "$DAT ${PER}% ${MS}ms" >> $LOG
- if [ -z "$MS" ]; then fixwifi; fi
- }
- #------------------------------- REPORT --------------------------------#
- report(){
- echo "------------------------------------"
- echo -e "Reachability [\e[1;32m$RTR\e[0m] (\e[1;33m$MS\e[0m)ms"
- echo -e "Wifi Link Quality [\e[1;32m$SID\e[0m] (\e[1;33m$PER\e[0m)%"
- echo "------------------------------------"
- }
- #------------------------------ GRAPHING -------------------------------#
- graphing(){
- /usr/bin/rrdtool update /var/www/wifi/wifi.rrd N:$PER
- echo -e "- \e[1;32mGenerating\e[0m [RRD] graphs"
- RRDPATH="/var/www/wifi/"
- REDL="#1E90FF"
- REDD="#00008B"
- #-------------------------------- HOUR ---------------------------------#
- rrdtool graph $RRDPATH/hour.png --title="6h Period of WiFi Signal Quality" --start -6h \
- --height=240 \
- --width=640 \
- --lower-limit=0 \
- --vertical-label='quality' \
- --font TITLE:12: \
- --font AXIS:8: \
- --font LEGEND:10: \
- --font UNIT:8: \
- DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \
- LINE:wifi$REDD:"%" \
- AREA:wifi$REDL \
- GPRINT:wifi:LAST:"Current\:%8.2lf %s" \
- GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \
- GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1
- #-------------------------------- DAY ----------------------------------#
- rrdtool graph $RRDPATH/day.png --title="Day Period of WiFi Signal Quality" --start -1d \
- --height=240 \
- --width=640 \
- --lower-limit=0 \
- --vertical-label='quality' \
- --font TITLE:12: \
- --font AXIS:8: \
- --font LEGEND:10: \
- --font UNIT:8: \
- DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \
- LINE:wifi$REDD:"%" \
- AREA:wifi$REDL \
- GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \
- GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \
- GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1
- #-------------------------------- WEEK ---------------------------------#
- rrdtool graph $RRDPATH/week.png --title="Week Period of WiFi Signal Quality" --start -1w \
- --height=240 \
- --width=640 \
- --lower-limit=0 \
- --vertical-label='quality' \
- --font TITLE:12: \
- --font AXIS:8: \
- --font LEGEND:10: \
- --font UNIT:8: \
- DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \
- LINE:wifi$REDD:"%" \
- GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \
- GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \
- GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1
- #------------------------------- MONTH ---------------------------------#
- rrdtool graph $RRDPATH/month.png --title="Month Period of WiFi Signal Quality" --start -1m \
- --height=240 \
- --width=640 \
- --lower-limit=0 \
- --vertical-label='quality' \
- --font TITLE:12: \
- --font AXIS:8: \
- --font LEGEND:10: \
- --font UNIT:8: \
- DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \
- LINE:wifi$REDD:"%" \
- GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \
- GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \
- GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1
- #-------------------------------- YEAR ---------------------------------#
- rrdtool graph $RRDPATH/year.png --title="Year Period of WiFi Signal Quality" --start -1y \
- --height=240 \
- --width=640 \
- --lower-limit=0 \
- --vertical-label='quality' \
- --font TITLE:12: \
- --font AXIS:8: \
- --font LEGEND:10: \
- --font UNIT:8: \
- DEF:wifi=$RRDPATH/wifi.rrd:wifi:AVERAGE \
- LINE:wifi$REDD:"%" \
- GPRINT:wifi:AVERAGE:"Average\:%8.2lf %s" \
- GPRINT:wifi:MIN:"Minimum\:%8.2lf %s" \
- GPRINT:wifi:MAX:"Maximum\:%8.2lf %s\n" > /dev/null 2>&1
- }
- #-------------------------------- CORE ---------------------------------#
- clear
- interfaces
- address
- signal
- latency
- graphing
- report
|