mir3c/squashfs-root/usr/sbin/netdig.sh

158 lines
4.2 KiB
Bash
Executable File

#!/bin/ash
APP_NAME=$0
RET=0
TMP_FILE_="/tmp/netdig_tmp"
usage(){
echo "Usage: $0 config-file"
echo " config-file ex:"
echo " 192.1681.1.1:4:100"
echo " ip:count:max-of-random-delay"
}
read_config_from_file(){
if [ $# -ne 1 ]; then
usage
exit 1
else
CONFIG_FILE="$1"
if [ -f $CONFIG_FILE ]; then
IP=$(cat $CONFIG_FILE | awk -F ':' '{print $1}')
COUNT=$(cat $CONFIG_FILE | awk -F ':' '{print $2}')
MAX_DELAY=$(cat $CONFIG_FILE | awk -F ':' '{print $3}')
if [ "$IP" = "" ] || [ "$COUNT" = "" ] || [ "$MAX_DELAY" = "" ]; then
echo "config file parse error"
usage
exit 3
fi
else
echo "config file miss"
exit 2
fi
fi
}
read_config_from_uci(){
COUNT=$(uci get netdig.config.count | sed 's/[^0-9]//g' 2> /dev/NULL)
MAX_DELAY=$(uci get netdig.config.max_delay | sed 's/[^0-9]//g' 2> /dev/NULL)
}
parse_ping_file(){
TMP_FILE=$1
BUSYBOX_PING=$(ping -v 2>&1 | grep BusyBox > /dev/NULL ; echo $?)
echo "ping tmp file $TMP_FILE"
if [ -f $TMP_FILE ]; then
if [ $BUSYBOX_PING == "0" ]; then
TRUE_IP=$(cat $TMP_FILE | grep PING | cut -d ' ' -f 3 | sed 's/[(,)]//g' 2> /dev/NULL)
CNAME=$(cat $TMP_FILE | grep PING | cut -d ' ' -f 2 2> /dev/NULL)
MIN=$(cat $TMP_FILE | grep round-trip | cut -d ' ' -f 4 | cut -d '/' -f 1 2> /dev/NULL)
AVG=$(cat $TMP_FILE | grep round-trip | cut -d ' ' -f 4 | cut -d '/' -f 2 2> /dev/NULL)
MAX=$(cat $TMP_FILE | grep round-trip | cut -d ' ' -f 4 | cut -d '/' -f 3 2> /dev/NULL)
MDEV=0
TRANS=$(cat $TMP_FILE | grep received | cut -d ' ' -f 1 2> /dev/NULL)
RECV=$(cat $TMP_FILE | grep received | cut -d ' ' -f 4 2> /dev/NULL)
#LOSS=$((TRANS-RECV))
TIME=0
else
TRUE_IP=$(cat $TMP_FILE | grep PING | cut -d ' ' -f 3 | sed 's/[(,)]//g' 2> /dev/NULL)
CNAME=$(cat $TMP_FILE | grep PING | cut -d ' ' -f 2 2> /dev/NULL)
MIN=$(cat $TMP_FILE | grep rtt | cut -d ' ' -f 4 | cut -d '/' -f 1 2> /dev/NULL)
AVG=$(cat $TMP_FILE | grep rtt | cut -d ' ' -f 4 | cut -d '/' -f 2 2> /dev/NULL)
MAX=$(cat $TMP_FILE | grep rtt | cut -d ' ' -f 4 | cut -d '/' -f 3 2> /dev/NULL)
MDEV=$(cat $TMP_FILE | grep rtt | cut -d ' ' -f 4 | cut -d '/' -f 4 2> /dev/NULL)
TRANS=$(cat $TMP_FILE | grep received | cut -d ' ' -f 1 2> /dev/NULL)
RECV=$(cat $TMP_FILE | grep received | cut -d ' ' -f 4 2> /dev/NULL)
#LOSS=$(cat $TMP_FILE | grep received | cut -d ' ' -f 6 | sed 's/%//g' 2> /dev/NULL)
TIME=$(cat $TMP_FILE | grep received | cut -d ' ' -f 10 | sed 's/ms//g' 2> /dev/NULL)
fi
LOSS=`awk 'BEGIN{printf "%.0f",('$((TRANS-RECV))'/'$TRANS')*100}'`
TIMESTAMP=$(date +%s)
else
echo "parse ping result ($2) error ret:$RET"
return 199
fi
}
ping_test(){
ping $1 -c $COUNT > $TMP_FILE_
RET=$?
if [ $RET -ne 0 ]; then
echo "ping ($1) error ret:$RET"
return $RET
else
parse_ping_file $TMP_FILE_ $1
return $?
fi
}
random(){
RANDOM_MIN=$1
RANDOM_MAX=$2-$RANDOM_MIN
# RANDOM_RET=($RANDOM%$RANDOM_MAX + $RANDOM_MIN)
return $RANDOM_RET
}
keep_alone(){
pkill APP_NAME
}
read_config_from_uci
MAX_DELAY=$(echo $MAX_DELAY | sed 's/[^0-9]//g')
MAX_DELAY=$(printf %d $MAX_DELAY)
COUNT=$(echo $COUNT | sed 's/[^0-9]//g')
COUNT=$(printf %d $COUNT)
#echo $MAX_DELAY
if [ "$MAX_DELAY" = "0" ] || [ "$MAX_DELAY" = "" ] || [ $MAX_DELAY -gt 7200 ]; then
DELAY=0
else
RANDOM=$(cat /proc/sys/kernel/random/uuid | cut -f1 -d '-')
RANDOM=$(printf %d 0x$RANDOM)
DELAY=$(($RANDOM%$MAX_DELAY))
fi
echo DELAY=$DELAY
if [ "$COUNT" = "0" ] || [ "$COUNT" = "" ] || [ $COUNT -gt 128 ]; then
COUNT=4
fi
echo $MAX_DELAY
echo $COUNT
#exit 0
sleep $DELAY
for ip in `uci get netdig.config.ip_list`
do
echo "*********************************************************************"
ping_test $ip
RET=$?
if [ $RET -ne 0 ]; then
echo "..ping $ip error ret:$RET"
logger stat_points_none netdig_info="$RET,$ip"
else
echo "..ping $ip success ret:"
echo "ping $2 res:"
echo "ip=$ip"
echo "cname=$CNAME"
echo "TRUE_IP=$TRUE_IP"
echo "min=$MIN"
echo "avg=$AVG"
echo "max=$MAX"
echo "mdev=$MDEV"
echo "trans=$TRANS"
echo "recv=$RECV"
echo "loss=$LOSS"
echo "time=$TIME"
echo "timestamp=$TIMESTAMP"
logger stat_points_none netdig_info="$RET,$ip,$CNAME,$TRUE_IP,$MIN,$AVG,$MAX,$MDEV,$TRANS,$RECV,$LOSS,$TIME,$TIMESTAMP"
fi
done