[freeside-commits] branch master updated. aadc07f765a7cdb6bc00cf89089c7e147b58d6f1

Christopher Burger burgerc at 420.am
Mon Jun 26 11:36:54 PDT 2017


The branch, master has been updated
       via  aadc07f765a7cdb6bc00cf89089c7e147b58d6f1 (commit)
      from  94c7f944bc5836e071ff3484cbba7e5b94e075a3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit aadc07f765a7cdb6bc00cf89089c7e147b58d6f1
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jun 26 14:36:21 2017 -0400

    RT# 75680 - created cdr batch import for telapi

diff --git a/FS/FS/cdr/telapi_sms.pm b/FS/FS/cdr/telapi_sms.pm
new file mode 100644
index 0000000..28c4c4b
--- /dev/null
+++ b/FS/FS/cdr/telapi_sms.pm
@@ -0,0 +1,44 @@
+package FS::cdr::telapi_sms;
+use base qw( FS::cdr );
+
+use strict;
+use vars qw( @ISA %info $CDR_TYPES );
+use FS::Record qw( qsearch );
+use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );
+
+%info = (
+  'name'          => 'telapi_sms',
+  'weight'        => 601,
+  'header'        => 1,
+  'type'          => 'csv',
+  'import_fields' => [
+    _cdr_date_parser_maker('startdate'),  # date gmt
+    'src',                                # source
+    'dst',                                # destination
+    'clid',                               # direction
+    sub {
+      my($cdr, $cdrtypename, $conf, $param) = @_;
+      return unless length($cdrtypename);
+      _init_cdr_types();
+      die "no matching cdrtypenum for $cdrtypename"
+        unless defined $CDR_TYPES->{$cdrtypename};
+      $cdr->cdrtypenum($CDR_TYPES->{$cdrtypename});
+    },                                    # type
+    skip(1),                              # cost
+  ],
+);
+
+sub skip { map {''} (1..$_[0]) }
+
+sub _init_cdr_types {
+  unless ($CDR_TYPES) {
+    $CDR_TYPES = {};
+    foreach my $cdr_type ( qsearch('cdr_type') ) {
+      die "multiple cdr_types with same cdrtypename".$cdr_type->cdrtypename
+        if defined $CDR_TYPES->{$cdr_type->cdrtypename};
+      $CDR_TYPES->{$cdr_type->cdrtypename} = $cdr_type->cdrtypenum;
+    }
+  }
+}
+
+1;
\ No newline at end of file
diff --git a/FS/FS/cdr/telapi_voip.pm b/FS/FS/cdr/telapi_voip.pm
new file mode 100644
index 0000000..65aed76
--- /dev/null
+++ b/FS/FS/cdr/telapi_voip.pm
@@ -0,0 +1,50 @@
+package FS::cdr::telapi_voip;
+use base qw( FS::cdr );
+
+use strict;
+use vars qw( @ISA %info $CDR_TYPES );
+use FS::Record qw( qsearch );
+use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );
+
+%info = (
+  'name'          => 'telapi_voip',
+  'weight'        => 601,
+  'header'        => 1,
+  'type'          => 'csv',
+  'import_fields' => [
+    _cdr_date_parser_maker('startdate'),  #'date gmt'
+    'src',                                # source
+    'dst',                                # destination
+    'clid',                               # callerid
+    skip(1),                              # hangup code
+    skip(1),                              # sip account
+    'src_ip_addr',                        # orig ip
+    'duration',                           # duration
+    skip(1),                              # per minute
+    'upstream_price',                     # callcost
+    sub {
+      my($cdr, $cdrtypename, $conf, $param) = @_;
+      return unless length($cdrtypename);
+      _init_cdr_types();
+      die "no matching cdrtypenum for $cdrtypename"
+        unless defined $CDR_TYPES->{$cdrtypename};
+      $cdr->cdrtypenum($CDR_TYPES->{$cdrtypename});
+    },                                   # type 
+    _cdr_min_parser_maker('billsec'),     #PriceDurationMins
+  ],
+);
+
+sub skip { map {''} (1..$_[0]) }
+
+sub _init_cdr_types {
+  unless ($CDR_TYPES) {
+    $CDR_TYPES = {};
+    foreach my $cdr_type ( qsearch('cdr_type') ) {
+      die "multiple cdr_types with same cdrtypename".$cdr_type->cdrtypename
+        if defined $CDR_TYPES->{$cdr_type->cdrtypename};
+      $CDR_TYPES->{$cdr_type->cdrtypename} = $cdr_type->cdrtypenum;
+    }
+  }
+}
+
+1;
\ No newline at end of file
diff --git a/FS/bin/freeside-cdr-telapi-import b/FS/bin/freeside-cdr-telapi-import
new file mode 100755
index 0000000..4a637f5
--- /dev/null
+++ b/FS/bin/freeside-cdr-telapi-import
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+
+use strict;
+
+use Date::Format 'time2str';
+use Date::Parse 'str2time';
+use Getopt::Long;
+use Cpanel::JSON::XS;
+use Net::HTTPS::Any qw(https_post https_get);
+use Time::Local;
+
+use FS::Record qw(qsearchs dbh);
+use FS::UID qw(adminsuidsetup);
+use FS::cdr;
+use FS::cdr_batch;
+
+my $host = "cdr.teleapi.net";
+
+my @now = localtime();
+my $now = timelocal($now[0],$now[1],$now[2],$now[3],$now[4],$now[5]); #most recent midnight
+
+sub usage {
+  "Usage:
+freeside-cdr-telapi-import -t type -p token -s startdate [-e enddate] freesideuser
+
+Downloads any existing CDR voip files or CDR SMS files (type) from the start date untill the enddate and 
+imports those records.";
+}
+
+my ($type,$token,$startdate,$enddate);
+GetOptions(
+  "type=s"      => \$type,
+  "token=s"     => \$token,
+  "startdate=s" => \$startdate,
+  "enddate=s"   => \$enddate,
+);
+
+my $fsuser = $ARGV[-1];
+
+die usage() unless $fsuser;
+
+adminsuidsetup($fsuser);
+
+my ( $page, $response, %reply_headers )= https_get(
+      'host' => $host,
+      'port' => '443',
+      'path' => '/'.$type.'/'.$startdate.'/'.$enddate.'?token='.$token,
+    );
+
+die "Bad response from telapi server: $response"
+  unless $response =~ /^200/;
+
+my $cdrbatch = "Telapi-import-" . $type . "-" . time2str('%Y/%m/%d-%T',$now);  
+
+my $dir = $FS::UID::cache_dir. "/cache.". $FS::UID::datasrc; 
+
+my $cfh = new File::Temp( TEMPLATE => 'telapi.XXXXXXXX',
+                          SUFFIX   => '.csv',
+                          DIR      => $dir,
+                         )
+    or die "can't open temporary file to save data: $!\n";
+
+#print returned data to file handle for temp file.
+print $cfh $page;
+
+seek($cfh,0,0);
+
+  print "Importing batch $cdrbatch\n";
+  my $error = FS::cdr::batch_import({
+    'batch_namevalue' => $cdrbatch,
+    'file'            => $cfh->filename,
+    'format'          => 'telapi_'.$type
+  });
+
+exit;
\ No newline at end of file

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cdr/telapi_sms.pm           |   44 ++++++++++++++++++++++
 FS/FS/cdr/telapi_voip.pm          |   50 +++++++++++++++++++++++++
 FS/bin/freeside-cdr-telapi-import |   75 +++++++++++++++++++++++++++++++++++++
 3 files changed, 169 insertions(+)
 create mode 100644 FS/FS/cdr/telapi_sms.pm
 create mode 100644 FS/FS/cdr/telapi_voip.pm
 create mode 100755 FS/bin/freeside-cdr-telapi-import




More information about the freeside-commits mailing list