Files
ViciDialSVN/agc_2-X/trunk/bin/AST_sourceID_summary_export.pl
T
mattf e58aa7b6ca updated audio transfer scripts to use astguiclient.conf for settings
updated report generating scripts to use astguiclient.conf for settings
added audio transfer and report FTP settings to the install.pl script

git-svn-id: svn://192.168.202.10@684 3d104415-ff17-0410-8863-d5cf3c621b8a
2007-10-05 04:58:51 +00:00

349 lines
11 KiB
Perl

#!/usr/bin/perl
# AST_sourceID_summary_export.pl version: 2.0.4
#
# This script is designed to gather stats for all leads by source_id and
# post them to a directory
#
# Copyright (C) 2007 Matt Florell <vicidial@gmail.com> LICENSE: GPLv2
#
# CHANGES
# 70905-1409 - First version
# 71005-0054 - Altered script to use astguiclient.conf for settings
#
$txt = '.txt';
$US = '_';
$MT[0] = '';
# Default FTP account variables
$VARREPORT_host = '10.0.0.4';
$VARREPORT_user = 'cron';
$VARREPORT_pass = 'test';
$VARREPORT_port = '21';
$VARREPORT_dir = 'REPORTS';
# default CLI values
$sale_statuses = 'SALE-UPSELL';
$ni_statuses = 'NI';
$np_statuses = 'NP';
### begin parsing run-time options ###
if (length($ARGV[0])>1)
{
$i=0;
while ($#ARGV >= $i)
{
$args = "$args $ARGV[$i]";
$i++;
}
if ($args =~ /--help/i)
{
print "allowed run time options:\n";
print " [--sale-statuses=XXX-XXY] = Statuses that are deemed to be \"Sales\". Default SALE\n";
print " [--NI-statuses=XXX-XXY] = Statuses that are deemed to be \"Not Interested\". Default NI\n";
print " [--NP-statuses=XXX-XXY] = Statuses that are deemed to be \"No Pitch\". Default NP\n";
print " [--ignore-lists=XXX-XXY] = lists that should be ignored in summary\n";
print " [--ftp-transfer] = Send results file by FTP to another server\n";
print " [-q] = quiet\n";
print " [-t] = test\n";
print " [--debug] = debugging messages\n";
print " [--debugX] = Super debugging messages\n";
print "\n";
exit;
}
else
{
if ($args =~ /--debug/i)
{
$DB=1;
print "\n----- DEBUG MODE -----\n\n";
}
if ($args =~ /--debugX/i)
{
$DBX=1;
print "\n----- SUPER DEBUG MODE -----\n\n";
}
if ($args =~ /-q/i)
{
$q=1; $Q=1;
}
if ($args =~ /--sale-statuses=/i)
{
@data_in = split(/--sale-statuses=/,$args);
$sale_statuses = $data_in[1];
$sale_statuses =~ s/ .*$//gi;
}
if ($args =~ /--NI-statuses=/)
{
@data_in = split(/--NI-statuses=/,$args);
$ni_statuses = $data_in[1];
$ni_statuses =~ s/ .*$//gi;
}
if ($args =~ /--NP-statuses=/)
{
@data_in = split(/--NP-statuses=/,$args);
$np_statuses = $data_in[1];
$np_statuses =~ s/ .*$//gi;
}
if ($args =~ /--ignore-lists=/)
{
@data_in = split(/--ignore-lists=/,$args);
$ignore_lists = $data_in[1];
$ignore_lists =~ s/ .*$//gi;
}
if ($args =~ /-ftp-transfer/i)
{
if (!$Q)
{print "\n----- FTP TRANSFER MODE -----\n\n";}
$ftp_transfer=1;
}
if ($args =~ /--test/i)
{
$T=1; $TEST=1;
print "\n----- TESTING -----\n\n";
}
}
}
else
{
print "no command line options set, using defaults.\n";
}
### end parsing run-time options ###
$secX = time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = ($year + 1900);
$mon++;
# # rerun override - Use this to override the day manually
# $year='2007';
# $mon='5';
# $mday='18';
if ($mon < 10) {$mon = "0$mon";}
if ($mday < 10) {$mday = "0$mday";}
if ($hour < 10) {$hour = "0$hour";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$timestamp = "$year-$mon-$mday $hour:$min:$sec";
$filedate = "$year$mon$mday";
$ABIfiledate = "$mon-$mday-$year$us$hour$min$sec";
$shipdate = "$year-$mon-$mday";
$datestamp = "$year/$mon/$mday $hour:$min";
# default path to astguiclient configuration file:
$PATHconf = '/etc/astguiclient.conf';
open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n";
@conf = <conf>;
close(conf);
$i=0;
foreach(@conf)
{
$line = $conf[$i];
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
if ( ($line =~ /^PATHhome/) && ($CLIhome < 1) )
{$PATHhome = $line; $PATHhome =~ s/.*=//gi;}
if ( ($line =~ /^PATHlogs/) && ($CLIlogs < 1) )
{$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;}
if ( ($line =~ /^PATHagi/) && ($CLIagi < 1) )
{$PATHagi = $line; $PATHagi =~ s/.*=//gi;}
if ( ($line =~ /^PATHweb/) && ($CLIweb < 1) )
{$PATHweb = $line; $PATHweb =~ s/.*=//gi;}
if ( ($line =~ /^PATHsounds/) && ($CLIsounds < 1) )
{$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;}
if ( ($line =~ /^PATHmonitor/) && ($CLImonitor < 1) )
{$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;}
if ( ($line =~ /^VARserver_ip/) && ($CLIserver_ip < 1) )
{$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;}
if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) )
{$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;}
if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) )
{$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;}
if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) )
{$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;}
if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) )
{$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;}
if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) )
{$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;}
if ( ($line =~ /^VARREPORT_host/) && ($CLIREPORT_host < 1) )
{$VARREPORT_host = $line; $VARREPORT_host =~ s/.*=//gi;}
if ( ($line =~ /^VARREPORT_user/) && ($CLIREPORT_user < 1) )
{$VARREPORT_user = $line; $VARREPORT_user =~ s/.*=//gi;}
if ( ($line =~ /^VARREPORT_pass/) && ($CLIREPORT_pass < 1) )
{$VARREPORT_pass = $line; $VARREPORT_pass =~ s/.*=//gi;}
if ( ($line =~ /^VARREPORT_port/) && ($CLIREPORT_port < 1) )
{$VARREPORT_port = $line; $VARREPORT_port =~ s/.*=//gi;}
if ( ($line =~ /^VARREPORT_dir/) && ($CLIREPORT_dir < 1) )
{$VARREPORT_dir = $line; $VARREPORT_dir =~ s/.*=//gi;}
$i++;
}
# Customized Variables
$server_ip = $VARserver_ip; # Asterisk server IP
$sale_statusesSQL = $sale_statuses;
$sale_statusesSQL =~ s/-/','/gi;
$sale_statusesSQL = "'$sale_statusesSQL'";
$ni_statusesSQL = $ni_statuses;
$ni_statusesSQL =~ s/-/','/gi;
$ni_statusesSQL = "'$ni_statusesSQL'";
$np_statusesSQL = $np_statuses;
$np_statusesSQL =~ s/-/','/gi;
$np_statusesSQL = "'$np_statusesSQL'";
$ignore_listsSQL = $ignore_lists;
$ignore_listsSQL =~ s/-/','/gi;
$ignore_listsSQL = "'$ignore_listsSQL'";
if (!$Q)
{
print "\n\n\n\n\n\n\n\n\n\n\n\n-- AST_sourceID_summary_export.pl --\n\n";
print "This program is designed to generate a summary report of sourceIDs for VICIDIAL outbound-only campaign and post them to a file. \n";
print "\n";
print "Sale Statuses: $sale_statuses $sale_statusesSQL\n";
print "NI Statuses: $ni_statuses $ni_statusesSQL\n";
print "NP Statuses: $np_statuses $np_statusesSQL\n";
print "Ignore Lists: $ignore_lists $ignore_listsSQL\n";
print "\n";
}
$outfile = "SOURCEID_SUMMARY$filedate$txt";
### open the X out file for writing ###
open(out, ">$PATHweb/vicidial/server_reports/$outfile")
|| die "Can't open $outfile: $!\n";
if (!$VARDB_port) {$VARDB_port='3306';}
use DBI;
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
or die "Couldn't connect to database: " . DBI->errstr;
$dbhB = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
or die "Couldn't connect to database: " . DBI->errstr;
$w=0;
###########################################################################
########### SALES TOTAL IN SYSTEM BY SOURCE_ID vicidial_list ######
###########################################################################
$stmtA = "select source_id,count(*) from vicidial_list where status IN($sale_statusesSQL) and list_id NOT IN($ignore_listsSQL) group by source_id order by source_id;";
if ($DB) {print "|$stmtA|\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$rec_count=0;
while ($sthArows > $rec_count)
{
@aryA = $sthA->fetchrow_array;
$source_id = $aryA[0];
$count = $aryA[1];
print out "ALL_SALES|$source_id|$count\r\n";
if ($DBX) {print "$rec_count|ALL_SALES|$source_id|$count|\n";}
$rec_count++; $w++;
}
$sthA->finish();
###########################################################################
########### NI TOTAL IN SYSTEM BY SOURCE_ID vicidial_list ######
###########################################################################
$stmtA = "select source_id,count(*) from vicidial_list where status IN($ni_statusesSQL) and list_id NOT IN($ignore_listsSQL) group by source_id order by source_id;";
if ($DB) {print "|$stmtA|\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$rec_count=0;
while ($sthArows > $rec_count)
{
@aryA = $sthA->fetchrow_array;
$source_id = $aryA[0];
$count = $aryA[1];
print out "NOT_INTR|$source_id|$count\r\n";
if ($DBX) {print "$rec_count|NOT_INTR|$source_id|$count|\n";}
$rec_count++; $w++;
}
$sthA->finish();
###########################################################################
########### NP TOTAL IN SYSTEM BY SOURCE_ID vicidial_list ######
###########################################################################
$stmtA = "select source_id,count(*) from vicidial_list where status IN($np_statusesSQL) and list_id NOT IN($ignore_listsSQL) group by source_id order by source_id;";
if ($DB) {print "|$stmtA|\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$rec_count=0;
while ($sthArows > $rec_count)
{
@aryA = $sthA->fetchrow_array;
$source_id = $aryA[0];
$count = $aryA[1];
print out "B6_NO_PTCH|$source_id|$count\r\n";
if ($DBX) {print "$rec_count|B6_NO_PTCH|$source_id|$count|\n";}
$rec_count++; $w++;
}
$sthA->finish();
###########################################################################
########### ALL TOTAL IN SYSTEM BY SOURCE_ID vicidial_list ######
###########################################################################
$stmtA = "select source_id,count(*) from vicidial_list where list_id NOT IN($ignore_listsSQL) group by source_id order by source_id;";
if ($DB) {print "|$stmtA|\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$rec_count=0;
while ($sthArows > $rec_count)
{
@aryA = $sthA->fetchrow_array;
$source_id = $aryA[0];
$count = $aryA[1];
print out "RECD_COUNT|$source_id|$count\r\n";
if ($DBX) {print "$rec_count|RECD_COUNT|$source_id|$count|\n";}
$rec_count++; $w++;
}
$sthA->finish();
close(out);
if ($ftp_transfer > 0)
{
use Net::FTP;
if (!$Q) {print "Sending File Over FTP: $outfile\n";}
$ftp = Net::FTP->new("$VARREPORT_host", Port => $VARREPORT_port);
$ftp->login("$VARREPORT_user","$VARREPORT_pass");
$ftp->cwd("$VARREPORT_dir");
$ftp->put("$PATHweb/vicidial/server_reports/$outfile", "$outfile");
$ftp->quit;
}
### calculate time to run script ###
$secY = time();
$secZ = ($secY - $secX);
$secZm = ($secZ /60);
if (!$Q) {print "SOURCEID EXPORT FOR $timestamp: $outfile\n";}
if (!$Q) {print "TOTAL RECORDS IN FILE: $w\n";}
if (!$Q) {print "script execution time in seconds: $secZ minutes: $secZm\n";}
exit;