#! /bin/bash

# Change this accordingly
ONOS_HOME=${ONOS_HOME:-${HOME}/ONOS}
script_name="simple_web_server.py"

#######################
WEBDIR=${ONOS_HOME}/web
restscript=${WEBDIR}/$script_name
LOGDIR=${ONOS_LOGDIR:-${ONOS_HOME}/onos-logs}
REST_LOG="${LOGDIR}/rest.`hostname`.log"
#######################

dokill() {
    for cpid in $(ps -o pid= --ppid $1)
    do 
        dokill $cpid
    done
    echo "killing: $(ps -p $1 -o cmd=)"
    kill -9 $1 > /dev/null 2>&1
}


function lotate {
    logfile=$1
    nr_max=${2:-10}
    if [ -f $logfile ]; then
	for i in `seq $(expr $nr_max - 1) -1 1`; do
	    if [ -f ${logfile}.${i} ]; then
		mv -f ${logfile}.${i} ${logfile}.`expr $i + 1`
	    fi
	done
	mv $logfile $logfile.1
    fi
}

function stop {
    pids=`ps -edalf |grep ${script_name} | grep python | grep -v grep | awk '{print $4}'`
    for p in ${pids}; do
	if [ x$p != "x" ]; then
            dokill $p
	fi
    done
}

function status {
    nr_process=`ps -edalf |grep ${script_name} | grep python | grep -v grep | wc -l` 
    if [ ${nr_process} != 0 ] ; then
      echo "rest server is running"
    else
      echo "rest server is not running"
    fi
}

function start {
    lotate $REST_LOG 10 
    cd $WEBDIR
    $restscript > $REST_LOG 2>&1 &
}

case "$1" in
  start)
    stop
    sleep 2
    start 
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 {start|stop|status}"
    exit 1
esac
