mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-30 07:41:39 +00:00 
			
		
		
		
	
		
			
	
	
		
			82 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
|   | #! /usr/bin/perl | ||
|  | 
 | ||
|  | # Copyright (c) 2010 by Precise Networks, Inc.  All rights reserved.  http://precisenetworksinc.com | ||
|  | 
 | ||
|  | # See http://www.asterisk.org for more information about | ||
|  | # the Asterisk project. Please do not directly contact | ||
|  | # any of the maintainers of this project for assistance; | ||
|  | # the project provides a web site, mailing lists and IRC | ||
|  | # channels for your use. | ||
|  | # | ||
|  | # This program is free software, distributed under the terms of | ||
|  | # the GNU General Public License Version 2. See the LICENSE file | ||
|  | # at the top of the source tree. | ||
|  | 
 | ||
|  | # 2010-01-30 by Patrick Bennett Hagen: original version. | ||
|  | 
 | ||
|  | use strict; | ||
|  | use DBI(); | ||
|  | 
 | ||
|  | # main | ||
|  |     !$ARGV[6] && die "Required arguments: <cdr_log_file> <mysql_hostname> <database> <table> <username> <password> <preview|import>\n"; | ||
|  | 
 | ||
|  |     open(cdr_csv, "<$ARGV[0]" || die "Unable to open $ARGV[0]\n"); | ||
|  |     my @cdr = <cdr_csv>; | ||
|  |     close(cdr_csv); | ||
|  | 
 | ||
|  |     my $dbh = DBI->connect("DBI:mysql:database=$ARGV[2];host=$ARGV[1]","$ARGV[4]","$ARGV[5]"); | ||
|  |     my $sth = undef; | ||
|  |     my ($accountcode, $src, $dst, $dcontext, $clid, $channel, $dstchannel, $lastapp, $lastdata, $start, $answer, $end, $duration, $billsec, $disposition, $amastr, $amaflags, $uniqueid, $userfield) = undef; | ||
|  | 
 | ||
|  |     foreach (@cdr) { | ||
|  |         ($accountcode, $_) = getNextField($_); | ||
|  |         ($src        , $_) = getNextField($_); | ||
|  |         ($dst        , $_) = getNextField($_); | ||
|  |         ($dcontext   , $_) = getNextField($_); | ||
|  |         ($clid       , $_) = getNextField($_); | ||
|  |         $clid =~ s/\\\"\\\"/\\\"/g; | ||
|  |         ($channel    , $_) = getNextField($_); | ||
|  |         ($dstchannel , $_) = getNextField($_); | ||
|  |         ($lastapp    , $_) = getNextField($_); | ||
|  |         ($lastdata   , $_) = getNextField($_); | ||
|  |         ($start      , $_) = getNextField($_); | ||
|  |         ($answer     , $_) = getNextField($_); | ||
|  |         ($end        , $_) = getNextField($_, ","); | ||
|  |         ($duration   , $_) = getNextField($_, ","); | ||
|  |         ($billsec    , $_) = getNextField($_, ","); | ||
|  |         ($disposition, $_) = getNextField($_); | ||
|  |         ($amastr     , $_) = getNextField($_); | ||
|  |         ($amastr eq "'DEFAULT'")       && ($amaflags="'0'"); | ||
|  |         ($amastr eq "'OMIT'")          && ($amaflags="'1'"); | ||
|  |         ($amastr eq "'BILLING'")       && ($amaflags="'2'"); | ||
|  |         ($amastr eq "'DOCUMENTATION'") && ($amaflags="'3'"); | ||
|  |         ($uniqueid   , $_) = getNextField($_); | ||
|  |         ($userfield  , $_) = getNextField($_, "\n"); | ||
|  | 
 | ||
|  |         my $s = "insert into $ARGV[3] (accountcode, src, dst, dcontext, clid, channel, dstchannel, lastapp, lastdata, calldate, duration, billsec, disposition, amaflags, uniqueid, userfield) values ($accountcode, $src, $dst, $dcontext, $clid, $channel, $dstchannel, $lastapp, $lastdata, $start, $duration, $billsec, $disposition, $amaflags, $uniqueid, $userfield)"; | ||
|  |         $sth = $dbh->prepare($s); | ||
|  |         if ($ARGV[6] eq "import") { | ||
|  |             $sth->execute(); | ||
|  |             print "."; | ||
|  |         } | ||
|  |         ($ARGV[6] eq "preview") && (print "$s\n\n"); | ||
|  |     } | ||
|  |     $dbh->disconnect(); print "done.\n"; | ||
|  | # main | ||
|  | 
 | ||
|  | sub getNextField { | ||
|  |     my $s = shift; | ||
|  |     my $delimiter = shift; | ||
|  |     (!$delimiter) && ($delimiter = "\",\""); | ||
|  |     my $endPos = index $s, "$delimiter"; | ||
|  |     ($delimiter eq ",")     && ($endPos++); | ||
|  |     ($delimiter eq "\n")    && ($endPos++); | ||
|  |     ($delimiter eq "\",\"") && ($endPos+=2); | ||
|  |     my $field = substr $s, 0, $endPos, ""; | ||
|  |     $field = substr $field, 0, (length $field) - 1; | ||
|  |     ((substr $field, -1) eq "\"")   && ($field = substr $field, 0, (length $field) - 1); | ||
|  |     ((substr $field, 0, 1) eq "\"") && ($field = substr $field, 1, length $field); | ||
|  |     $field = $dbh->quote($field); | ||
|  |     return $field, $s; | ||
|  | } # getNextField |