#!/bin/sh

PS_FLAGS_PREFIX=
if [ ${SYNOPKG_DSM_VERSION_MAJOR:-5} -ge 6 ]; then
    PS_FLAGS_PREFIX="ax"
fi

if [ -e "$SYNOPKG_PKGDEST/transporter" ]; then
    TRANSPORTER_ROOT="$SYNOPKG_PKGDEST/transporter"
else
    TRANSPORTER_ROOT="$SYNOPKG_PKGDEST"
fi

start_iscsi_initiator()
{
    if [ ! -f /etc/iscsi/initiatorname.iscsi ] ; then
        if [ -x /sbin/iscsi-iname ] ; then
            ISCSI_NAME=`/sbin/iscsi-iname`
        fi
        
        if [ "x${ISCSI_NAME}" != "x" ] ; then
            echo "InitiatorName=$ISCSI_NAME" >/etc/iscsi/initiatorname.iscsi
            chmod 600 /etc/iscsi/initiatorname.iscsi
        fi
    fi

    ( lsmod | grep -qE '^libiscsi ' ) || insmod /lib/modules/libiscsi.ko
    ( lsmod | grep -qE '^libiscsi_tcp ' ) || insmod /lib/modules/libiscsi_tcp.ko
    ( lsmod | grep -qE '^iscsi_tcp ' ) || insmod /lib/modules/iscsi_tcp.ko
    
    iscsid >/dev/null 2>&1
}

start()
{
    # Fix permission
    if [ -e /var/run/postgresql ]; then
      chmod o+w /var/run/postgresql
    fi

    ps $PS_FLAGS_PREFIX | grep -v grep | grep -q "iscsid" >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        start_iscsi_initiator
    fi

    #Transporter
    PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$TRANSPORTER_ROOT/nkv-bhsvc" start
    RESULT=$?
    if [ $RESULT -ne 0 ]; then
        echo "Failed."
        exit $RESULT
    fi

    #Director
    if [ -e "$SYNOPKG_PKGDEST/nkv-dirsvc" ]; then
        PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$SYNOPKG_PKGDEST/nkv-dirsvc" start
        RESULT=$?
        if [ $RESULT -ne 0 ]; then
            echo "Failed."
            exit $RESULT
        fi
    fi
    
    return 0
}

stop()
{
    #Director
    if [ -e "$SYNOPKG_PKGDEST/nkv-dirsvc" ]; then
        # send notify uninstall
        if [ "x$SYNOPKG_PKG_STATUS" = "xUNINSTALL" ]; then
            curl --insecure -m 900 -X POST -H "Content-type: application/json" "https://localhost:4443/c/openApi?requestType=NOTIFY_UNINSTALL" >/dev/null 2>&1
        fi

        PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$SYNOPKG_PKGDEST/nkv-dirsvc" stop
        RESULT=$?
        if [ $RESULT -ne 0 ]; then
            echo "Failed."
            exit $RESULT
        fi
    fi

    #Transporter
    PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$TRANSPORTER_ROOT/nkv-bhsvc" stop
    RESULT=$?
    if [ $RESULT -ne 0 ]; then
        echo "Failed."
        exit $RESULT
    fi
    
    exit 0
}

status()
{
    [ "x$SYNOPKG_PKGDEST" = "x" -a ! -e "$SYNOPKG_PKGDEST" ] && return 150
    
    #Director
    if [ -e "$SYNOPKG_PKGDEST/nkv-dirsvc" ]; then
        PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$SYNOPKG_PKGDEST/nkv-dirsvc" status
        RESULT=$?
        if [ $RESULT -ne 0 ]; then
            return $RESULT
        fi
    fi

    #Transporter
    [ ! -e "$TRANSPORTER_ROOT/nkv-bhsvc" ] && return 150
    PS_FLAGS_PREFIX=$PS_FLAGS_PREFIX "$TRANSPORTER_ROOT/nkv-bhsvc" status
    return $RESULT
}

case "$1" in
    'start')
        start
        exit $?
    ;;

    'stop')
        stop
        exit 0
    ;;

    'status')
        status
        exit $?
    ;;
    
    'restart')
        stop
        sleep 2
        start
        exit $?
    ;;
    *)
        echo "usage: $0 start|stop|status"
        exit 1
    ;;
esac
