#!/bin/sh

unameOut="$(uname -s)"
case "${unameOut}" in
    Linux*)       machine=Linux;;
    FreeBSD*)     machine=FreeBSD;;
esac

MASTOOLS_HOME="/var/mastools"
MASTOOLS_PID_DIR="${MASTOOLS_HOME}/run"
MASTOOLS_UPGRADE_PID_FILE="${MASTOOLS_PID_DIR}/mastools_upgrade.pid"
MASTOOLS_BIN_PID_FILE="${MASTOOLS_PID_DIR}/mastools.pid"
MASTOOLS_SPLUNK_PID_FILE="${MASTOOLS_PID_DIR}/mastools_splunk.pid"
MASTOOLS_LOG_DIR="${MASTOOLS_HOME}/logs"
MASTOOLS_LOG_FILES="${MASTOOLS_LOG_DIR}/mastools.log"
MASTOOLS_OS_VERSION_FILE="${MASTOOLS_HOME}/version_os.txt"
MASTOOLS_VERSION_FILE="${MASTOOLS_HOME}/version.txt"
MASTOOLS_TELEMETRY_PID_FILE="${MASTOOLS_PID_DIR}/mastools_tlmy.pid"
MASTOOLS_MONIT_PID_FILE="${MASTOOLS_PID_DIR}/mastools_monit.pid"
SVM_MPS_LIB_DIR=/mps/lib
OSVER="$(uname -r | cut -d'-' -f1)"
MASTOOLS_PACKAGE_OS_VERSION="8.4"
if [ -e $MASTOOLS_OS_VERSION_FILE ];then
    MASTOOLS_PACKAGE_OS_VERSION=`cat $MASTOOLS_OS_VERSION_FILE`
fi

if [ "$machine" != "Linux" ];then    
    echo "MASTOOLS_PACKAGE_OS_VERSION:" $MASTOOLS_PACKAGE_OS_VERSION
    echo "MASTOOLS_CURRENT_OS_VERSION:" $OSVER
fi


export  PYTHONPATH=/var/mastools/scripts/pythonlib/ccauth-4.1.1-py2.7.egg/:/var/mastools/scripts/pythonlib/rsa-3.4.2-py2.7.egg/

#needed vars for CPX
OS_RELEASE_FILE="/etc/os-release"
NSOSLX_STRING="nsoslx"
running_inside_cpx=false

if [ ! -d "${MASTOOLS_LOG_DIR}" ]; then
	mkdir -p "${MASTOOLS_LOG_DIR}"
fi

if [ -e $OS_RELEASE_FILE ]; then
    grep -Fq "$NSOSLX_STRING" $OS_RELEASE_FILE
    if [ $? -eq 0 ]; then
        running_inside_cpx=true

        if [ -n "$UNICON_PROVIDER_VERSION" ]; then
            MASTOOLS_LOG_FILES="/dev/stdout"
        fi
    fi
fi

if [ "$running_inside_cpx" = true ] || [ "$machine" = "Linux" ]; then
    IS_GATEWAY_CONNECTOR=0
else
    GATEWAY_CONNECTOR_SYSCTL=netscaler.is_ngs_connector
    IS_GATEWAY_CONNECTOR=$(sysctl -n ${GATEWAY_CONNECTOR_SYSCTL})
fi
MASTOOLS_BIN="${MASTOOLS_HOME}/bin"
MASTOOLS_LIB="${MASTOOLS_HOME}/lib"
MASTOOLS_EXE="${MASTOOLS_BIN}/mastools"
MASTOOLS_SCRIPTS="${MASTOOLS_HOME}/scripts"
MASTOOLS_TIME_SYNC_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_time_sync.py"
MASTOOLS_ADMAUTOREG_SCRIPTS="${MASTOOLS_SCRIPTS}/admautoreg"
MASTOOLS_MONIT_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_monit.sh"
MASTOOLS_HA_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_ha.py"
MASTOOLS_CLUSTER_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_cluster.py"
MASTOOLS_RESOURCE_LIBRARY_CLIENT_SCRIPTS="${MASTOOLS_SCRIPTS}/resource_library_client.py"
MASTOOLS_SPLUNK_LOGGER_SCRIPTS="${MASTOOLS_SCRIPTS}/adc_splunk_logger.py"
MASTOOLS_TELEMETRY_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_tlmy.py"


if [ "$running_inside_cpx" = true ]; then
	MASTOOLS_UPGRADE_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_upgrade.py"
	MASTOOLS_PYTHON="/usr/bin/python"
