#!/bin/bash

### BEGIN INIT INFO
# Provides:		moxa_snmpd
# Required-Start:	
# Required-Stop:	
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	net snmpd with Moxa defined MIB
# Kill script by name
# Note: use regular expression to avoid getting rows like "grep xxx_script"
# The type sould be like [m]x_di_daemon.sh
### END INIT INFO

mxagent_path=/etc/mxAgent
script_path=$mxagent_path/scripts/snmp

#for script
export MX_DB_PATH=/dev/shm/snmp.db
export MX_SCRIPT_PATH=$mxagent_path/scripts

kill_script() 
{
	local name=$1
	pid=`ps aux | grep "$name" |  sed -n "s:root\s*\(\w*\).*:\1:p"`
	for i in $pid; do
	    kill -9 $i &> /dev/null
	done
}


mx_snmp_start() 
{
	echo "Starting Moxa SNMP..."

	# Initial the # of 'INSERT INTO "mxSerial" VALUES(1,0,0);' line in /etc/mxAgent/db/snmp.sql
	. $script_path/mx_serial_init.sh &> /dev/null

	# Init Scripts (show remove to rc.local)
	rm -rf $MX_DB_PATH
	sqlite3 $MX_DB_PATH < $mxagent_path/db/snmp.sql
	
	# due to bios tool read ini the same path ...
	cd $script_path 

	#insmod $script_path/mxiomem.ko
	#. $script_path/mx_dio_init.sh &> /dev/null
	. $script_path/mx_product_init.sh &> /dev/null
	. $script_path/mx_bios_mgmt_init.sh &> /dev/null
	. $script_path/mx_sensor_mgmt_init.sh &> /dev/null
	. $script_path/mx_watchdog_init.sh &> /dev/null
	#. $script_path/mx_di_update.sh  &> /dev/null
	. $script_path/mx_system_info.sh &> /dev/null
	
	# Daemon Scripts
	$script_path/mx_snmp_daemon.sh &

	# MxAgent
	start-stop-daemon --start --quiet --background --pidfile /var/run/mxAgent.pid --exec /bin/mxAgent -- -c /etc/mxAgent/mxAgent.ini -d ${MX_DB_PATH} -l /var/log/mxAgent.log;
	
	# snmpd
	start-stop-daemon --start --quiet --background --pidfile /var/run/snmpd.pid --exec /sbin/snmpd -- -Lf /var/log/snmpd.log -M /usr/local/share/snmp/mibs;

	# Jared, Update the pid of mxAgent in DB for snmp signal killing.
	sleep 1
	sqlite3 $MX_DB_PATH "UPDATE mxAgent SET pid=`cat /var/run/mxAgent.pid`" &> /dev/null

	echo "Starting Moxa SNMP OK"
}

mx_snmp_stop() 
{
	echo "Stopping Moxa SNMP ..."
	killall mxAgent &> /dev/null

	killall snmpd &> /dev/null

	# remove bios module
	#rmmod mxiomem &> /dev/null

	kill_script "[m]x_snmp_daemon.sh"

	if [ -f $MX_DB_PATH ]; then
		sqlite3 $MX_DB_PATH "delete from mxUsbDevice"
	
		#mount -o remount,rw /
		sqlite3 /dev/shm/snmp.db ".dump" > /etc/mxAgent/db/.moxa.sql
		result=`grep -r "ERROR: (5) database is locked" /etc/mxAgent/db/.moxa.sql`
		while [ x"$result" != x"" ];
		do
			:> /etc/mxAgent/db/.moxa.sql
			sqlite3 $MX_DB_PATH ".dump" > /etc/mxAgent/db/.moxa.sql
			result=`grep -r "ERROR: (5) database is locked" /etc/mxAgent/db/.moxa.sql`
			sleep 1
		done
		mv /etc/mxAgent/db/.moxa.sql /etc/mxAgent/db/snmp.sql
		sync
		#umount /
	
		rm -rf $MX_DB_PATH
	fi
	sync
	echo "Stopping Moxa SNMP OK"
}


case "$1" in
start)	
	mx_snmp_start
	;;
stop) 	
	mx_snmp_stop
	;;
restart) 	
	mx_snmp_stop
	mx_snmp_start
	;;
*)	echo "Usage: /etc/init.d/$0 [start|stop]"
        ;;
esac
exit 0
