#!/bin/sh
export LANG=C

loginfo() {
    msg="$@"
    [ -z "$msg" ] && return 0

    DATE="$(date)"
    logger -p9 -t "TaskMonitor[${$}]" "$msg"
}

loginfo "PROCLINE: [ $PROCLINE ] PROCFLAG: [ $PROCFLAG ] [ $1 ]"

[ -n "$PROCLINE" ] && MONNAME=$(echo $PROCLINE | sed -r 's/[^ ]*\/([^\/. ]+)([^ ])?*.*$/\1/g')

[ -z "$MONNAME" ] && {
    loginfo "ERROR: missing parameter PROCFLAG or PROCLINE ,action:[ $1 ]"
    exit 1
}

taskmonitor() {
    ret=1

    #default config
    OOM=1
    RSS=-1
    DELAY=0
    VMZ=-1
    VMZDATA=-1
    STACKSIZE=-1
    EXT_LIB_PATH="none"
    USE_CGROUP_PATH="none"
    WORK_DIR_PATH="none"
    DEBUG_FLAG="off"
    FAST_REBOOT_FLAG=0
    CHECK_BIN_FLAG=0

    [ -n "$OOM_FLAG" ] && OOM=$OOM_FLAG
    [ -n "$RSS_FLAG" ] && RSS=$RSS_FLAG
    [ -n "$DELAY_FLAG" ] && DELAY=$DELAY_FLAG
    [ -n "$VMZ_FLAG" ] && VMZ=$VMZ_FLAG
    [ -n "$VMZ_DATA" ] && VMZDATA=$VMZ_DATA
    [ -n "$STACK_SIZE" ] && STACKSIZE=$STACK_SIZE
    [ -n "$PROC_EXT_LIB_PATH" ] && EXT_LIB_PATH=$PROC_EXT_LIB_PATH
    [ -n "$PROC_USE_CGROUP_PATH" ] && USE_CGROUP_PATH=$PROC_USE_CGROUP_PATH
    [ -n "$PROC_CHANGE_DIR_PATH" ] && WORK_DIR_PATH=$PROC_CHANGE_DIR_PATH
    [ -n "$PROC_DEBUG_FLAG" ] && DEBUG_FLAG=$PROC_DEBUG_FLAG
    [ -n "$PROC_FAST_REBOOT" ] && FAST_REBOOT_FLAG=$PROC_FAST_REBOOT
    [ -n "$PROC_CHECK_BIN_PATH" ] && CHECK_BIN_FLAG=$PROC_CHECK_BIN_PATH

    [ -z "$PROCFLAG" ] && PROCFLAG="$PROCLINE"

    if [ -n "$PROCLINE" -a -n "$PROCFLAG" ]; then
        if [ -n "$PROCNUM" ]; then
            /usr/sbin/taskmonitorTool -p "$PROCLINE" -b "$PROCFLAG" -i "$MONNAME" -n $PROCNUM -t $1 -C $CHECK_BIN_FLAG -M $OOM -r $RSS -L $EXT_LIB_PATH -D $WORK_DIR_PATH -g $USE_CGROUP_PATH -d $DEBUG_FLAG -v ${VMZ} --vmzdata ${VMZDATA} --stacksize ${STACKSIZE} --fastreboot ${FAST_REBOOT_FLAG} --delay ${DELAY}
            ret=$?
        else
            /usr/sbin/taskmonitorTool -p "$PROCLINE" -b "$PROCFLAG" -i "$MONNAME" -t $1 -C $CHECK_BIN_FLAG -M $OOM -r $RSS -L $EXT_LIB_PATH -D $WORK_DIR_PATH -g $USE_CGROUP_PATH -d $DEBUG_FLAG -v ${VMZ} --vmzdata ${VMZDATA} --stacksize ${STACKSIZE} --fastreboot ${FAST_REBOOT_FLAG} --delay ${DELAY}
            ret=$?
        fi
    fi

    return $ret
}

ret=-1
case $1 in
"start")
    t1=$(date +%s)
    taskmonitor start
    ret=$?
    t2=$(date +%s)
    t3=$(expr $t2 - $t1)
    loginfo "task $MONNAME start used $t3 s"
    ;;
"stop")
    t1=$(date +%s)
    taskmonitor stop
    ret=$?
    t2=$(date +%s)
    t3=$(expr $t2 - $t1)
    loginfo "task $MONNAME stop used $t3 s"
    ;;
"restart")
    taskmonitor stop
    taskmonitor start
    ret=$?
    ;;
"status")
    taskmonitor status
    ret=$?
    ;;
*)
    echo "Usage: supervisrod { start | stop | restart | status } , $1 not supported yet."
    ;;
esac

exit $ret
