summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2012-01-04 01:20:13 +0000
committerivan <ivan>2012-01-04 01:20:13 +0000
commit75e11f1d1a5ced24496b5732e290f7762403feb8 (patch)
tree881c3d0db1e6f2855ed73993fdcd9c0b9f8ea302
parentdf41e077b4bf3d63604b7de171fbe53c04db1ea3 (diff)
optimize CDR rating after timed rate perf regression, RT#15739
-rw-r--r--FS/FS/Schema.pm4
-rw-r--r--FS/FS/part_pkg/voip_cdr.pm7
2 files changed, 8 insertions, 3 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 5046ec733..782597313 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -2694,7 +2694,9 @@ sub tables_hashref {
],
'primary_key' => 'ratedetailnum',
'unique' => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
- 'index' => [ [ 'ratenum', 'dest_regionnum' ] ],
+ 'index' => [ [ 'ratenum', 'dest_regionnum' ],
+ [ 'ratenum', 'ratetimenum' ]
+ ],
},
'rate_region' => {
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index df1f2ccf1..08cf4a10a 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -570,8 +570,11 @@ sub calc_usage {
if ( !exists($interval_cache{$regionnum}) ) {
my @intervals = (
sort { $a->stime <=> $b->stime }
- map { my $r = $_->rate_time; $r ? $r->intervals : () }
- $rate->rate_detail
+ map { $_->rate_time->intervals }
+ qsearch({ 'table' => 'rate_detail',
+ 'hashref' => { 'ratenum' => $rate->ratenum },
+ 'extra_sql' => 'AND ratetimenum IS NOT NULL',
+ })
);
$interval_cache{$regionnum} = \@intervals;
warn " cached ".scalar(@intervals)." interval(s)\n"