From f46670674f0a13f135f16a20beb5522db0b3b082 Mon Sep 17 00:00:00 2001 From: Daniel Tiefnig Date: Mon, 29 Nov 2010 23:09:37 +0000 Subject: [PATCH] aligned cdrexporter with current feature set only exporting outgoing, successful, rated CDRs requires latest ossbss --- cdr-exporter.pl | 50 ++++++++++++++++++++++++++++++++----------------- debian/control | 1 + 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/cdr-exporter.pl b/cdr-exporter.pl index 597282f..b4852ea 100755 --- a/cdr-exporter.pl +++ b/cdr-exporter.pl @@ -4,7 +4,6 @@ use strict; use warnings; use DBI; -use Getopt::Long; use Digest::MD5; our $DBHOST; @@ -53,6 +52,12 @@ my %MARKS; # last id etc my $NOW = time(); my @NOW = localtime($NOW); +my @CDR_BODY_FIELDS = qw(id update_time source_user_id source_provider_id source_user source_domain source_cli + source_clir destination_user_id destination_provider_id destination_user destination_domain + destination_user_in destination_domain_in call_type call_status call_code start_time duration + call_id rating_status rated_at carrier_cost customer_cost carrier_zone customer_zone + carrier_destination customer_destination destination_user_dialed); + { my $ts = sprintf('%04i%02i%02i%02i%02i%02i', $NOW[5] + 1900, $NOW[4] + 1, @NOW[3,2,1,0]); my $limit = 5000; @@ -61,8 +66,7 @@ my @NOW = localtime($NOW); for (;;) { print("--- Starting CDR export with id > $MARKS{lastid}\n"); my $s = $DBH->prepare(<<"!"); - select - id, update_time, + select cdr.id, update_time, source_user_id, source_provider_id, source_user, source_domain, source_cli, source_clir, @@ -74,26 +78,38 @@ my @NOW = localtime($NOW); duration, call_id, rating_status, rated_at, carrier_cost, reseller_cost, - customer_cost, carrier_billing_zone_id, - reseller_billing_zone_id, customer_billing_zone_id, - carrier_billing_fee_id, reseller_billing_fee_id, - customer_billing_fee_id, + customer_cost, frag_carrier_onpeak, + frag_reseller_onpeak, frag_customer_onpeak, + carrier_bbz.zone AS carrier_zone, reseller_bbz.zone AS reseller_zone, + customer_bbz.zone AS customer_zone, carrier_bbz.detail AS carrier_destination, + reseller_bbz.detail AS reseller_destination, customer_bbz.detail AS customer_destination, destination_user_dialed - from - cdr - where - id > ? + from accounting.cdr + LEFT JOIN billing.billing_zones_history carrier_bbz ON cdr.carrier_billing_zone_id = carrier_bbz.id + LEFT JOIN billing.billing_zones_history reseller_bbz ON cdr.reseller_billing_zone_id = reseller_bbz.id + LEFT JOIN billing.billing_zones_history customer_bbz ON cdr.customer_billing_zone_id = customer_bbz.id + where cdr.id > ? + and source_provider_id = 1 + and call_status = 'ok' order by - id - limit - $limit + cdr.id + limit $limit ! $s->execute($MARKS{lastid}) or die($DBH->errstr); my @F; - while (my $r = $s->fetch) { - $MARKS{lastid} = $r->[0]; - my $l = join(",", map {(!defined($_) || $_ eq "") ? "" : "'$_'"} @$r); + while (my $r = $s->fetchrow_hashref()) { + # finish export to give rate-o-mat time to catch up + last if $r->{rating_status} eq 'unrated'; + + unless(defined $r->{carrier_zone}) { # platform internal, no peering cost calculated + $r->{carrier_cost} = '0.00'; + $r->{carrier_zone} = 'onnet'; + $r->{carrier_destination} = 'platform internal'; + } + + $MARKS{lastid} = $r->{id}; + my $l = join(",", map {(!defined($_) || $_ eq "") ? "''" : "'$_'"} @$r{@CDR_BODY_FIELDS}); push(@F, $l); } diff --git a/debian/control b/debian/control index fe60ebb..8636108 100644 --- a/debian/control +++ b/debian/control @@ -9,5 +9,6 @@ Homepage: http://sipwise.com/ Package: ngcp-cdr-exporter Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends}, perl-modules, libclass-dbi-mysql-perl +Conflicts: ngcp-ossbss-billing (< 3) Description: CDR export utilities for NGCP platforms. These utilities export CDRs generated by NGCP platforms to CSV files that can be fetched by 3rd party tools.