Создание БД из логов???

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-17 21:49:59

ProFTP писал(а):попробуй так

Код: Выделить всё

     @userdata = <USER>;

    foreach $_ (@userdata) {

    ($t1,$t2,$t3,$t4) = splite (/ /, $_);


       $dbh = do(
            qq{ INSERT INTO users(year,name,sname,phone) 
                                  VALUES (?,?,?,?)
                 }, undef,  $t1,$t2,$t3,$t4 )  or die $dbh->errstr; 

    }

а куда его вставлять? Я не могу понять как вытягивается строка и как ищет разделители типа пробел и новая строка ...
как я думаю вытягивает в массив @, потом обращаемся к элементам массива $0 $1 $2 $3 ?????

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение ProFTP » 2009-03-17 21:58:30

раделяет пробелами каждую строу, если меня не глючит

Код: Выделить всё

    ($t1,$t2,$t3,$t4) = splite (/ /, $_);

Код: Выделить всё

#!/usr/bin/perl
use DBI;

$db_type = 'mysql';
$db_host = ''localhost;

$db_name = '';
$db_user = '';
$db_pass = '';

$dbh = DBI->connect("DBI:$db_type:database=$db_name;host=$db_host",  $db_user,  $db_pass,  {RaiseError => 1,  PrintError => 1   }    ) || die $DBI::errstr;

$filepath = "/usr/home/user/users.txt";
opendir (DIR, "$filepath");
@userfiles = sort readdir (DIR);

closedir(DIR);

foreach $file (@userfiles)
{
    open(USER,"$filepath/$file");
   @userdata = <USER>;

    foreach $_ (@userdata) {

    ($t1,$t2,$t3,$t4) = splite (/ /, $_);


       $dbh = do(
            qq{ INSERT INTO users(year,name,sname,phone) 
                                  VALUES (?,?,?,?)
                 }, undef,  $t1,$t2,$t3,$t4 )  or die $dbh->errstr; 

    }

    $num++;

}
print "'$userdata[0]' \n";

$counth = $dbh->selectrow_arrayref(qq{SELECT COUNT(*) FROM users }, undef );

print "В таблице $counth->[0] пользователей, $num из которых только что было добавленно. \n\n";
по гугли в гугле по пробуй по работать с perl, по открый файл, по записуй в них, посомтри как там это делаеться, бысрее сделаешь...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-17 22:04:31

Попробую !)) но спасибо большое, очень помог ... Спасибо +++++ов тебе :smile:

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-17 23:50:08

Мишаня писал(а):Попробую !)) но спасибо большое, очень помог ... Спасибо +++++ов тебе :smile:
Получилось, наконец то запустился код и все нормально добавляет! :smile:

Код: Выделить всё

#!/usr/bin/perl
use DBI;

$db_user = 'anonymous';
$db_pass = 'mysql';
$db_info = 'DBI:mysql:users:localhost';
$dbh = DBI->connect($db_info,  $db_user,  $db_pass);
$filepath = "/usr/home/user/local";

opendir (DIR, $filepath) or die print("Error open dir $!");
@userfiles = sort readdir (DIR);
closedir(DIR);

foreach $file (@userfiles)
{
    open(USER,"$filepath/$file");
    @userdata = <USER>;
    foreach $_ (@userdata){
    ($t1,$t2,$t3,$t4) = split (/ /, $_);
    close(USER);
    $inserth=$dbh->do(qq{INSERT INTO users(year,name,sname,phone) VALUES (?,?,?,?)}, undef,$t1,$t2,$t3,$t4) or die $dh->errstr;
    }
    $num++;
}

$counth = $dbh->selectrow_arrayref(qq{SELECT COUNT(*) FROM users }, undef );
print "В таблице $counth->[0] пользователей, $num из которых только что было добавленно. \n\n";
Спасибо большо еще раз ProFTP помощь :good:

