diff --git a/agc_2-X/trunk/bin/AST_sourceID_summary_export.pl b/agc_2-X/trunk/bin/AST_sourceID_summary_export.pl new file mode 100644 index 00000000..1668b708 --- /dev/null +++ b/agc_2-X/trunk/bin/AST_sourceID_summary_export.pl @@ -0,0 +1,334 @@ +#!/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 LICENSE: GPLv2 +# +# CHANGES +# 70905-1409 - First version + +$txt = '.txt'; +$US = '_'; +$MT[0] = ''; + +# optional FTP account variables +$FTP_host = '10.0.0.4'; +$FTP_user = 'cron'; +$FTP_pass = 'test'; +$FTP_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 = ; +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;} + $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("$FTP_host", Port => 21); + $ftp->login("$FTP_user","$FTP_pass"); + $ftp->cwd("$FTP_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; + +