| Новости | 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 - болт!