#!/bin/sh
#
# /etc/init.d/mdadmstat
#
### BEGIN INIT INFO
# Provides: mdadmstat
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Callback for mdadm monitoring
### END INIT INFO

# Version
# V 1.0 released;
# V 1.1 released; readd can be disabled
# V 1.2 released; call lsusb only once
# V 1.3 released; create return file
# V 1.4 released; add _ in service_started

VER='1.4'


BIN_CALLBACK="/opt/softraid/raid-status.sh"
DIR_CALLBACK="/opt/softraid"
BIN_MDADM="/sbin/mdadm"
BIN_LOGGER="/bin/logger"
PID_MDADM="/var/run/mdadm.pid"
LOGHIST="/var/log/softraid/raid.history"
BIN_DATE="/bin/date"
TOUCH="/usr/bin/touch"
RAIDSTAT=/var/run/raidstat
RM="/bin/rm"
LOGFILEDIR="/var/log/softraid"
RETURNFILE=$LOGFILEDIR/return.ini

LDATE=$($BIN_DATE)
. /etc/rc.status

rc_reset

case "$1" in
  start)
		if [ -e $PID_MDADM ]; then
			echo  "Callback for mdadm monitoring already running"
			exit 0
		else
			echo -n "Starting callback for mdadm monitoring"
			if [ ! -f $DIR_CALLBACK/softraid.lib ]; then
				echo -n "softraid.lib does not exist! "
				echo "Callback for mdadm monitoring not started"
				$BIN_LOGGER -t Softraid: /etc/init.d/mdadmstat: softraid.lib does not exist!
				LOGLINE="$LDATE: critical: softraid.lib does not exist!"
				echo $LOGLINE >> $LOGHIST
				exit 1
			fi
			. $DIR_CALLBACK/softraid.lib
			LDATE=$($BIN_DATE)
			touch $PID_MDADM
			$BIN_MDADM --monitor -p $BIN_CALLBACK --increment 10 --scan <&- >&- 2>&- &
			echo $! > $PID_MDADM
			$BIN_LOGGER -t Softraid: SoftRAID monitoring service has been started.
			$BIN_CALLBACK
			if [ ! -f "$LOGHIST" ]; then
				LOGLINE="$LDATE: info: Raid history started"
				echo $LOGLINE > $LOGHIST	
			fi
			LOGLINE="$LDATE: info: mdadmstat: SoftRAID monitoring service has been started."
			echo $LOGLINE >> $LOGHIST
			$RM -f $RAIDSTAT
			$TOUCH  $RAIDSTAT
			$TOUCH $LOGFILEDIR/first.ini
			if [ ! -d "$LOGACTION" ]; then
				mkdir -p $LOGACTION
			fi
			if [ ! -f "$HDSIZEFILE" ]; then
				# default HD size is 250 GB
				echo 250 > $HDSIZEFILE	
			fi
			LOGLINE="$LDATE: info: mdadmstat: VER='$VER'"
			echo $LOGLINE >> $LOGHIST
			get_hw_type_once
			handle_bitmap
			prog=`ps -o comm= -p $PPID`
			LOGLINE="$LDATE: info: mdadmstat: Caller-prog=$prog"
			echo $LOGLINE >> $LOGHIST
			print_version
			last_action="service_started"
			exit_text="OK"
			exit_code=0
			RETLINE="last_action=$last_action`echo "\n"`exit_text='$exit_text'`echo "\n"`exit_code=$exit_code"
			echo -e "$RETLINE" >$RETURNFILE
		fi
		sleep 1
		rc_status -v
		;; 
  stop)
		if [ -e $PID_MDADM ]; then
			echo -n "Shutting down callback for mdadm monitoring."
			killproc -p $PID_MDADM -SIGTERM $BIN_MDADM &> /dev/null
			$BIN_LOGGER -t Softraid: SoftRAID monitoring service has been shutdown.
			LDATE=$($BIN_DATE)
			LOGLINE="$LDATE: info: mdadmstat: SoftRAID monitoring service has been shutdown."
			echo $LOGLINE >> $LOGHIST	
			$RM -f $RAIDSTAT
			prog=`ps -o comm= -p $PPID`
			LOGLINE="$LDATE: info: mdadmstat: Caller-prog=$prog"
			echo $LOGLINE >> $LOGHIST
		else
			echo "Callback for mdadm monitoring not running."
			exit 0
		fi
		sleep 1
		rc_status -v
			;;
    restart)
			## Stop the service and regardless of whether it was
			## running or not, start it again.
			$0 stop
			$0 start

			# Remember status and be quiet
			rc_status
			;;
    status)
		echo -n "Checking callback for mdadm monitoring "
			## Check status with checkproc(8), if process is running
			## checkproc will return with exit status 0.

			# Status has a slightly different for the status command:
			# 0 - service running
			# 1 - service dead, but /var/run/  pid  file exists
			# 2 - service dead, but /var/lock/ lock file exists
			# 3 - service not running
			checkproc -p $PID_MDADM $BIN_MDADM 2>&1 > /dev/null
			rc_status -v
			;;
    *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac
rc_exit 



