#!/bin/sh
### BEGIN INIT INFO
# Provides:          microbrowser
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Should-Start:
# Default-Start:     5
# Default-Stop:      0 1 6
# Short-Description: SpiderControl MicroBrowser
# Description:       SpiderControl MicroBrowser, Usage: microbrowser { start | stop | restart | status }
# Author:            F.Jambois <jambois@ininet.ch>
### END INIT INFO

NAME="microbrowser"
WORKDIR=/home/pi/MicroBrowser
PIDFILE=/var/run/${NAME}.pid
LOGCMD=/var/log/${NAME}.cmd
# LOGFILE=/var/log/${NAME}.log
LOGFILE=/dev/null
APP=MicroBrowser
DAEMON=$WORKDIR/$APP
BOOTDELAY=10

PID=$(pidof $APP)

cd $WORKDIR

IsBootup=1
[ -f $LOGCMD ] && IsBootup=0

do_log()
{
  echo `date` `tty` $0 $* >> $LOGCMD
  echo `date` `tty` $0 $* >> $LOGFILE
}

# Function that starts the daemon/service
do_start()
{
  #PID=$(pidof $APP)
  if [[ -z $PID ]]; then
     # cd $WORKDIR
     if [ $IsBootup -eq 1 ]; then
        #echo `date` Starts with runlevel `runlevel` >> $LOGCMD
        echo `date` `tty` Bootup, start ${NAME} in ${BOOTDELAY}s... >> $LOGCMD
        echo "sleep ${BOOTDELAY}s on bootup"
        sleep $BOOTDELAY
        #echo `date` `tty` Go >> $LOGCMD
     fi
     echo "${LOG_TAG}${NAME} starting..."
     $DAEMON --pidfile ${PIDFILE} > $LOGFILE 2>&1 &
     sleep 1
     PID=$(pidof $APP)
     [[ -z $PID ]] && { echo "${LOG_TAG}${NAME} Failed to start ${NAME}"; exit 1; }
     echo "${LOG_TAG}${NAME} is started ($PID)"
     echo "`date` `tty` ${NAME} is started (${PID})" >> $LOGCMD
  else
    echo "${LOG_TAG}${NAME} already started ($PID)"
  fi
}

# Function that stops the daemon/service (and wait 10, 12s)
do_stop()
{
  if [[ -f $PIDFILE ]]; then
    PID=`cat ${PIDFILE}`
    sleep 2
    echo "${LOG_TAG}${NAME} stop ($PID)"
    /bin/kill -15 $PID 2> /dev/null
    echo "${LOG_TAG}zzz... (2s)"
    sleep 2
    if [[ -f $PIDFILE ]]; then
        echo "${LOG_TAG}zzz... (4s)"
        sleep 4
        # if process still exist, force kill -9 pid
        ps -o pid $PID > /dev/null 2>&1
        [[ $? -eq 0 ]] && { echo "${LOG_TAG}Force kill process $PID"; /bin/kill -9 $PID 2> /dev/null; sleep 2; }
        # if pid file still exist, delete it
        [[ -f $PIDFILE ]] && rm -f $PIDFILE && echo "${LOG_TAG}Process file deleted"
    fi
    PID=$(pidof $APP) && echo "${LOG_TAG}zzz... (2s)" && sleep 2
    PID=$(pidof $APP) && echo "${LOG_TAG}zzz... (2s)" && sleep 2
    PID=$(pidof $APP) && echo "${LOG_TAG}zzz... (2s)" && sleep 2
    PID=$(pidof $APP) && echo "${LOG_TAG} $APP ($PID) is still running!!!"
    return 1
  else
    echo "${LOG_TAG}${NAME} already stopped or is not running yet"
  fi
}

do_restart()
{
  do_stop
  # [[ $? -eq 1 ]] && echo "zels: zzz..." && sleep 8
  do_start
}

do_status()
{
  if [[ -f $PIDFILE ]]; then
    ps -o pid,user,%mem,%cpu,command -p `cat $PIDFILE`
  else
    echo "${LOG_TAG} Process is not started"
  fi
}

case $1 in
start)
    do_log $*
    do_start
    ;;
stop)
    do_log $*
    do_stop
    ;;
restart)
    do_log $*
    do_restart
    ;;
status)
    do_status
    ;;
*)
    echo "${LOG_TAG}Usage: $NAME { start | stop | restart | status }" >&2
    exit 3
    ;;
esac
