ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Администрирование > *nix системы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

маленький вопрос perl --> mysql
  #1  
Старый 23.04.2010, 12:05
Аватар для diakon2
diakon2
Познающий
Регистрация: 05.07.2008
Сообщений: 59
Провел на форуме:
145373

Репутация: 5
По умолчанию маленький вопрос perl --> mysql

народ, не могу разобраться с парсеров в mysql (((
есть лог фаил(входящие\исходящие звонки с атски), из него при помощи парсера создается массив, далее в другом скрипте из массива инфа попадает в переменные, потом в ячейки мускуля, одна из переменных никак не хочет лезть в мускуль...

вот что в мускуле
mysql> select * from calls;
+---------------------+-----------+------------+------+------+-------------+----------+-------+
| timeofcall | forwarded | internally | co | way | number | duration | cost |
+---------------------+-----------+------------+------+------+-------------+----------+-------+
| 0000-00-00 00:00:00 | 0 | 301 | 2 | 1 | 623 | 17 | 0.000 |
| 0000-00-00 00:00:00 | 1 | 305 | 1 | 1 | 0 | 155 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 624 | 1 | 1 | 624 | 0 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 624 | 1 | 1 | 624 | 0 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 152 | 1 | 1 | 624 | 22 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 114 | 2 | 1 | 622 | 24 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 301 | 1 | 1 | 624 | 226 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 114 | 1 | 1 | 622 | 8 | 0.000 |
| 0000-00-00 00:00:00 | 0 | 301 | 20 | 2 | 3320213 | 0 | 0.000 |

все верно кроме 0000-00-00 00:00:00

лог фаил
---- Site Name : BEREGKI ---------------------------------------------------------------
NO STA CO TIME START DIALED ACT CNT COST ACCOUNT CODE
---- ----- --- -------- -------------- ------------------- --- ----- ----------- ------------
3609 233 002 00:00:07 04/14/10 16:13 I625 RING 00:09
3608 111 001 00:02:36 04/14/10 16:12 I625 RING 00:02
3610 111 001 00:01:12 04/14/10 16:16 I625 RING 00:02
3611 114 001 00:00:11 04/14/10 16:23 I622 RING 00:08
3612 111 025 00:00:40 04/14/10 16:23 O3320213 ** 0 0
3613 111 001 00:01:02 04/14/10 16:25 I625 RING 00:01
3614 114 001 00:00:11 04/14/10 16:33 I622 RING 00:06
3615 111 024 00:01:25 04/14/10 16:35 O3320289 ** 0 0

парсер


sub parsecurcalls() {
while ($str=<PBX_DATA>)
{
$stringNumber++;
if ($str =~ /(\d{4}) (.{5}) (\d{3}) (\d{2}:\d{2}:\d{2}) (\d{2}\/\d{2}\/\d{2}) (\d{2}:\d{2}) (.{20}) (.{2}) (.{5}) (.{11}) (.{12})/){
unitecurcalls();
}else{
#print("$stringNumber\n");
if ($vars{debug} =~ /yes/i){
if ($str !~ /^$/){
print $str;
};
};
};
};
};

sub unitecurcalls() {
my $no=$1;
my $sta=$2;
my $co=$3;
my $call_duration=$4;
my $date=$5;
my $time=$6;
my $dialed_number=$7;
my $act=$8;
my $cnt=$9;
my $cost=$10;
my $account_code=$11;


$co=int($co);
$forwarded=0;

if ($dialed_number=~/(\d+)/)
{
$number=$1;
}
else {
$number=0;
}

if($dialed_number =~ /^[IG]/){
$way='1';
$forwarded=0;
}
elsif($dialed_number =~ /^O/){
$way='2';
$forwarded=0;
}
elsif($dialed_number =~ /^T/){
$way='2';
$forwarded=1;
}
elsif($dialed_number =~ /^t/){
$way='1';
$forwarded=1;
}

if ($date=~(/(\d{2})\/(\d{2})\/(\d{2})/)) {
$Month=$2;
$Day=$1;
$Year=$3+2000;
$timeofcall = "$Year-$Month-$Day $time:00";
}

if ($call_duration=~(/(\d{2})\d{2})\d{2})/)) {
$duration = (($1*60*60)+($2*60)+$3);
}


if ($TimeOfCall ne ""){
$callsCount++;
}

my $internally=int($sta);
#print("$timeofcall, $forwarded, $internally, $co, $way, $number, $duration\n");
WriteRecord($timeofcall, $forwarded, $internally, $co, $way, $number, $duration);
};

1;






процедура записи в мускуль
sub WriteRecord{
my ($time_of_call, $fwd, $int, $co, $way, $number, $duration) = @_ ;
##$time_of_call="2010-02-03 10:10:10";
my $query = "INSERT INTO calls ( timeofcall, forwarded, internally, co, way, number, duration ) VALUES (?, ?, ?, ?, ?, ?, ?)";
my $sth = $dbh->prepare($query);
$sth->execute($time_of_call, $fwd, $int, $co, $way, $number, $duration);
if($sth->err){ # try to reconnect and send the query again
$ERRORMESSAGE="\nError on sth->execute: ".$sth->errstr().", reconnecting\n";
echoerrors();
if(connecttodb()){
my $sth = $dbh->prepare($query);
$sth->execute($time_of_call, $fwd, $int, $co, $way, $number, $duration);
if(!$sth->err) { # success
return 0;
}
}

если сделать так $time_of_call="2010-02-03 10:10:10"; то в мускуль все нормально пишется, ну в смысле чтото отличное от нулей ) в принципе руководству нужна статистика по дням , а когда именно - утром днем или вечером совершался звонок не принципиально, и я думаю на худой конец можно своять скрипт который будет останавливать atslog менять дату в этой строке, сохранять фаил и запускать atslog, вариант изощренный но других пока не вижу.

у кого есть какие нибуть идеи ?
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ROR + MySQL lukmus PHP, PERL, MySQL, JavaScript 1 20.02.2010 04:30
Защита БД MySQL от SQL инъекций с помощью GreenSQL xcedz Администрирование 5 02.04.2009 21:46
perl вопрос koi8-r PHP, PERL, MySQL, JavaScript 5 22.04.2006 13:46
вопрос про mySql уязвимость Kent Уязвимости 6 19.07.2005 01:01
Вопрос по mysql (Возможно ли подключение к базе с другого хоста)? Grrl Форумы 6 18.10.2004 08:52



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