[freeside-commits] branch master updated. 4a70502cc285d0b4af063d6448c95a52eb6fb563

Ivan ivan at 420.am
Wed Dec 2 04:12:27 PST 2015


The branch, master has been updated
       via  4a70502cc285d0b4af063d6448c95a52eb6fb563 (commit)
      from  ecf67652f26a147ef405659c98832535155325ba (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 4a70502cc285d0b4af063d6448c95a52eb6fb563
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Dec 2 04:12:25 2015 -0800

    add generic cdr sql import

diff --git a/FS/bin/freeside-cdr-sql.import b/FS/bin/freeside-cdr-sql.import
new file mode 100755
index 0000000..409e5f7
--- /dev/null
+++ b/FS/bin/freeside-cdr-sql.import
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+
+use strict;
+use vars qw( $DEBUG );
+use Date::Parse 'str2time';
+use Date::Format 'time2str';
+use FS::UID qw(adminsuidsetup dbh);
+use FS::cdr;
+use DBI;
+use Getopt::Std;
+
+my %opt;
+getopts('e:H:U:P:D:T:', \%opt);
+my $user = shift or die &usage;
+
+my $engine = $opt{e} || 'mysql';
+
+my $dsn = "dbi:$engine";
+$dsn .= ":database=$opt{D}" if $opt{D};
+$dsn .= ":host=$opt{H}" if $opt{H};
+
+my $dbi = DBI->connect($dsn, $opt{U}, $opt{P}) 
+  or die $DBI::errstr;
+
+adminsuidsetup $user;
+
+my $fsdbh = FS::UID::dbh;
+
+# check for existence of freesidestatus
+my $table = $opt{T} || 'cdr';
+my $status = $dbi->selectall_arrayref("SHOW COLUMNS FROM $table WHERE Field = 'freesidestatus'");
+if( ! @$status ) {
+  print "Adding freesidestatus column...\n";
+  $dbi->do("ALTER TABLE $table ADD COLUMN freesidestatus varchar(32)")
+    or die $dbi->errstr;
+}
+else {
+  print "freesidestatus column present\n";
+}
+
+my @cols = ( qw( 
+calldate clid src dst dcontext channel lastapp lastdata duration 
+    billsec disposition amaflags accountcode uniqueid userfield) );
+my $sql = 'SELECT '.join(',', @cols). " FROM $table WHERE freesidestatus IS NULL";
+my $sth = $sql->prepare($sql);
+$sth->execute;
+print "Importing ".$sth->rows." records...\n";
+
+my $cdr_batch = new FS::cdr_batch({ 
+    'cdrbatch' => 'sql-import-'. time2str('%Y/%m/%d-%T',time),
+  });
+my $error = $cdr_batch->insert;
+die $error if $error;
+my $cdrbatchnum = $cdr_batch->cdrbatchnum;
+my $imports = 0;
+my $updates = 0;
+
+my $row;
+while ( $row = $sth->fetchrow_hashref ) {
+  my $cdr = FS::cdr->new($row);
+  $cdr->startdate(str2time($cdr->calldate));
+  $cdr->cdrbatchnum($cdrbatchnum);
+  my $error = $cdr->insert;
+  if($error) {
+    print "failed import: $error\n";
+  }
+  else {
+    $imports++;
+    if( $dbi->do("UPDATE cdr SET freesidestatus = 'done' 
+        WHERE calldate = ? AND src = ? AND dst = ?",
+                undef,
+                $row->{'calldate'},
+                $row->{'src'},
+                $row->{'dst'},
+
+      ) ) {
+        $updates++;
+    }
+    else {
+      print "failed to set status: ".$dbi->errstr."\n";
+    }
+  }
+}
+print "Done.\nImported $imports CDRs, marked $updates CDRs as done.\n";
+$dbi->disconnect;
+
+sub usage {
+  "Usage: \n  freeside-cdr-sql.import\n\t-e mysql|Pg|... [ -H host ]\n\t-D database\n\t-U user\n\t-P password\n\tfreesideuser\n";
+}
+

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

Summary of changes:
 .../bin/freeside-cdr-sql.import                    |   26 +++++++++++---------
 1 file changed, 14 insertions(+), 12 deletions(-)
 copy bin/cdr-mysql.import => FS/bin/freeside-cdr-sql.import (70%)




More information about the freeside-commits mailing list