#!/usr/bin/perl

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

# RCS: $Id: wbmc_webalizer_merge1,v 1.1 2006/12/22 05:33:58 shodai Exp $

##010726 v4.1-1 access_logカレントログ以外をマージ haramoto
##010726 v4.1-1 access_logローテート・ログもマージ murakami
##010726 v4.1-1 マージファイルを併せる             murakami
##010730 マージファイルの存在チェック追加          murakami
require "/opt/nec/wbmc/lib/wbmc.pl";

#
# アクセスログマージコマンド
#

$TMP_AREA = "/tmp";

$fitmp = "/etc/opt/nec/wbmc/tmpdir";
if (-e $fitmp) {
        if (open(MT, $fitmp)) {
            @line = <MT>;
            close(MT);
            if (defined($line[0])) {
                $line[0] =~ s/^\s*//;
                $line[0] =~ s/\s*$//;
                if ($line[0] ne "") {
                    $TMP_AREA = $line[0];
                    chomp($TMP_AREA);
                }
            }
        }
}

$domaindir = "";
$option = $ARGV[0];
$domaindir = $ARGV[1];

#ログファイル(ローテート数値が末尾につく".n")
$logdir = "/var/log/httpd/";
$logfile = "access_log." . $domaindir;
$ssllogfile = "access_log." . $domaindir . "-ssl";    ##010724

##010726 
$mrg1file = $logdir . $logfile . ".mrg1"; #ローテートログ、マージファイル名
$mrg2file = $logdir . $logfile . ".mrg2"; #カレントログ、マージファイル名
$newfile = $logdir . $logfile . ".mrg";   #連結マージファイル名

$filenames = "";
$logfile_lock = "logfile";
$flag = 0;
$found = 0;

if ($option eq "-n") {
	#
	# ログファイルの取得
	#
	chdir($logdir);
	if (!&readFile("/bin/ls -lt $logfile*|", $logfile_lock, *rotatefile)) {
#	    &showErrorPage("$logfileの読み込みに失敗しました。");
	    exit(1);
	}

	#
	# アクセスログ ファイルリスト作成
	#
    # ローテート・ログのリスト作成
	#

	for ($i = 0; $i < @rotatefile; $i++) {
	    @tmp = split(/\s+/, $rotatefile[$i]);
	    if (($tmp[8] =~ /^\Q$logfile\E\.\d+$/i) || ($tmp[8] =~ /^\Q$ssllogfile\E\.\d+$/i)) {
	        $found++;
	        $file = $tmp[8];
	        if ($flag == 0) {
	            $filenames .= "$logdir$file";
	        } else {
				$filenames .= " $logdir$file";
	        }
	        if ($flag eq 0) {
	            $flag = 1;
	        }
	    }
	}

	if (!$found) {
#	    &showResultPage("ログファイルが存在しません。","");
#	    exit(1);
	}else {

		#
		# コマンド発行
		#
		if(system("/bin/cat $filenames > $mrg1file") != 0){
#	    	&showResultPage("アクセス統計用ファイル作成($filenames)に失敗しました。","");
	    	exit(1);
		}
	}

#　最初期化
#
$filenames = "";
$flag = 0;
$found = 0;
	#
	# カレント・ログのリスト作成
	#
	for ($i = 0; $i < @rotatefile; $i++) {
#	for ($i = @rotatefile; $i > 0; $i--) {
	    @tmp = split(/\s+/, $rotatefile[$i]);
	    if (($tmp[8] eq $logfile) || ($tmp[8] eq $ssllogfile)) {
	        $found++;
	        $file = $tmp[8];
	        if ($flag == 0) {
	            $filenames .= "$logdir$file";
	        } else {
				$filenames .= " $logdir$file";
	        }
	        if ($flag eq 0) {
	            $flag = 1;
	        }
	    }
	}

	if (!$found) {
#	    &showResultPage("ログファイルが存在しません。","");
	    exit(1);
	}

	#
	# コマンド発行
	#
	if(system("/bin/cat $filenames > $mrg2file") != 0){
#	    &showResultPage("アクセス統計用ファイル作成($filenames)に失敗しました。","");
	    exit(1);
	}

##010726 sort
#
#    $mrg1fileをSORT
##010730 .mrg1ファイルの存在チェック
	if(-f $mrg1file){
		system("/bin/sort -T $TMP_AREA -k 4.9b,4.12 -k 4.5b,4.7M -k 4.2b,4.3 -k 4.14b,4.21 $mrg1file -o $mrg1file"); 
	}
##010726 sort
#
#    $newfileをSORT
##010730 .mrg2ファイルの存在チェック
	if(-f $mrg2file){
		system("/bin/sort -T $TMP_AREA -k 4.9b,4.12 -k 4.5b,4.7M -k 4.2b,4.3 -k 4.14b,4.21 $mrg2file -o $mrg2file");
	}
##010726 ファイルの連結（ローテート＋カレント）
#    .mrg = .mrg1 + .mrg2
#
##010730 .mrg1ファイルの存在チェック
	if(-f $mrg1file){
		system("/bin/cat $mrg1file $mrg2file > $newfile");
	}else{
		system("/bin/cat $mrg2file > $newfile");
	}

}
