#!/bin/sh

########################################################################
# システム名    ：eo顧客基幹システム
# サブシステム名：
# シェル名      ：リモートコマンドシェル
# 機能          ：sshにて接続先のコマンドを実行します。
# コマンド形式  ：r_cmd.sh
# 実行環境      ：.../WebF/shl
# パラメタ      ：実行パターンにより異なる
# 終了ステータス：ゼロ以外異常
# 特記事項      ：特になし
# 変更履歴      ：変更日      変更者       障害／仕様変更№
#                 20120125    FKS
########################################################################

###########################################
# 関数 ログ出力処理
###########################################
out_log()
{
    echo [`/bin/date '+%Y/%m/%d %H:%M:%S'`] - `/bin/hostname` - PID:$PID - $TARGET_SYSTEM - $EXEC_CMD - $@ >> $LOG_FILE
}

###########################################
# 関数 シェル変数設定処理
###########################################
set_aplconst()
{
    /bin/grep ^$1= ${APLCONST_DIR}APLConst.properties > /dev/null 2>&1
    rc=$?
    if [ $rc -ne 0 ]; then
        exit $rc
    fi

    eval `/bin/grep ^$1= ${APLCONST_DIR}APLConst.properties | /usr/bin/tr -d '\r' | /usr/bin/tr -d '\n'`
    rc=$?
    if [ $rc -ne 0 ]; then
        exit $rc
    fi
}

###########################################
# 関数 環境変数ファイル読み込み処理
###########################################
read_target_system()
{
    local flg=0
    for args in $@
    do
        if [ "$flg" = "1" ]; then
            . ./$args
            return 0
        fi

        if [ "$args" = "-f" ]; then
            flg=1
        fi
    done
    exit 1
}

###########################################
# 関数 実行コマンド取得処理
###########################################
get_exec_cmd()
{
    local flg=0
    for args in $@
    do
        if [ "$flg" = "1" ]; then
            if [ "$args" = "-f" ]; then
                return 0
            fi
            if [ "${EXEC_ARGS}" = "" ]; then
                EXEC_CMD=$args
                EXEC_ARGS=$args
            else
                EXEC_ARGS="${EXEC_ARGS} $args"
            fi
        fi

        if [ "$args" = "-c" ]; then
            flg=1
        fi
    done
    exit 1
}

###########################################
# 実行部
###########################################

# 環境変数ファイル読み込み処理
read_target_system $@

# APLConst.propertiesへの相対パス
APLCONST_DIR='./../prop/'

# WEB層のログ出力パス
set_aplconst LOG_WEB_FILE_PATH

# リモートコマンド実行タイムアウト時間（秒）
set_aplconst FU_C_REMOTE_EXEC_TIME_OUT

# ログファイル
LOG_FILE=${LOG_WEB_FILE_PATH}rcd_`/bin/hostname`_`/bin/date '+%Y%m%d'`.log
EXEC_ARGS=
# 実行コマンド取得
get_exec_cmd $@

PID=$$

###########################################
# 接続情報の設定
###########################################
set_aplconst ${TARGET_SYSTEM}_SERVER_IP
set_aplconst ${TARGET_SYSTEM}_SERVER_PORT
set_aplconst ${TARGET_SYSTEM}_ACCESSUSER
set_aplconst ${TARGET_SYSTEM}_EXEC_CMD_DIR

SERVER_IP=`eval echo '$'$TARGET_SYSTEM'_SERVER_IP'`
SERVER_PORT=`eval echo '$'$TARGET_SYSTEM'_SERVER_PORT'`
ACCESSUSER=`eval echo '$'$TARGET_SYSTEM'_ACCESSUSER'`
CMD_DIR=`eval echo '$'$TARGET_SYSTEM'_EXEC_CMD_DIR'`

# 開始ログ出力
out_log START
# 引数ログ出力(引数パスワードが含まれる為テスト時のみ使用)
# テスト環境用
# out_log ARGS：$#：$@
# 本番環境用
out_log ARGS：$#：

if [ 3 -le ${FU_C_REMOTE_EXEC_TIME_OUT} ]; then
    EXEC_TIME_OUT=`/usr/bin/expr ${FU_C_REMOTE_EXEC_TIME_OUT} - 2`
fi
out_log SERVER_IP：$SERVER_IP SERVER_PORT：$SERVER_PORT ACCESSUSER：$ACCESSUSER CONNECTTIMEOUT：${EXEC_TIME_OUT}

STATUS=0

###########################################
# 外部連携部分
###########################################
case "${TARGET_SYSTEM}" in
    WWW )
        ###########################################
        # 接続先 WWW
        ###########################################
        /usr/bin/ssh ${ACCESSUSER}@${SERVER_IP} -o ConnectTimeout=${EXEC_TIME_OUT} -p ${SERVER_PORT} /usr/bin/perl ${CMD_DIR}${EXEC_ARGS} 2>> ${LOG_FILE} | /usr/bin/tee -a ${LOG_FILE}
        STATUS=$?
      ;;
    VOIP )
        ###########################################
        # 接続先 VOIP
        ###########################################
        /usr/bin/ssh ${ACCESSUSER}@${SERVER_IP} -o ConnectTimeout=${EXEC_TIME_OUT} -p ${SERVER_PORT} /bin/sh ${CMD_DIR}${EXEC_ARGS} 2>> ${LOG_FILE} | /usr/bin/tee -a ${LOG_FILE}
        STATUS=$?
      ;;
esac

# 結果出力
out_log STATUS：$STATUS

# 終了ログ出力
out_log END

exit 0
