Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Таев Олег 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 - болт!