else
	MASTOOLS_UPGRADE_SCRIPTS="${MASTOOLS_SCRIPTS}/mastools_upgrade.py"
	MASTOOLS_PYTHON="/var/python/bin/python"
	if [ "$machine" != "Linux" ];then
	    if [ $MASTOOLS_PACKAGE_OS_VERSION != $OSVER ];then
		    echo "mastools package version and os version not match, clean up binary"
		    rm -rf $MASTOOLS_BIN
		    rm -rf $MASTOOLS_LIB
		    echo "0.0-0.0" > $MASTOOLS_VERSION_FILE
	    fi
	fi
fi

SPLUNK_LOGGER_SCRIPTS="${MASTOOLS_SCRIPTS}/adc_splunk_logger.py"
MASTOOLS_CONF_DIR="${MASTOOLS_HOME}/conf"
MASTOOLS_AGENT_CONF="${MASTOOLS_CONF_DIR}/agent.conf"

MASTOOLS_APPSEC_SIGN_UPGRADE_SCRIPTS="${MASTOOLS_SCRIPTS}/resource_library_client.py -f /var/appsec_signature.json -w"
if [ ! -d "${MASTOOLS_CONF_DIR}" ]; then
	mkdir -p "${MASTOOLS_CONF_DIR}"
fi

mastools_upgrade_stop_legacy()
{
    pid=`ps -axww | awk '/mastools_upgrade/ && !/awk/ {print $1}'`
    if [ "$pid" != "" ]; then
        kill -9 $pid
    fi
}

check_process_run()
{
    if [ -f "$1" ]; then
        kill -0 `cat $1`
        return $?
    else
        return 1
    fi
}

copy_custom_cacerts() {
    CERT_BUNDLE_PATH='/var/mastools/cert/cacert.pem'
    ALL_CERTS_FILE_PATH='/var/mastools/cert/all_cacerts.pem'
    CUSTOM_CERTS_PATH='/var/mastools/cert/custom_cacerts/'

    if [ -f "$CERT_BUNDLE_PATH" ]; then
        cat "$CERT_BUNDLE_PATH" > "$ALL_CERTS_FILE_PATH"
    else
        echo "Cannot open $CERT_BUNDLE_PATH"
        return
    fi

    if [ ! -d "$CUSTOM_CERTS_PATH" ]; then
        echo "Cannot open directory $CUSTOM_CERTS_PATH"
        return
    fi

    echo "Copying custom certs from $CUSTOM_CERTS_PATH"

    for file in "$CUSTOM_CERTS_PATH"*.pem; do
        if [ -f "$file" ]; then
            cat "$file" >> "$ALL_CERTS_FILE_PATH"
            echo "" >> "$ALL_CERTS_FILE_PATH"
        else
            echo "Cannot open $file"
        fi
    done
    if [ -f "$ALL_CERTS_FILE_PATH" ]; then
    chmod 644 "$ALL_CERTS_FILE_PATH"
    fi
}


mastoolsd_start()
{
    if ! /var/python/bin/python --version; then
        echo "Python is not installed. Exiting now."
        exit 1    
    fi

    mkdir -p /var/mastools/cert/custom_cacerts/
	  copy_custom_cacerts

    if [ -e $MASTOOLS_AGENT_CONF ]; then
        echo "Starting mastools in registered mode."
        pkill -9 -f $MASTOOLS_TIME_SYNC_SCRIPTS
        $MASTOOLS_PYTHON $MASTOOLS_TIME_SYNC_SCRIPTS &
        pkill -9 -f $MASTOOLS_UPGRADE_SCRIPTS
        $MASTOOLS_PYTHON $MASTOOLS_UPGRADE_SCRIPTS &
        echo $! > ${MASTOOLS_UPGRADE_PID_FILE}
        
        pkill -9 -f $MASTOOLS_TELEMETRY_SCRIPTS
        $MASTOOLS_PYTHON $MASTOOLS_TELEMETRY_SCRIPTS &
        echo $! > ${MASTOOLS_TELEMETRY_PID_FILE}
        
        if [ $IS_GATEWAY_CONNECTOR = 0 ]; then
            pkill -9 -f $SPLUNK_LOGGER_SCRIPTS
            $MASTOOLS_PYTHON $SPLUNK_LOGGER_SCRIPTS &
            echo $! > ${MASTOOLS_SPLUNK_PID_FILE}
        fi
        if [ -e $MASTOOLS_EXE ];then
            if [ "$machine" != "Linux" ];then
                killall -9 mastools
            else
                pkill -9 -f /var/mastools/bin/mastools
            fi
            export LD_LIBRARY_PATH='/var/mastools/lib';
            $MASTOOLS_EXE > $MASTOOLS_LOG_FILES &
            echo $! > ${MASTOOLS_BIN_PID_FILE}
        fi
        if [ -e /var/mastools/scripts/mastools_monit.sh ]; then
            cd /var/mastools/scripts
            pkill -9 -f $MASTOOLS_MONIT_SCRIPTS
            /bin/sh $MASTOOLS_MONIT_SCRIPTS &
            echo $! > ${MASTOOLS_MONIT_PID_FILE}
        fi
    else
        echo "Starting mastools in unregistered mode."
        if [ "$1" != "" ]; then
            pkill -9 -f $MASTOOLS_UPGRADE_SCRIPTS
            $MASTOOLS_PYTHON $MASTOOLS_UPGRADE_SCRIPTS $1 loop &
        else
            pkill -9 -f $MASTOOLS_UPGRADE_SCRIPTS
            $MASTOOLS_PYTHON $MASTOOLS_UPGRADE_SCRIPTS &
        fi
        echo $! > ${MASTOOLS_UPGRADE_PID_FILE}
        
        pkill -9 -f $MASTOOLS_TELEMETRY_SCRIPTS
        $MASTOOLS_PYTHON $MASTOOLS_TELEMETRY_SCRIPTS &
        echo $! > ${MASTOOLS_TELEMETRY_PID_FILE}
        if [ -e /var/mastools/scripts/mastools_monit.sh ]; then
            cd /var/mastools/scripts
            pkill -9 -f /var/mastools/scripts/mastools_monit.sh
            /bin/sh /var/mastools/scripts/mastools_monit.sh $1 &
            echo $! > ${MASTOOLS_MONIT_PID_FILE}
        fi
    fi
    echo "Mastools started."
}

