Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
При разборке файла с помощью Perl в качестве признака конца записи для отдельных вызовов можно принять восклицательный знак «!».
Воспользовавшись вызовом sysread(fd, $v, length), где fd – дескриптор файла $v – переменная, в которую пишется информация, length – количество считывающихся байтов за один вызов, можно установить, что АТС выдает всю запись по вызову отдельными порциями наборов символов, указанных в примере, разделенными пробелами. В АТС имеется буфер (довольно приличный по размеру), в котором хранятся данные по вызовам, так что при соединении с компьютером все предыдущие вызовы «скачиваются» в компьютер.
Код будущей программы состоит из двух блоков:
n блок считывания и обработки (считывает из порта информацию, поступающую из АТС);
n блок загрузки записей в базу данных.
Перед рассмотрением приведенного ниже кода скрипта подчеркнем следующее.
Наша цель – показать, что создать собственную систему биллинга совсем несложно. У каждого системного администратора есть свои излюбленные приемы в Perl, которые он при необходимости использует, приспособив подходящим образом приведенный скрипт или написав свой собственный. Поэтому мы для краткости оставили лишь типовую обработку ошибок, не стремимся усложнять код для обеспечения его безопасности, оптимальности или краткости. Отметим только, что приведенный код неплохо работал у нас на стареньком отдельно стоящем компьютере: процессы внутри АТС относительно медленные и Perl успевает делать все вовремя и без ухищрений.
Отлаженный вариант биллинговой системы с учетом
кода для вывода данных с помощью PHP на Apache-сервер достаточно длинный для
размещения в тексте, поэтому предоставлен автором всем желающим (
Реализация программы
Для реализации программы с помощью системы портов FreeBSD помимо PostgreSQL необходимо для работы интерфейса Perl к PostgreSQL установить модули Perl – DBI, DBD-Pg.
Запустив PostgreSQL, создадим таблицу atstarif базы данных ats:
# create table atstarif (nums varchar(15), mydate date, mytime time, min int, numd bigint);
Таким образом, строки в ней будут содержать поля:
n Номер, инициировавший соединение.
n Дата и время начала разговора.
n Длительность звонка в минутах разговора.
n Номер, на который шел вызов.
Программа биллинга на Perl может иметь следующий вид (некоторые комментарии даны в самом коде).
#!/usr/bin/perl
use POSIX qw(:errno_h);
use DBI;
use strict;
my $user="pgsql";
my $dbname="ats";
my $dsh;
my $dbh;
my $p;
my $pid;
$SIG{ALRM}= 'proga';
sub proga {
kill 9 => $pid;
kill 9 => $p;
}