﻿#
#	TeraTermマクロを自動生成するプログラム
#
#		author	hitoshi-m
#
#		abstract	1つ1つのスクリプトを手動で実行するのはめんどくさいので，それらを自動で実行しちゃうスクリプトを生成する．
#

use strict;
use warnings;


##############
#    入力    #
##############

my $WinDirectoryPath = 'C:\\Users\\kashiwa\\Desktop\\tools\\GetBugData\\CreateTeratermMacro';  # このスクリプトが保存されているフォルダの絶対パス
my $MacDirectoryPath = 'desktop';  # 共有パソコンに移動させたフォルダが置かれているフォルダのパス
my $Project = 'Eclipse';

my $UserName = 'oss1';  # 共有パソコンのアカウント
my $Password = '0000';  # 共有パソコンのパスワード

my $Min = 36;  # 取得したいバグ情報のIDの上二桁（開始番号）
my $Max = 40;  # 取得したいバグ情報のIDの上二桁（終了番号）


##############
#  変数宣言  #
##############

my @Server = ();
my $Line = '';
my $OutFile = '';
my $DirectoryPath = '';
my $FileName = '';

my $k = 0;
my $n = 0;

&main();
exit;


sub main {
	# サーバリストの読み込み
	open(SERVER,"<ServerList.txt") or die "cannot open readfile.\n";
	while(<SERVER>) {
		$Server[$n] = trim($_);
		$n++;
	}
	close(SERVER);
	
	open(BUGFILE,">ExecMacro.bat") or die "cannot open batfile.\n";
	# 不具合情報ページ（show_bug.cgi）取得用のマクロを生成
	for(my $i=$Min; $i<$Max; $i++) {
		$OutFile = $Server[$k].".ttl";
		$DirectoryPath = $MacDirectoryPath.'/'.$Project.'/bug_'.$i.'_'.($i+1);
		$FileName = 'GetBugHTMLFrom'.$Project.'_'.$i.'_'.($i+1).'.sh';
		
		open(OUTFILE, ">$OutFile") or die "cannot open savefile.\n";
		print OUTFILE join('', "connect '$Server[$k].sys.wakayama-u.ac.jp:22 /ssh /auth=challenge /user=$UserName /passwd=$Password /nosecuritywarning'\n");  # 共有パソコンに接続する(各引数の意味は自分で調べてね)
		print OUTFILE join('', "wait 'oss1@'\n");  # 指示待ち状態まで待機する(これを入れないと一度に命令を送ってしまって，処理が追い付かず，コマンドが実行されない)
		print OUTFILE join('', "sendln 'cd $DirectoryPath'\n");  # 不具合票取得スクリプトがあるフォルダに移動する
		print OUTFILE join('', "wait 'oss1@'\n");  # 指示待ち状態まで待機する
		print OUTFILE join('', "sendln 'sh $FileName'\n");  # 不具合票取得スクリプトを実行する
		close(OUTFILE);
		
		print BUGFILE join('', "$WinDirectoryPath\\$Server[$k]\.ttl\n");
		
		$k++;
		if($k > $#Server) {
			last;
		}
	}
	# 変更履歴ページ（show_activity.cgi）取得用のマクロを生成
	for(my $j=$Min; $j<$Max; $j++) {
		$OutFile = $Server[$k].".ttl";
		$DirectoryPath = $MacDirectoryPath.'/'.$Project.'/activity_'.$j.'_'.($j+1);
		$FileName = 'GetActHTMLFrom'.$Project.'_'.$j.'_'.($j+1).'.sh';
		
		open(OUTFILE, ">$OutFile") or die "cannot open savefile.\n";
		print OUTFILE join('', "connect '$Server[$k].sys.wakayama-u.ac.jp:22 /ssh /auth=challenge /user=$UserName /passwd=$Password /nosecuritywarning'\n");  # 共有パソコンに接続する(各引数の意味は自分で調べてね)
		print OUTFILE join('', "wait 'oss1@'\n");  # 指示待ち状態まで待機する(これを入れないと一度に命令を送ってしまって，処理が追い付かず，コマンドが実行されない)
		print OUTFILE join('', "sendln 'cd $DirectoryPath'\n");  # 不具合票取得スクリプトがあるフォルダに移動する
		print OUTFILE join('', "wait 'oss1@'\n");  # 指示待ち状態まで待機する
		print OUTFILE join('', "sendln 'sh $FileName'\n");  # 不具合票取得スクリプトを実行する
		close(OUTFILE);
		
		print BUGFILE join('', "$WinDirectoryPath\\$Server[$k]\.ttl\n");
		
		$k++;
		if($k > $#Server) {
			last;
		}
	}
	print BUGFILE join('', "pause\n");
	close(BUGFILE);
}

#復帰(\r)，改行(\n)，空白(半角，全角，タブ)を削除する関数
sub trim {
	my $result = $_[0];
	
	if(defined $result) {
		$result =~ s/\r//;    # 復帰
		$result =~ s/\n//;    # 改行
		$result =~ s/^\s*//;  # 先頭の空白
		$result =~ s/\s*$//;  # 末尾の空白
	} else {
		$result = '';
	}
	
	if($result eq '') {
		$result = 'null';
	}
	
	return $result;
}
