#!/bin/bash

PROD=$0
cnt=2
size=160
idle_limit=10 #percent
avg_limit=100 #ms
tmpfile=/tmp/mon.$$
logfile=/var/log/nsvmg_error_events.log
stats_cmd=/root/stats.sh

touch /var/log/nsvmg_error_events.log

trap on_die TERM INT EXIT

on_die()
{
	rm -f $tmpfile
	exit 0
}


logit()
{
    local data="$1"
	local date=`date +"%b %d %H:%M:%S"` 

    echo "$PROD: $data"

    logger "$PROD: $data"
}

logit_crit()
{
    local data="$1"
	local date=`date +"%b %d %H:%M:%S"` 

    echo "$PROD: $data"

	echo "$date: $data" > $logfile.$$
	cat $logfile >> $logfile.$$ 
	mv $logfile.$$ $logfile

    logger "$PROD: $data"
}



run_host_check()
{
	local host=$1
	avg_f=`ping -c $cnt -w 3 -W 1500 -s $size -q -Q 0x18 $host | grep rtt | cut -d'/' -f 5`
	avg=${avg_f/\.*}
	if [ "$avg" = "" ]; then
		logit_crit "Error: Network connection failed: no route to host=$host"
		return 1
	fi
	if [ $avg -gt $avg_limit ]; then
		logit_crit "Error: Network delay too long: delay=$avg ms,  host=$host"
	fi

}

run_host_monitor()
{
	#Check for IP addresses or hostnames here
	#to determine IP connectivity 
    #Good example is: Goolge DNS 8.8.8.8 or 8.8.4.4
    #Best is a sip provider

	run_host_check 8.8.8.1
}

run_load_monitor()
{
	eval "vmstat 5 2 | awk 'END{print}' | sed \"s/^ *//;s/ *$//;s/ \{1,\}/ /g\" > $tmpfile "
	us=`cat $tmpfile | cut -d' ' -f13`
	sy=`cat $tmpfile | cut -d' ' -f14`
	id=`cat $tmpfile | cut -d' ' -f15`
	if [ $id -lt $idle_limit ]; then
		logit_crit "Error: Load to high us=$us sy=$sy id=$id"
	fi

} 

run_overrun_monitor()
{

	DEVS=$(cat /proc/net/dev | egrep "w.*g" | cut -d':' -f1 | xargs)

	for dev_name in $DEVS
	do
		dev=$(echo $dev_name | cut -d'w' -f2| cut -d'g' -f1)
		if [ -z  ${orun_idx[$dev]} ]; then
			orun_idx[$dev]=0
		fi

		orun=`wanpipemon -i $dev_name -c sc | grep "overrun" |  cut -d ':' -f2 | sed -e "s/ //g"`
		if [ $orun -gt ${orun_idx[$dev]} ]; then
			orun_idx[$dev]=$orun;
			logit_crit "Error: Overrun on $dev_name cnt= ${orun_idx[$dev]}"
		fi	
	done
	sleep 1

}


while [ 1 ]
do
	run_overrun_monitor
	run_host_monitor
	run_load_monitor
done


on_die


exit 0
