#!/bin/sh

# ---------------------------------------------------------
# start-stop-status commands for Synology NAS
# Part of Workshop-Net NGI
# 
# Copyright M. Rothschink, AxoNet Software GmbH 2023
#
# Version 1.0   20.04.2023 First version for NGI
# ---------------------------------------------------------

# check if called from DSM, then SYNOPKG_PKGDEST is set to the binary directory
# otherwise use default path
if [ -z "$SYNOPKG_PKGDEST" ]
then
   SYNOPKG_PKGDEST=/var/packages/workshop-net-ngi/target
fi
if [ -z "$SYNOPKG_PKGNAME" ]
then
   export SYNOPKG_PKGNAME="workshop-net-ngi"
fi

PID=0
DESC="ngi"
PID_FILE="/var/packages/${SYNOPKG_PKGNAME}/tmp/${SYNOPKG_PKGNAME}.pid"
LOG=/var/packages/${SYNOPKG_PKGNAME}/var/log/start-stop.log
mkdir -p /var/packages/${SYNOPKG_PKGNAME}/var/log

logrotate /var/packages/${SYNOPKG_PKGNAME}/scripts/start-stop.logrotate -s /var/packages/${SYNOPKG_PKGNAME}/var/log/logrotate.status

log()
{
    echo -e `date +"%Y/%m/%d %T"` $* >> ${LOG}
    echo -e $*
}

usage()
{
    log Usage
    log "    $0 (start|stop|restart|status)"
    exit 1
}

start()
{
    status
    if [ $? = 0 ]
    then
        log "Starting ${DESC}"
        CWD=`pwd`
        cd ${SYNOPKG_PKGDEST}
        log `pwd`
        ${SYNOPKG_PKGDEST}/NGI >> ${LOG} &
        echo $! > ${PID_FILE}
        cd ${CWD}
        status
    fi
}

stop()
{
    status
    if [ $? = 1 ]
    then
        log "Stopping $PID ${DESC}"
        kill ${PID}
        rm -f "$PID_FILE"
        sleep 5
        status
        if [ $? = 1 ]
        then
            log "Killing $PID ${DESC}"
            kill -9 ${PID}
            sleep 10
            status
        fi
    else
        log "Nothing to stop"
    fi
}

restart()
{
    Log "restart()"
    stop
    sleep 5
    log "Restarting ${DESC}"
    start
}

# return 1 if running, otherwise 0
status()
{
    if [ -f "$PID_FILE" ]; 
    then
        PID=$(cat "${PID_FILE}")
        PS=`ps ax| grep ${PID} | grep workshop-net-ngi | grep -v grep `
        #log "PS=$PS"
        if [ -n "$PS" ]
        then
            log "${DESC} is running with PID=${PID} ..."
            return 1  # running
        else
            log "${DESC} is NOT running, removing invalid PID file ..."
            rm -f ${PID_FILE}  # Remove Invalid PID
            return 0  # NOT running
        fi
    else
        PS=`ps ax | grep workshop-net-ngi | grep /NGI | grep -v grep | awk '{$1=$1};1' `
        #log "PS=$PS"
        PID=`echo $PS | cut -f1 -d' '`
        if [ -n "$PID" ]
        then
            echo $PID > ${PID_FILE}
            log "${DESC} is running with PID=${PID}, recreated PID file ..."
            return 1  # running
        else
            log "${DESC} is NOT running ...."
            return 0  # NOT running
        fi
    fi
}


case $1 in
   "start")
            log "---- `whoami` $1 ----"
            start
            exit $(( ! $? ))
            ;;
   "stop")
            log "---- `whoami` $1 ----"
            stop
            exit $?
            ;;
   "restart")
            log "---- `whoami` $1 ----"
            restart
            exit $?
            ;;
   "status")
            status
            exit $(( ! $? ))
            ;;
    "prestart")
            exit 0
            ;;
    "prestop")
            exit 0
            ;;
   *)
            usage
            ;;
esac