mastoolsd_stop()
{
    echo "Stopping mastools processes..."
    pkill -9 -f $MASTOOLS_MONIT_SCRIPTS
    pkill -9 -f mastools_monit.sh
    pkill -9 -f $MASTOOLS_UPGRADE_SCRIPTS
    pkill -9 -f $MASTOOLS_TELEMETRY_SCRIPTS
    if [ -e /var/mastools/prev_version.txt ]; then
        echo "Use new method to stop mastools upgrade"
        pkill -9 -f mastools_upgrade.py
    else
        echo "Use legacy method to stop mastools upgrade"
        mastools_upgrade_stop_legacy
    fi
    if [ $running_inside_cpx = false ]; then
        pkill -9 -f $MASTOOLS_HA_SCRIPTS
        pkill -9 -f $MASTOOLS_CLUSTER_SCRIPTS
        pkill -9 -f $MASTOOLS_RESOURCE_LIBRARY_CLIENT_SCRIPTS
    fi
    pkill -9 -f $MASTOOLS_SPLUNK_LOGGER_SCRIPTS
    pkill -9 -f adc_splunk_logger.py
    if [ "$machine" != "Linux" ];then
        killall -9 mastools
    else
        pkill -9 -f /var/mastools/bin/mastools
    fi
    echo "Stopped all mastools processes."
}

mastoolsd_stop_all_scripts()
{
    echo "stop monit"
    pkill -9 -f $MASTOOLS_MONIT_SCRIPTS
    pkill -9 -f mastools_monit.sh
    echo "stop upgrade"
    pkill -9 -f $MASTOOLS_UPGRADE_SCRIPTS
    pkill -9 -f $MASTOOLS_TELEMETRY_SCRIPTS
    pkill -9 -f mastools_upgrade.py
    if [ $running_inside_cpx = false ]; then
        echo "stop ha sync"
        pkill -9 -f $MASTOOLS_HA_SCRIPTS
        echo "stop cluster sync"
        pkill -9 -f $MASTOOLS_CLUSTER_SCRIPTS
        pkill -9 -f $MASTOOLS_RESOURCE_LIBRARY_CLIENT_SCRIPTS
    fi
}


mastoolsd_restart()
{
    mastoolsd_stop
    mastoolsd_start
}
mastoolsd_stop_bin()
{
    echo "stop mastools binary"
    killall mastools
}

mastools_start_monit()
{
    check_process_run ${MASTOOLS_MONIT_PID_FILE}
    if [ $? -eq 0 ]; then
        echo "mastools monit already running"
        exit 0
    fi
    if [ -e /var/mastools/scripts/mastools_monit.sh ]; then
        cd /var/mastools/scripts
        /bin/sh $MASTOOLS_MONIT_SCRIPTS &
        echo $! > ${MASTOOLS_MONIT_PID_FILE}
        echo "mastools monit started."
    fi
}

mkdir -p ${MASTOOLS_PID_DIR}

if [ "$1" = "start" ]; then
    mastoolsd_start $2
elif [ "$1" = "stop" ]; then
    mastoolsd_stop
elif [ "$1" = "restart" ]; then
    mastoolsd_restart $2
elif [ "$1" = "stop_bin" ]; then
    mastoolsd_stop_bin
elif [ "$1" = "stop_scripts" ]; then
    mastoolsd_stop_all_scripts
elif [ "$1" = "start_monit" ]; then
    mastools_start_monit
else
    echo "unknown option"
fi
