#! /bin/bash
nb_times="60"
nap="5"
filter=""
searched=""
case "$1" in
-v|--version)
	echo "$0 : version1.0 revision 1 19 oct 2014 by SISalp"
	exit 0
	;;
-h|?|--help)
	echo "usage : "
	echo "$0 [nb_timex] [nap_times|mn|h] [search] [-filter]"
	echo "nb_times number of iterations followed by x, default is $nb_times x"
	echo "nap_time wait time between two iterations followed by s, mn or h, default is $nap s"
	echo "search is a string that selects the processes to be watched"
	echo "filter is a string that selects the processes to be omitted"
	echo "$0 --version"
	echo "$0 --update"
	echo "$0 --help"
	echo ""
	echo "example :"
	echo "$0 20x 5s search_string -except_string"
	exit 0
	;;
-u|--update)
	rm -f $0.new-version
	if wget -q http://download.sisalp.net/scripts/`basename $0` -O $0.new-version ; then
		diff $0 $0.new-version
		mv $0.new-version $0
		chmod 755 $0
		$0 --version
		exit 0
	else
		echo "$0 Cannot download new version from http://download.sisalp.net/scripts/`basename $0`. Failure"
		echo "Are you root ?"
		exit 1
	fi
	;;
esac
CHECK_OPTIONS ()
{
for parameter in $* ; do
	case "$parameter" in
	[1-9]x|[1-9][0-9]x|[1-9][0-9][0-9]x|[1-9][0-9][0-9][0-9]x|[1-9][0-9][0-9][0-9][0-9]x)
		nb_times=`echo "$parameter" | cut -d"x" -f1`
		;;
	[1-9]s|[1-9][0-9]s|[1-9][0-9][0-9]s|[1-9][0-9][0-9][0-9]s|[1-9][0-9][0-9][0-9][0-9]s)
		nap=`echo "$parameter" | cut -d"s" -f1`
		;;
	[1-9]mn|[1-9][0-9]mn|[1-9][0-9][0-9]mn|[1-9][0-9][0-9][0-9]mn|[1-9][0-9][0-9][0-9][0-9]mn)
		nap_mn=`echo "$parameter" | cut -d"m" -f1`
		nap=`expr $nap_mn \* 60`
		;;
	[1-9]h|[1-9][0-9]h|[1-9][0-9][0-9]h|[1-9][0-9][0-9][0-9]h|[1-9][0-9][0-9][0-9][0-9]h)
		nap_h=`echo "$parameter" | cut -d"m" -f1`
		nap=`expr $nap_mn \* 3600`
		;;
	-*)
		if [ ! -z "$filter" ] ; then
			filter="$filter\|`echo "$parameter" | cut -d"-" -f2-`"
		else
			filter="`echo "$parameter" | cut -d"-" -f2-`"
		fi
		;;
	*)
		if [ ! -z "$searched" ] ; then
			searched="$searched\|$parameter"
		else
			searched="$parameter"
		fi
		;;
	esac
done
if [ ! -z "$filter" ] ; then
	echo "$0 ${nb_times}x ${nap}s $searched -$filter"
else
	echo "$0 ${nb_times}x ${nap}s $searched"
fi
}
CHECK_OPTIONS $*
process_list=`ps axo pid,cmd`
echo "$process_list" | grep -v "ps axo pid,cmd" > /tmp/list.tmp
for ((  iter = 1 ;  iter <= $nb_times ;  iter++  )) ; do
	new_list=`ps axo pid,cmd`
	date
	echo "$new_list" | grep -v "ps axo pid,cmd" > /tmp/new_list.tmp
	if [ ! -z "$searched" ] &&  [ ! -z "$filter" ] ; then
		diff /tmp/list.tmp /tmp/new_list.tmp | grep ">\|<" | sed s/'^>'/'\t\t\tnew >'/ | grep "$searched" | grep -v "$filter"
	else
		if [ ! -z "$searched" ] ; then
			diff /tmp/list.tmp /tmp/new_list.tmp | grep ">\|<" | sed s/'^>'/'\t\t\tnew >'/ | grep "$searched"
		else
			if [ ! -z "$filter" ] ; then
				diff /tmp/list.tmp /tmp/new_list.tmp | grep ">\|<" | sed s/'^>'/'\t\t\tnew >'/ | grep -v "$filter"
			else
				diff /tmp/list.tmp /tmp/new_list.tmp | grep ">\|<" | sed s/'^>'/'\t\t\tnew >'/
			fi
		fi
	fi
	mv /tmp/new_list.tmp /tmp/list.tmp
	sleep $nap
done
rm /tmp/list.tmp
date
exit 0
