diff options
author | levinse <levinse> | 2011-06-22 18:32:21 +0000 |
---|---|---|
committer | levinse <levinse> | 2011-06-22 18:32:21 +0000 |
commit | c1c47a765702a1e1dad680f603d25aa04eeb5269 (patch) | |
tree | 73e75b7db71a16a5b19475dec522f65fd04bf7e2 /FS/FS/Cron/set_lata_have_usage.pm | |
parent | 8a20ba243bbcf659376037dbce3a05c0d7378e1c (diff) |
improve performance of DID provisioning status report, RT10988
Diffstat (limited to 'FS/FS/Cron/set_lata_have_usage.pm')
-rwxr-xr-x | FS/FS/Cron/set_lata_have_usage.pm | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/FS/FS/Cron/set_lata_have_usage.pm b/FS/FS/Cron/set_lata_have_usage.pm new file mode 100755 index 0000000..a1f5273 --- /dev/null +++ b/FS/FS/Cron/set_lata_have_usage.pm @@ -0,0 +1,98 @@ +package FS::Cron::set_lata_have_usage; + +use strict; +use warnings; +use vars qw( @ISA @EXPORT_OK $me $DEBUG ); +use Exporter; +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; + +@ISA = qw( Exporter ); +@EXPORT_OK = qw ( set_lata_have_usage ); +$DEBUG = 0; +$me = '[FS::Cron::set_lata_have_usage]'; + +sub set_lata_have_usage { + my %opt = @_; + + my $debug = 0; + $debug = 1 if $opt{'v'}; + $debug = $opt{'l'} if $opt{'l'}; + + local $DEBUG = $debug if $debug; + + warn "$me set_lata_have_usage called time=".time."\n" if $DEBUG; + + 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"; + } + } + warn "$me cleared have_usage for all LATAs time=".time."\n" if $DEBUG; + + my @dids = qsearch({ 'table' => 'svc_phone', + 'hashref' => + { 'latanum' => + { 'op' => '>', + 'value' => '0', + }, + }, + 'addl_from' => 'join phone_avail using (svcnum)', + }); + warn "$me DID query finished time=".time."\n" if $DEBUG; + + my $count = 0; + foreach my $did ( @dids ) { + warn "$me count=$count time=".time."\n" if $DEBUG && ($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); + } + } + } + + warn "$me Set have_usage finished time=".time."\n" if $DEBUG; + + 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; + warn "$me done time=".time."\n" if $DEBUG; +} + +1; |