summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorChristopher Burger <burgerc@freeside.biz>2018-04-11 07:51:23 -0400
committerChristopher Burger <burgerc@freeside.biz>2018-04-11 08:23:51 -0400
commita71bb4db524387e97d57c0884f940f615fa78852 (patch)
tree0c1032a431f291887dd2a00e411d85a6aa5e0e7e /FS
parent8c55053d9bccdf6e9387987ee9df35029ddb8b44 (diff)
RT# 75680 - Added date parse, and display insert error.
Conflicts: FS/FS/cdr/telapi_voip.pm FS/bin/freeside-cdr-telapi-import
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/cdr/telapi_voip.pm52
-rwxr-xr-xFS/bin/freeside-cdr-telapi-import82
2 files changed, 134 insertions, 0 deletions
diff --git a/FS/FS/cdr/telapi_voip.pm b/FS/FS/cdr/telapi_voip.pm
new file mode 100644
index 0000000..abc7d5b
--- /dev/null
+++ b/FS/FS/cdr/telapi_voip.pm
@@ -0,0 +1,52 @@
+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();
+ unless (defined $CDR_TYPES->{$cdrtypename}) {
+ warn "Skipping Record: CDR type name $cdrtypename does not exist!";
+ $param->{skiprow} = 1;
+ }
+ $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..6bb3e4a
--- /dev/null
+++ b/FS/bin/freeside-cdr-telapi-import
@@ -0,0 +1,82 @@
+#!/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,
+);
+
+$startdate = str2time($startdate) or die "can't parse start date $startdate\n";
+ $startdate = time2str('%m-%d-%Y', $startdate);
+$enddate = str2time($enddate) or die "can't parse start date $enddate\n";
+ $enddate = time2str('%m-%d-%Y', $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);
+
+ warn "Importing batch $cdrbatch\n";
+ my $error = FS::cdr::batch_import({
+ 'batch_namevalue' => $cdrbatch,
+ 'file' => $cfh->filename,
+ 'format' => 'telapi_'.$type
+ });
+
+ warn "Error importing CDR's\n".$error if $error;
+
+exit; \ No newline at end of file