#!/usr/bin/perl
#####################################################################
# Function: pg-rex.pl
#
# 概要:
# PG-REX の各動作を実行するツール。
# 
# 特記事項:
# なし
#
# Copyright (c) 2012,2013, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
#
#####################################################################
use warnings;
use strict;
use Getopt::Long;
use Switch;
use FindBin;
use lib qw(/usr/local/share/pg-rex);
use include::command;
use common qw(check_user printlog);

BEGIN {
    if ($ENV{"LANG"} =~ m/ja/i){
        eval qq{
            use po::ja;
        };
    }
    else{
        eval qq{
            use po::en;
        }
    }
};

$SIG{INT} = sub {
    printlog("LOG", PGREX_MS0001);
};

main();

1;

sub main{

    my $help_mode = 0;
    my $crm_path = '';
    my $node = '';
    my $command = '';

    # 標準出力が途中で停止するのを防ぐ為に
    # 標準出力のオートフラッシュを有効化
    $| = 1;

    # 実行ユーザの確認
    check_user();

    # オプション解析
    GetOptions('help' => \$help_mode,
               'file=s' => \$crm_path,
               'node=s' => \$node);
    my $operation = shift(@ARGV);

    if ($help_mode){
        printlog("USAGE", PGREX_USAGE);
        exit(0);
    }
    if (!$operation){
        printlog("ERROR", PGREX_MS0002);
    }

    # 各オペレーションに合わせてコマンド文字列を作成
    $command = $FindBin::Bin;
    switch ($operation) {
        case 'masterstart' {
            $command .= "/pg-rex_master_start";
            if ($crm_path){
                $command .= " $crm_path";
            }
        }
        case 'slavestart' {
            $command .= "/pg-rex_slave_start";
        }
        case 'stop' {
            $command .= "/pg-rex_stop";
        }
        else {
            printlog("ERROR", PGREX_MS0003, $operation);
        }
    }

    # リモート指定があった場合、コマンド文字列に ssh コマンドを加える
    # リモート先でのCTL+Cを有効にする為、ssh コマンドに -t オプションを付与する
    if ($node){
        $command = "$SSH -t $node \"$command\"";
    }

    # 作成したコマンド文字列を用いてコマンドを実行する
    printlog("LOG", PGREX_MS0004, $operation);
    exec($command);

    exit(0);
}

