Аналитика занятости линий для БД

Скриптик для анализа одновременного занятия линий.

Суть простая выбираем промежуток когда считаываем кол-во звонков, например каждые 5 минут начиная с 2012-09-01. И смотрим какие звонки к какому промежутку относятся. на выходе пара: время – кол-во линий.

Играя SQL запросами можно получить статистику по каналу или по префиксу, вообщем инструмент нужный, но данная реализация крайне медленная. Времени на разработку совсем нет, а решение принимать хочется на основании конкретных данных.

#!/usr/bin/perl

use strict;
use DBI;
use Time::Local;
use Date::Parse;

my $dbh = DBI->connect(‘dbi:Pg:database=yooxy’, ‘pavel’,”) or die $DBI::errstr;

#get all calls
my $date_start = ‘2012-09-09 00:00:00’;

my $leg = 300; #in seconds
my $calls_query = ‘select time,duration from acc where time > \”.$date_start.’\’;’;
my $sth = $dbh->prepare($calls_query);
$sth->execute;
my $ary_ref = $sth->fetchall_arrayref;

my $start_time = str2time($date_start);
my $a;
my $i,my $i2;
my %values;
$dbh->disconnect;
foreach ($a=$start_time;$a = $a + $leg;) {
$i2++;
foreach (@$ary_ref) {
$i++;
my $date1 = $_->[0];
my $duration = 60;# $_->[1];
my $line = $a;

my $start = str2time($date1);
my $end = str2time($date1) + $duration;

if (($line > $start) and ($line < $end)) { print “o$start < $line < $end\n”; $values{$a}++};

}

if ($values{$a} > 0) {print scalar(localtime($a)),”;”,$values{$a},”\n”;} else {print scalar(localtime($a)),”;”,0,”\n”;

};

last if $a > time();
}
print “\ncalls $i2; iter $i;”;

 

Leave a Reply