From 376b1dfc27736a2d7060ad0ca140565c9d3de55d Mon Sep 17 00:00:00 2001 From: levinse Date: Wed, 22 Jun 2011 17:01:45 +0000 Subject: [PATCH] improve performance of DID provisioning status report, RT10988 --- FS/FS/Schema.pm | 1 + FS/FS/lata.pm | 2 + bin/set-lata-have_usage | 81 ++++++++++++++++++++++ httemplate/search/phone_inventory_provisioned.html | 27 +++----- 4 files changed, 93 insertions(+), 18 deletions(-) create mode 100755 bin/set-lata-have_usage diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 035965e37..ae0541331 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -3164,6 +3164,7 @@ sub tables_hashref { 'columns' => [ 'latanum', 'int', '', '', '', '', 'description', 'varchar', '', $char_d, '', '', + 'have_usage', 'int', 'NULL', '', '', '', ], 'primary_key' => 'latanum', 'unique' => [], diff --git a/FS/FS/lata.pm b/FS/FS/lata.pm index ae4208a9f..84a7992e2 100644 --- a/FS/FS/lata.pm +++ b/FS/FS/lata.pm @@ -38,6 +38,7 @@ primary key description +=item have_usage - a reporting hack =back @@ -101,6 +102,7 @@ sub check { my $error = $self->ut_numbern('latanum') || $self->ut_text('description') + || $self->ut_numbern('have_usage') ; return $error if $error; diff --git a/bin/set-lata-have_usage b/bin/set-lata-have_usage new file mode 100755 index 000000000..1efa42038 --- /dev/null +++ b/bin/set-lata-have_usage @@ -0,0 +1,81 @@ +#!/usr/bin/perl +use strict; +use warnings; +use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearch qsearchs dbh); +use FS::lata; +use FS::phone_avail; +use FS::svc_phone; +use Data::Dumper; + +print "started time=".time."\n"; + +my $user = shift; +adminsuidsetup $user; + +local $SIG{HUP} = 'IGNORE'; +local $SIG{INT} = 'IGNORE'; +local $SIG{QUIT} = 'IGNORE'; +local $SIG{TERM} = 'IGNORE'; +local $SIG{TSTP} = 'IGNORE'; +local $SIG{PIPE} = 'IGNORE'; + +my $oldAutoCommit = $FS::UID::AutoCommit; +local $FS::UID::AutoCommit = 0; +my $dbh = dbh; + +my %latas = map { $_->latanum => $_ } qsearch('lata', {}); + +foreach my $lata ( keys %latas ) { + next unless $latas{$lata}->have_usage > 0; + $latas{$lata}->have_usage(0); + my $error = $latas{$lata}->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + die "error replacing LATA $lata: $error"; + } +} +print "cleared have_usage for all LATAs time=".time."\n"; + +my @dids = qsearch({ 'table' => 'svc_phone', + 'hashref' => + { 'latanum' => + { 'op' => '>', + 'value' => '0', + }, + }, + 'addl_from' => 'join phone_avail using (svcnum)', + }); +print "DID query finished time=".time."\n"; + +my $count = 0; +foreach my $did ( @dids ) { + print "count=$count time=".time."\n" if $count % 1000 == 0; + my @cdrs = $did->get_cdrs; + my $lata = $latas{$did->latanum}; + $count++; + if ( scalar(@cdrs) ) { + if ( !$lata->have_usage ) { + $lata->have_usage(1); + } + else { + $lata->have_usage($lata->have_usage+1); + } + } +} + +print "Set have_usage finished time=".time."\n"; + +foreach my $lata ( keys %latas ) { + if ( $latas{$lata}->modified ) { + print "$lata ".$latas{$lata}->have_usage."\n"; + my $error = $latas{$lata}->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + die "error replacing LATA $lata: $error"; + } + } +} + +$dbh->commit or die $dbh->errstr if $oldAutoCommit; +print "done time=".time."\n"; diff --git a/httemplate/search/phone_inventory_provisioned.html b/httemplate/search/phone_inventory_provisioned.html index 57eb6763b..52657e70a 100644 --- a/httemplate/search/phone_inventory_provisioned.html +++ b/httemplate/search/phone_inventory_provisioned.html @@ -7,17 +7,19 @@ 'select' => 'distinct latanum', }, 'count_query' => 'SELECT COUNT(distinct latanum) FROM phone_avail', - 'header' => [ 'LATA', + 'header' => [ + 'LATA #', + 'LATA Description', 'Available', 'Provisioned', 'Have Usage', ], 'fields' => [ - sub { # LATA + 'latanum', + sub { # LATA Description my $phone_avail = shift; - my $lata = $phone_avail->lata; - $lata = $lata ? $lata->description : ''; - $phone_avail->latanum . " - " . $lata; + return '' unless $phone_avail->lata; + $phone_avail->lata->description; }, sub { # Available my $latanum = shift->latanum; @@ -44,19 +46,8 @@ }, sub { # Have Usage my $phone_avail = shift; - return '' unless $phone_avail->latanum; - my $latanum = $phone_avail->latanum; - my $count = 0; - my $sql = "select count(1) from cdr where src in - (select phonenum from svc_phone where svcnum in ( - select svcnum from phone_avail where latanum = $latanum - and svcnum is not null) ) - or charged_party in (select phonenum from svc_phone where - svcnum in (select svcnum from phone_avail where - latanum = $latanum and svcnum is not null) )"; - my $c = $phone_avail->scalar_sql($sql); - $count++ if $c > 0; - $count; + return '' unless $phone_avail->lata; + $phone_avail->lata->have_usage; }, ], 'align' => 'lccc', -- 2.11.0