#!/bin/bash
[ "$3" == "" ] && exec echo "Usage: $0 <execute by who> <action> <sub_parameters>"

source ~/.gamerc

SCRIPT_NAME=$(basename "$0")
LOCK_FILE="${HOME}/www/tools/files/.${SCRIPT_NAME}.lock"

exec 200>"${LOCK_FILE}"
flock -n 200 || {
        echo "${SCRIPT_NAME} is running. Exiting."
    exit 1
}

MAIN_COMMAND="Ctrl"
EXEC_USER=$1
ACTION=$2
SUB_PARAMETER=$3
PATCH_VERSION=$(ls -hld ~/patch/20* | awk -F" " '{print $(NF)}' | awk -F"/" '{print $(NF)}' | tail -n 1)

DATE=$(date +"%Y%m%d")
LOG_DIR="${HOME}/www/tools/files/maintenance_action_log/${DATE}"
[ -d "${LOG_DIR}" ] || { mkdir -p "${LOG_DIR}"; chmod 777 -R "${LOG_DIR}"; }

NOW=$(date +"%Y%m%dT%H%M%S")
LOG_FILE="${PATCH_VERSION}_${ACTION}_${NOW}_${EXEC_USER}.log"
HTML_OUTPUT_FILE=$(echo ${LOG_FILE} | sed 's/log/html/')

case ${ACTION} in
    status)
        NOW_DATETIME=$(date +"%Y-%m-%d %H:%M:%S")
        CMD="echo \"NOW DATETIME: ${NOW_DATETIME}+08\";
            sendscript allall nosave <<< \"cat /proc/loadavg;ps -Ao pid,lstart,pcpu,s,cmd f|grep \"[A-Za-z]\+Server\"|grep -v SKServer\"
        ";;
    stop_monitor)
        CMD="echo yes | ${MAIN_COMMAND} StopMonitor";;
    lg_block)
        CMD="echo yes | ${MAIN_COMMAND} LGBlock";;
    lg_allow)
        CMD="echo yes | ${MAIN_COMMAND} LGAllow";;
    lg_stop)
        CMD="echo yes | ${MAIN_COMMAND} LGStop";;
    lg_start)
        CMD="echo yes | ${MAIN_COMMAND} LGStart";;
    lg_restart)
        CMD="echo yes | ${MAIN_COMMAND} LGRestart";;
    live_stop)
        CMD="echo yes | ${MAIN_COMMAND} LIVEStop";;
    live_start)
        CMD="echo yes | ${MAIN_COMMAND} LIVEStart";;
    dbbackup)
        CMD="echo yes | ${MAIN_COMMAND} DBbackup";;
    server_sync)
        CMD="echo yes | ${MAIN_COMMAND} gmsync";;
    dbpatch)
        CMD="echo yes | ${MAIN_COMMAND} dbpatch";;
    client_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync CLIENT";;
    translate_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync TRANSLATE";;
    ingame_announce_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync NOTICE";;
    maintenance_announce_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync MAINTENANCE";;
    setup_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync SETUP";;
    force_sync)
        CMD="echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync FORCESYNC";;
    itemmall)
        if [ -z "${SUB_PARAMETER}" ]; then
            CMD="echo yes | ${MAIN_COMMAND} itemmall";;
        else
            CMD="echo yes | ${MAIN_COMMAND} itemmall ${SUB_PARAMETER}";;
        fi
    healthy_check)
        CMD="echo yes | ${MAIN_COMMAND} HealthyCheck";;
    one-stop_services)
        CMD="
            ~/bin/send_chatbot_text_only \"正式機維護流程\" \"全部一條龍開始\"; 
            echo yes | ${MAIN_COMMAND} LGBlock;
            echo yes | ${MAIN_COMMAND} LIVEStop;
            echo yes | ${MAIN_COMMAND} DBbackup;
            echo yes | ${MAIN_COMMAND} gmsync;
            echo yes | ${MAIN_COMMAND} dbpatch;
            echo yes | ${MAIN_COMMAND} itemmall;
            echo yes | ${MAIN_COMMAND} NEW_CDN_prepatch_sync CLIENT;
            echo yes | ${MAIN_COMMAND} HealthyCheck;
            echo yes | ${MAIN_COMMAND} LIVEStart
            ~/bin/send_chatbot_text_only \"正式機維護流程\" \"全部一條龍結束!\"; 
        ";;
    *)
        echo "Unknown command for maintenance";;
esac

if [ "${ACTION}" != "status" ]; then
    $HOME/bin/send_chatbot_text_only "網頁工具操作" "正式機維護腳本 開始, 執行人員 by ${EXEC_USER}"
fi

#echo ${CMD}
bash -c "${CMD}" >> ${LOG_DIR}/${LOG_FILE}
cat ${LOG_DIR}/${LOG_FILE} | aha | tee -a ${LOG_DIR}/${HTML_OUTPUT_FILE}

[ -f "${LOCK_FILE}" ] && rm -rf ${LOCK_FILE}
