BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 23:22

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Помогите с конвертацией логов
СообщениеДобавлено: 22 мар 2012, 06:02 
Не в сети
Клиент

Зарегистрирован: 12 мар 2012, 11:50
Сообщения: 85
Карма: 0
Помогите плиз с конвертацией логов
сейчас имею следующий код:
Код:
#use strict;
use POSIX;

my $exclude;

my $base_path = "/atc";
my $sourcelog_path = "$base_path/csv";
my $destlog_path = "$base_path/source";

process_ats( 1 );

sub process_ats
{
   my $ats_num = shift;
   my $dir_name = $sourcelog_path;
   
   opendir( DIR, $dir_name )
      or die "Can't open dir $dir_name\n";
      
   foreach ( readdir( DIR ) )    
   {
      if( $_ ne "." && $_ ne ".." )
      {
         my $file_name = $dir_name."/".$_;
         print "Processing file $file_name\n";         
         process_file( $file_name, "$destlog_path/" );
      }      
   }
   
   closedir( DIR );   
}


sub process_file
{
   my $src_file = shift;
   my $dst_dir = shift;
   
    open( FILE, $src_file )
       or die "Can't open file $src_file\n";

    my %DATA;

    LINE: while( <FILE> )
    {
   if (/^(\w+)\s(\d+)\s(.*)\s(\d{4})\-(\d{2})\-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s(\d{4})\-(\d{2})\-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s(\d+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\d+)\s(\d+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(.*)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)/)
       {             
          my ( $from_port, $from_num, $to_port, $to_num, $dd, $mm, $yy,  $h, $m, $s, $amount )
          = ( $30, $2, $32, $3, $6, $5, $4, $7, $8, $9, $17 );
         $amount=ceil($amount/10);
          
          $from_num_e164 = num2e164( $from_num );
      $to_num =~ s/\*//g;

          $to_num_e164 = num2e164( $to_num );      

          my $key = $yy."_".$mm."_".$dd."_".$h;
          my $value = "$dd.$mm.$yy $h:$m:$s\t$amount\t$from_num\t$from_num_e164\t$to_num\t$to_num_e164\t$from_port\t$to_port\t0\n";
   
          $DATA{$key} .= $value;
       }
       else
       {
          warn "unrecognized string:\n $_\n";
       }
    }

    close( FILE );
   

    foreach my $key ( keys %DATA )
    {
        my ( $YY, $MM, $DD, $HH ) = split( /_/, $key );
       my $path = $dst_dir.$YY;

       if ( !-e $path )
       {
          mkdir $path, 320;
       }
       
       $path = $path."/".$MM;

       if ( !-e $path )
       {
          mkdir $path, 320;
       }


       my $file = $path."/".$DD."_".$HH;

       open( FILE, ">".$file ) or die "can't create file '$file': $!\n";
       print FILE $DATA{$key};
       close( FILE );

       chdir $path;
       my $err = `zip ${DD}_${HH}.zip ${DD}_${HH}`;
       unlink ( "${DD}_${HH}" );
       chdir $base_path;
    }
   
    close FILE;
}   

sub num2e164
{
   my $num = shift;
   chomp($num);
   
   $before = $num;
   if ( $num=="42324030200" )
       { $num="4232403020"; }
   if( $num =~s/^77(\d{4})(\d+)$/7423677$1/ )
   {
   }
   elsif ( $num =~ s/^79(\d{4})(\d+)$/7423679$1/ )
   {
   }
   elsif ( $num =~ s/^64(\d{4})(\d+)$/7423664$1/ )
   {
   }
   elsif( $num =~ s/^(\d{10})$/7$1/ )
   {
   }
   elsif ( $num =~ s/^5(\d{4})(\d+)$/7423665$1/ )
   {
   }
   elsif ( $num =~ s/^5(\d{4})$/7423665$1/ )
   {
   }
   elsif ( $num =~ s/^66(\d{5})$/742366$1/ )
   {
   }
   elsif ( $num =~ s/^01(\d+)$/7423601/ )
   {
   }
   elsif ( $num =~ s/^02(\d+)$/7423602/ )
   {
   }
   elsif ( $num =~ s/^03(\d+)$/7423603/ )
   {
   }
   elsif( $num =~ s/^(\d{1,7})$/74236$1/ )
   {
   }
   elsif( $num =~ s/^810(\d+)$/$1/ )
   {
   }
   elsif( $num=~ s/^84236(\d+)$/074236$1/ )
   {
   }
   elsif( $num =~ s/^8(\d+)$/7$1/ )
   {
   }
   elsif( $num =~ s/^6(\d{5})(\d+)$/742366$1/ ){
   }
   elsif ( $num =~ s/^7(\d{10})$/7/ )
   {
   }
   elsif ( $num =~ s/^(\d{11,13})$/$1/ )
   {
   }
   elsif( $num =~ s/^(\d+)$/74236$1/ )
   {
   }   
   else
   {
      print "Unknown number type $num\n";
   }
   return $num;
}


Что сделать что бы вот это
Код:
elsif( $num=~ s/^84236(\d+)$/074236$1/ )
   {
   }

выполнялось только если звонок прошел скажем через 1 транк( $to_port=1) ???
Не спрашивайте почему 07...., так надо)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с конвертацией логов
СообщениеДобавлено: 26 мар 2012, 17:26 
Не в сети

Зарегистрирован: 22 окт 2009, 15:45
Сообщения: 201
Карма: 15
SeGa писал(а):
выполнялось только если звонок прошел скажем через 1 транк( $to_port=1) ???

Что такое транк?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с конвертацией логов
СообщениеДобавлено: 26 мар 2012, 18:20 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SeGa писал(а):
[/code]
Что сделать что бы вот это
Код:
elsif( $num=~ s/^84236(\d+)$/074236$1/ )
   {
   }

выполнялось только если звонок прошел скажем через 1 транк( $to_port=1) ???
Не спрашивайте почему 07...., так надо)


В смысле вам просто условие port==1 надо добавить и все ?

Код:
elsif( $num=~ s/^84236(\d+)$/074236$1/ && port==1 )
   {
   }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с конвертацией логов
СообщениеДобавлено: 27 мар 2012, 09:40 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
KostiK писал(а):
SeGa писал(а):
выполнялось только если звонок прошел скажем через 1 транк( $to_port=1) ???

Что такое транк?

наверное имелось ввиду транковый порт

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с конвертацией логов
СообщениеДобавлено: 04 апр 2012, 16:36 
Не в сети

Зарегистрирован: 22 дек 2008, 13:02
Сообщения: 270
Откуда: Москва
Карма: 27
Код:
elsif( ($from_port == 1) and ($num=~ s/^84236(\d+)$/074236$1/))
   {
   }

Это если надо когда получен из 1 транка, меняйте на $to_port для отправляемого транка.
source: http://perldoc.perl.org/5.8.8/perlop.html#Logical-And


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.039s | 25 Queries | GZIP : On ]