[Freeswitch-trunk] [commit] r13954 - freeswitch/trunk/scripts/contrib/intralanman/perl/cdr
FreeSWITCH SVN
intralanman at freeswitch.org
Thu Jun 25 11:17:21 PDT 2009
Author: intralanman
Date: Thu Jun 25 13:17:20 2009
New Revision: 13954
Log:
i knew i had this laying around somewhere
Added:
freeswitch/trunk/scripts/contrib/intralanman/perl/cdr/xml-cdr-importer (contents, props changed)
Added: freeswitch/trunk/scripts/contrib/intralanman/perl/cdr/xml-cdr-importer
==============================================================================
--- (empty file)
+++ freeswitch/trunk/scripts/contrib/intralanman/perl/cdr/xml-cdr-importer Thu Jun 25 13:17:20 2009
@@ -0,0 +1,151 @@
+#!/usr/bin/perl
+use strict;
+use Data::Dumper;
+use Sys::Syslog;
+use XML::Simple;
+use CGI;
+use DBI;
+
+openlog('xml-cdr', 'pid|ndelay', "LOG_USER");
+open(DEBUG, ">/tmp/debug.txt");
+
+my $config={};
+my $db;
+my $identifier = 'cdr-csv-importer';
+
+sub parse_config {
+ open(CONFIG, "<cdr-csv-importer.ini") or die("Can't open config file (cdr-csv-importer.ini)\n");
+ while (<CONFIG>) {
+ #print $_;
+ chomp; #kill whitespaces
+
+ next if !(m/^[[:alnum:]]/); #skip lines that don't start right
+ next if m/^\s*$/; #skip lines with only whitespace
+ next if m/^;/; #skip ini comments
+ next if m(/^\[.*\]/); # skip the start of a section
+
+ my ($key, $val) = split(/\s+=\s+/, $_, 2);
+ #print "'$key' = '$val'\n";
+ if($key eq "fields") {
+ @{$config->{fields}} = split(/,/, $val);
+ } else {
+ $config->{$key} = $val;
+ }
+ }
+ close(CONFIG);
+}
+
+sub create_table {
+# my $db = shift;
+ my $sql = "CREATE TABLE IF NOT EXISTS `$config->{table}` (
+ `id` int(11) NOT NULL auto_increment,
+ `caller_id_name` varchar(255) NOT NULL default '',
+ `caller_id_number` varchar(255) NOT NULL default '',
+ `destination_number` varchar(255) NOT NULL default '',
+ `context` varchar(255) NOT NULL default '',
+ `start_stamp` varchar(255) NOT NULL default '',
+ `answer_stamp` varchar(255) NOT NULL default '',
+ `end_stamp` varchar(255) NOT NULL default '',
+ `duration` varchar(255) NOT NULL default '',
+ `billsec` varchar(255) NOT NULL default '',
+ `hangup_cause` varchar(255) NOT NULL default '',
+ `uuid` varchar(255) NOT NULL default '',
+ `bleg_uuid` varchar(255) NOT NULL default '',
+ `accountcode` varchar(255) NOT NULL default '',
+ `read_codec` varchar(255) NOT NULL default '',
+ `write_codec` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uuid` (`uuid`)
+) ENGINE=InnoDB";
+ $db->do($sql);
+ if (!$db->{Executed}) {
+ die("We couldn't CREATE the DB table\n");
+ }
+}
+
+sub connect_db {
+ return DBI->connect($config->{connect_string}, $config->{username}, $config->{password});
+}
+
+sub is_db_connected {
+ my $query = $db->prepare("SELECT CURRENT_TIMESTAMP;");
+ $query->execute();
+}
+
+sub urldecode {
+ my $url = shift;
+ $url =~ s/%([a-fA-F0-9]{2,2})/chr(hex($1))/eg;
+ return $url;
+}
+
+
+
+&parse_config;
+$db = &connect_db;
+&create_table;
+my $cgi = new CGI;
+#syslog("LOG_INFO", Dumper $cgi);
+#syslog("LOG_INFO", Dumper \@ARGV);
+
+my @cgi_params = $cgi->param;
+print "Content-Type: text/plain\r\n\r\n";
+
+my $xml = new XML::Simple();
+#my $cdr = $xml->XMLin('/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml');
+my $cdr = $xml->parse_string($cgi->param('cdr'));
+print DEBUG Dumper $cdr;
+
+my $variables = $cdr->{variables};
+my $caller_profile = {};
+if (ref $cdr->{callflow} eq "ARRAY") {
+ syslog("LOG_INFO", "callflow is an array");
+ $caller_profile = $cdr->{callflow}->[0]->{caller_profile};
+} else {
+ syslog("LOG_INFO", "callflow is not an array");
+ $caller_profile = $cdr->{callflow}->{caller_profile};
+}
+
+#syslog(LOG_INFO, Dumper $cdr);
+
+print "caller_id_name: $caller_profile->{caller_id_name}\n";
+print "caller_id_number: $caller_profile->{caller_id_number}\n";
+print "destination_number: $caller_profile->{destination_number}\n";
+print "context: $caller_profile->{context}\n";
+print "start_stamp: " . &urldecode($variables->{start_stamp}) . "\n";
+print "answer_stamp: " . &urldecode($variables->{answer_stamp}) . "\n";
+print "end_stamp: " . &urldecode($variables->{end_stamp}) . "\n";
+print "duration: $variables->{duration}\n";
+print "billsec: $variables->{billsec}\n";
+print "hangup_cause: $variables->{hangup_cause}\n";
+print "uuid: $caller_profile->{uuid}\n";
+print "bleg_uuid: $caller_profile->{bleg_uuid}\n";
+print "accountcode: $variables->{accountcode}\n";
+print "\n\n";
+
+my $cdr_line = sprintf(
+ '"%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s"',
+ $caller_profile->{caller_id_name},
+ $caller_profile->{caller_id_number},
+ $caller_profile->{destination_number},
+ $caller_profile->{context},
+ &urldecode($variables->{start_stamp}),
+ &urldecode($variables->{answer_stamp}),
+ &urldecode($variables->{end_stamp}),
+ $variables->{duration},
+ $variables->{billsec},
+ $variables->{hangup_cause},
+ $caller_profile->{uuid},
+ $caller_profile->{bleg_uuid},
+ $variables->{accountcode},
+ $variables->{read_codec},
+ $variables->{write_codec}
+);
+
+syslog("LOG_INFO", $cdr_line);
+
+my $query = sprintf(
+ "INSERT INTO %s (%s) VALUES (%s);",
+ $config->{table}, join(',', @{$config->{fields}}), $cdr_line
+ );
+syslog("LOG_INFO", $query);
+$db->do($query);
More information about the Freeswitch-trunk
mailing list