#!/usr/bin/perl

# Copyright (C) 2008 NEC Corporation
# All Rights Reserved.

require "/opt/nec/wbmc/lib/wbmc.pl";

#2008/11 higashi
#ログ出力のため読み込み
require "/opt/nec/wbmc/bin/time_conv.pl";

#accesslog.confへのパス
$access_path ="/etc/opt/nec/wbmc/accesslog.conf";
$access_path_lock ="accesslog.conf";

#access.log.1へのパス
$logfile = "/var/log/roma/access_log.1";

#2008/08 higashi
#accesslog.confの値を格納する変数の初期化
$log_max_que = 0;

#2008/11 higashi
#accesslog_transfer.logへのパス
$accesslog_transfer_log_path = "/var/log/accesslog_transfer/accesslog_transfer.log";

#2008/09 higashi
#accesslog_transfer.logをローテートするサイズ
$accesslog_transfer_log_rotate_size=5242880;

#転送ファイルaccess_log.1が存在しなければ終了
if(-e $logfile){

	#       accesslog.ocnfファイルの読込み
	if (!&readFile("$access_path", $access_path_lock, *file) ) {
print <<`EOF`;
	        echo $access_path cannot open
EOF
		if(!&writeLog_rotate("[Error] $access_path cannot read",$accesslog_transfer_log_path,"wbmc_rename",$accesslog_transfer_log_rotate_size)){
			system("/bin/echo $accesslog_transfer_log_path cannot write");
		}
	        exit(1);
	}
	for ($i = 0; $i < @file; $i++) {

	        # コメントならば読み飛ばし
	        if ($file[$i] =~ /\s*#/) {
	                next;
	      	 }
		#2008/09 higashi
		# 最大リトライキュー
	        if ($file[$i] =~ /^\s*LOG_MAX_QUE\s*=\s*(.*)\s*$/) {
	                $log_max_que = $1;
			last;
	        }

	}

	#2012/2 higashi
	#wbmc_rotateに影響するプロセスが起動していないかチェック
	open(IN,"/bin/ps -efw |");
	$rotate_chk_flg=0;
	while($wk = <IN>){
		if($wk =~/\/opt\/nec\/wbmc\/bin\/wbmc_rotate/){
			$rotate_chk_flg=1;
			last;
		}
		if($wk =~/\/opt\/nec\/wbmc\/adm\/system\/log\/extlog_set_write\.cgi/){
			$rotate_chk_flg=1;
			last;
		}
	}
	close(IN);

	if($rotate_chk_flg eq "0"){
		#2012/02 higashi
		#圧縮機能の対応、access_logローテートの仕様変更
		system("/opt/nec/wbmc/bin/wbmc_rotate $logfile > /dev/null 2>&1");
	}else{
		exit;
	}

	$log_mv_time = `date +%y%m%d%H%M`;
	chomp $log_mv_time;

print <<`END`;

/bin/mv $logfile /var/log/roma/access$log_mv_time.log

END

	#2008/08 higashi
	#/var/log/romaから現在保持しているファイルのリストを
	#タイムスタンプの古い順に取得
	open(IN,"/bin/ls -rt /var/log/roma | grep -E access[0-9]+\.log |");
	@log_file_list=<IN>;
	close(IN);

	#リトライキューが0の場合ローテー直後のファイルが削除されるため1を代入
	if($log_max_que eq "0"){
		$log_max_que = 1;
	}

	#保持できるファイル数なのか判定
	if(@log_file_list > $log_max_que ){
		#一番古いファイルを削除する
		chomp $log_file_list[0];
		system("/bin/rm -r /var/log/roma/$log_file_list[0] > /dev/null 2>&1");
		if(!&writeLog_rotate("[Fatal] /var/log/roma/$log_file_list[0] deleted, because retry-queue exceeded the limit value",$accesslog_transfer_log_path,"wbmc_rename",$accesslog_transfer_log_rotate_size)){
			system("/bin/echo $accesslog_transfer_log_path cannot write");
		}
	}

	#2008/08 higashi
	#wbmc_minuteが二重起動していないかチェック
	open(IN,"/bin/ps -efw |");
	$log_chk_flg=0;
	while(<IN>){
		if($_ =~/\/opt\/nec\/wbmc\/bin\/wbmc_minute/){
			$log_chk_flg=1;
			last;
		} 
	}
	close(IN);

	if($log_chk_flg eq "0"){
		#アクセスログ取得又はアクセスログ統計情報を作成するスクリプトを動かす
		system("/opt/nec/wbmc/bin/wbmc_minute > /dev/null 2>&1");
	}
}else{
	exit;
}
