parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

вот

Таев Олег 10.11.2004 13:38 / 10.11.2004 13:52

Дата в файле лога имеет следующий вид
Mon, 01 Nov 2004 17:52:27 +0300
А вот скрипт укладки записей в базу (исполняется на Linux'е)
#!/usr/bin/perl

local $sqluser = "<username>";		# пользователь для подключения к БД
local $sqlpasswd = "<password>";	# пароль подключения к БД
local @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);

# подключаем DBI Perl library
use DBI;
# подключаемся к БД
$dbh = DBI->connect("DBI:mysql:<database>:<hostname>",$sqluser,$sqlpasswd);
$tab_name = "lines";
open(FILE,"/path/to/file") || die "Cannot open file!";
while ($record=<FILE>) {
	last if $record =~ /^$/;
	chomp($record);
	local ($start,$stop,$source,$dest) = (split(/\|/,$record))[4,5,6,8];
	# если юзер лажанулся, валим дальше
	if ($start=~ /failed/){next;}
	# отделяем IP от порта
	$source=~ s/^(.+):(.+)/$1/;
	$dest=~ s/^(.+):(.+)/$1/;

	my $begin,$end,@tmp;
	# запихиваем в массив день, имя месяца, год и время
	@tmp = (split(/\s/,$start))[1,2,3,4];
	# заменяем имя месяца в дате на его порядковый номер и пишем результирующую строку
	$begin = sprintf("%04d-%02d-%02d %s",$tmp[2],month_index($tmp[1]),$tmp[0],$tmp[3]);
	@tmp = (split(/\s/,$stop))[1,2,3,4];
	$end = sprintf("%04d-%02d-%02d %s",$tmp[2],month_index($tmp[1]),$tmp[0],$tmp[3]);
	# забрасываем запись в таблицу
	if($rv){
	    $rows = $dbh->do("INSERT INTO $tab_name (dest,src,beginSession,endSession) VALUES (INET_ATON('$dest'),INET_ATON('$source'),UNIX_TIMESTAMP('$begin'),UNIX_TIMESTAMP('$end'))");
	}
}
close(FILE);

$rc = $dbh->disconnect();

exit(0);

# вычисление индекса месяца
sub month_index()
{
	my $month = shift;
	my $index = 1;
	foreach $item (@months){
		if($item eq $month){ last; }
		else { $index++; }
	}
	return $index;
}
Соответствие дат в таблице (таймстампы) и их первоначальные значения в логах абсолютно идентичны, а именно:
Запись в логе: Mon, 07 Jun 2004 00:13:45 -0400
Таймстамп в таблице: 1086581625
Отобранное из таблицы значение: 2004-06-07 00:13:45
Так что вот такая петрушка получилась... При работе ТОЛЬКО на линуксе или ТОЛЬКО на винде никаких проблем, а если база на линуксовом серваке, а генератор отчетов на рабочей станции windows - болт!

По ходу пьесы не может быть, что трабл в MySQL-клиенте (архив parser3sql_1_2_win32_mysql.zip от 26.03.2004)?

Что вы на это можете ответить?