#!/bin/sh

# fixed for xl by 3Gteam

if [ "$1" = "autoconf" ]; then
	if which xl > /dev/null ; then
		echo yes
	else
		echo "no (xl not found)"
		exit 1
	fi
	if [ -r /proc/net/dev ]; then
		echo yes
	else
		echo "no (/proc/net/dev not found)"
		exit 1
	fi
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Xen Traffic'
	echo 'graph_vlabel bits received (-) / sent (+) per ${graph_period}'
	echo 'graph_args --base 1024 -l 0'
	echo 'graph_category Virtualization'

	DOMAINS=$(xl list | awk '{print $1}' | egrep -v "^(Name|Domain-0)")

	for dom in $DOMAINS; do
		name=$( echo $dom | tr .- __ )
		sname=$( echo $name | cut -f1 -d"_" | cut -c1-8 )

		echo 's_'$name'_RX.label received'
		echo 's_'$name'_RX.type DERIVE'
		echo 's_'$name'_RX.min 0'
		echo 's_'$name'_RX.graph no'
		echo "s_${name}_RX.cdef s_${name}_RX,8,*"

		echo "s_${name}_TX.label ${sname}"
		echo 's_'$name'_TX.type DERIVE'
		echo 's_'$name'_TX.min 0'
		echo "s_${name}_TX.negative s_${name}_RX"
		echo "s_${name}_TX.cdef s_${name}_TX,8,*"
	done
	exit 0
fi

DOMAINS=$(xl list | awk '{print $1}' | egrep -v "^(Name|Domain-0)")

for dom in $DOMAINS; do
#	dev=$( xl list --long $dom | awk '/vifname / { print $2 }' | sed 's/)//' ) #'

#	if [ "$dev" = "" ]; then
		devs=$( xl network-list $dom |\
		egrep "^[0-9]+" | sed 's@^.*vif/\([0-9]*\)/\([0-9]*\).*$@vif\1.\2@')
#	fi

	name=$( echo $dom | tr .- __ ) 

	txval=0
	rxval=0
	for dev in $devs; do
		txrx=$( awk -v interface="$dev" \
			'BEGIN { gsub(/\./, "\\.", interface) } \
			$1 ~ "^" interface ":" {
				split($0, a, /: */); $0 = a[2]; \
				print $1 " " $9 \
			}' \
			/proc/net/dev )

		txval=$((txval+`echo "$txrx" | awk '{print $1}'`))
		rxval=$((rxval+`echo "$txrx" | awk '{print $2}'`))

	done

	echo "s_${name}_TX.value ${txval}"
	echo "s_${name}_RX.value ${rxval}"

done