Только есть один ньюанс: если в каталогележат какие-нибудь файлы скрипт будет их всех перечитывать добавляя построчно в поля БД, у меня сначала так на 500 полей забило :smile: создал каталог и в него один требовательный файл ...

Теперь буду реализовывать дальше свою затейку :smile:

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-19 13:06:35

Мишаня писал(а): Теперь буду реализовывать дальше свою затейку :smile:
Столкнулся с проблемкой ... У меня в файле строки разного размера, если попадается строка меньше запроса то она просто не добавляется в базу ... кто знает как помочь?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-19 13:10:35

Мишаня писал(а):если попадается строка меньше запроса
то есть?

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-20 0:17:54

zg писал(а):
Мишаня писал(а):если попадается строка меньше запроса
то есть?
Есть файл, например:
Миша отправил на mail.ru 22.15.09
Миша получил от ramberl.ru
БД имеет, например, 5 полей [name | do | where | mail | date ]
И вот если попадается строка меньше чем 5 полей, она просто не добавляется ... вот по такому коду:

Код: Выделить всё

foreach $_ (@userdata){
    ($t1,$t2,$t3,$t4) = split (/ /, $_);
    close(USER);
    $inserth=$dbh->do(qq{INSERT INTO users(year,name,sname,phone)  
    VALUES (?,?,?,?)}, undef,$t1,$t2,$t3,$t4) 
    or die $dh->errstr;
    }
т.е. задается статическое число полей в строке, если оно не равно - строка пропускается .... а мне нужно чтобы все строки добавлялись, а те которые меньше - забивались просто пробелами ... Кто знает ?
Как я думаю, читать построчно, проверять сколько элементов в массиве, если меньше забивать пробелами ... Как это на Перле реализовать .. ?

Аватара пользователя
---nebo---
старшина
Сообщения: 424
Зарегистрирован: 2008-11-01 21:06:23
Откуда: Киев
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение ---nebo--- » 2009-03-20 0:34:26

Читая тему понял, что важно делать выборки: Кто, Куда, че и когда.... и все желательно в веб морде.
Возможно не так важно засовывать все логи в базу?

Если логи с постфикса, можно воспользоваться awstats'ом. Там уже эти скрипты на перле написаны, причем автоматически конвертируют почтовые логи а потом парсят. У меня такая штука стоит и довольно неплохо генерит отчеты по куче параметров. Засунул это дело в крон и можна смотреть актуальные данные ))), еще и графиков понарисовывает(мелочь, А приятно )))

Конечно, при таком размере лога можно или как-то отпимизировать работу скриптов (выберать только записи опред. года, месяца или еще чета) или посмотреть как они устроены для написания своего или не очень часто их запускать(зависит от машины).

Плюсом использования базы конечно есть то, что мона класно выбирать нужную информацию...тут уже на твое умотрение

P.S. awstats можно прицепить модулем к webmin' у, в твоем случае будет достаточно удобно
...участки под застройку в живописном месте Интернет

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-20 0:51:12

---nebo--- писал(а):Читая тему понял, что важно делать выборки: Кто, Куда, че и когда.... и все желательно в веб морде.
Возможно не так важно засовывать все логи в базу?

Если логи с постфикса, можно воспользоваться awstats'ом. Там уже эти скрипты на перле написаны, причем автоматически конвертируют почтовые логи а потом парсят. У меня такая штука стоит и довольно неплохо генерит отчеты по куче параметров. Засунул это дело в крон и можна смотреть актуальные данные ))), еще и графиков понарисовывает(мелочь, А приятно )))

Конечно, при таком размере лога можно или как-то отпимизировать работу скриптов (выберать только записи опред. года, месяца или еще чета) или посмотреть как они устроены для написания своего или не очень часто их запускать(зависит от машины).

Плюсом использования базы конечно есть то, что мона класно выбирать нужную информацию...тут уже на твое умотрение

P.S. awstats можно прицепить модулем к webmin' у, в твоем случае будет достаточно удобно
Спасибо, дружище :good: Просто сам хочу все это прочувствовать ... )))