git-svn-id: svn://192.168.202.10@1240 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
@@ -0,0 +1,598 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# AST_CRON_audio_3_newftp.pl version 2.2.0
|
||||
#
|
||||
# This is a STEP-3 program in the audio archival process. Normally you can run it
|
||||
# every 3 minutes and copies the recording files to an FTP server.
|
||||
#
|
||||
# put an entry into the cron of of your asterisk machine to run this script
|
||||
# every 3 minutes or however often you desire
|
||||
#
|
||||
# ### recording mixing/compressing/ftping scripts
|
||||
# #0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl
|
||||
# 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl
|
||||
# 1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl --MP3
|
||||
# 2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_newftp.pl --MP3
|
||||
#
|
||||
# FLAGS FOR COMPRESSION FILES TO TRANSFER
|
||||
# --gsm or --GSM = GSM 6.10 files
|
||||
# --mp3 or --MP3 = MPEG Layer3 files
|
||||
# --ogg or --OGG = OGG Vorbis files
|
||||
# --wav or --WAV = WAV files
|
||||
# --gsw or --GSW = GSM 6.10 codec with RIFF headers (.wav extension)
|
||||
#
|
||||
# FLAGS FOR PING SETTINGS
|
||||
# --ping-type = The type of ping to send. Options are "none", "tcp", "udp", "icmp",
|
||||
# "stream", "syn", and "external". None disables pinging. Default is "icmp"
|
||||
# WARNING setting --ping-type="none" can lead to files being "transfer" to no if your ftp server goes down.
|
||||
# --ping-timeout = How long to wait for the ping to timeout before giving up, default is 5 seconds.
|
||||
#
|
||||
# FLAGS FOR FTP TRANSFER INFO
|
||||
# --ftp-host = the host address to ftp into
|
||||
# --ftp-port = the port of the ftp server
|
||||
# --ftp-user = the user to log into the ftp server with
|
||||
# --ftp-pass = the password to log into the ftp server with
|
||||
# --ftp-dir = the directory to put the files into on the ftp server
|
||||
# --url-path = the url where the recordings can be accessed after the move
|
||||
#
|
||||
# FLAGS THAT EFFECT THE ACTUAL TRANSFER
|
||||
# --stay-connected = remain connected to the ftp server. Without this the script will disconnect and reconnect for each file.
|
||||
# --transfer-limit = the number of files to transfer before giving up. Default is 1000
|
||||
# --list-limit = number of files to list in the directory before moving on
|
||||
# --no-date-dir = does not create a date directory on the server for the files.
|
||||
# --campaign_id = which OUTBOUND campaigns to transfer files for in a '-' delimited list
|
||||
# (this only works for outbound calls, not inbound or transfers)
|
||||
# --ingroup_id = which ingroups to transfer files for in a '-' delimited list
|
||||
# WARNING you can only set --campaign_id or --ingroup_id, not both.
|
||||
#
|
||||
# The following example will transfer 50 mp3s for the campaigns TESTCAMP1 and TESTCAMP2 to the ftp server.
|
||||
# It will not create dated directories on the ftp server. It will send icmp pings to the server
|
||||
# and wait at most 3 seconds for a response:
|
||||
# /usr/share/astguiclient/AST_CRON_audio_3_newftp.pl --no-date-dir --mp3 --ping-type="icmp" --ping-timeout=3 \
|
||||
# --ftp-host="10.10.10.15" --ftp-port=21 --ftp-user="username" --ftp-pass="password" --ftp-dir="RECORDINGS" \
|
||||
# --url-path="http://10.10.10.15/RECORDINGS" --transfer-limit=50 --list-limit=200 --campaign_id="TESTCAMP1-TESTCAMP2"
|
||||
#
|
||||
# Copyright (C) 2008 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
|
||||
#
|
||||
# CHANGELOG:
|
||||
# 90930-1405 - mikec - first build
|
||||
|
||||
use 5.008;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
# OTHER USE FLAGS
|
||||
use DBI;
|
||||
use Net::Ping;
|
||||
use Net::FTP;
|
||||
use Time::HiRes ('gettimeofday','usleep','sleep'); # necessary to have perl sleep command for less than one second
|
||||
|
||||
|
||||
# Vars
|
||||
my $debug = 0;
|
||||
my $debugX = 0;
|
||||
my $test = 0;
|
||||
|
||||
my $pingtype = "tcp";
|
||||
my $pingtimeout = 5;
|
||||
my $datedir = 1;
|
||||
my $camp_check = 0;
|
||||
my $campaigns = "";
|
||||
my @camp_array;
|
||||
my $ingrp_check = 0;
|
||||
my $ingroups = "";
|
||||
my @ingrp_array;
|
||||
my $list_limit = 1000;
|
||||
my $trans_limit = 1000;
|
||||
my $trans_type = "wav";
|
||||
|
||||
my $PATHhome = '';
|
||||
my $PATHlogs = '';
|
||||
my $PATHagi = '';
|
||||
my $PATHweb = '';
|
||||
my $PATHsounds = '';
|
||||
my $PATHmonitor = '';
|
||||
my $PATHDONEmonitor = '';
|
||||
my $VARserver_ip = '';
|
||||
my $VARDB_server = '';
|
||||
my $VARDB_database = '';
|
||||
my $VARDB_user = '';
|
||||
my $VARDB_pass = '';
|
||||
my $VARDB_port = '';
|
||||
my $ftp_host = '10.0.0.4';
|
||||
my $ftp_user = 'cron';
|
||||
my $ftp_pass = 'test';
|
||||
my $ftp_port = '21';
|
||||
my $ftp_dir = 'RECORDINGS';
|
||||
my $url_path = 'http://10.0.0.4';
|
||||
|
||||
# default path to astguiclient configuration file:
|
||||
my $PATHconf = '/etc/astguiclient.conf';
|
||||
|
||||
# load the config file settings
|
||||
open(CONF, "$PATHconf") || die "can't open $PATHconf: $!\n";
|
||||
my @conf = <CONF>;
|
||||
close(CONF);
|
||||
my $i=0;
|
||||
my $line='';
|
||||
foreach(@conf) {
|
||||
$line = $conf[$i];
|
||||
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
|
||||
if ($line =~ /^PATHhome/)
|
||||
{$PATHhome = $line; $PATHhome =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHlogs/)
|
||||
{$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHagi/)
|
||||
{$PATHagi = $line; $PATHagi =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHweb/)
|
||||
{$PATHweb = $line; $PATHweb =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHsounds/)
|
||||
{$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHmonitor/)
|
||||
{$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;}
|
||||
if ($line =~ /^PATHDONEmonitor/)
|
||||
{$PATHDONEmonitor = $line; $PATHDONEmonitor =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARserver_ip/)
|
||||
{$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARDB_server/)
|
||||
{$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARDB_database/)
|
||||
{$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARDB_user/)
|
||||
{$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARDB_pass/)
|
||||
{$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARDB_port/)
|
||||
{$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARFTP_host/)
|
||||
{$ftp_host = $line; $ftp_host =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARFTP_user/)
|
||||
{$ftp_user = $line; $ftp_user =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARFTP_pass/)
|
||||
{$ftp_pass = $line; $ftp_pass =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARFTP_port/)
|
||||
{$ftp_port = $line; $ftp_port =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARFTP_dir/)
|
||||
{$ftp_dir = $line; $ftp_dir =~ s/.*=//gi;}
|
||||
if ($line =~ /^VARHTTP_path/)
|
||||
{$url_path = $line; $url_path =~ s/.*=//gi;}
|
||||
$i++;
|
||||
}
|
||||
|
||||
# parse run-time options
|
||||
my $args = '';
|
||||
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 " [--help] = this screen\n";
|
||||
print " [--test] = don't move the file\n";
|
||||
print " [--debug] = debug\n";
|
||||
print " [--debugX] = super debug\n";
|
||||
print " [--gsm or --GSM] = copy GSM 6.10 files\n";
|
||||
print " [--mp3 or --MP3] = copy MPEG Layer3 files\n";
|
||||
print " [--ogg or --OGG] = copy OGG Vorbis files\n";
|
||||
print " [--wav or --WAV] = copy WAV files\n";
|
||||
print " [--gsw or --GSW] = copy GSM 6.10 codec with RIFF headers (.wav extension)\n";
|
||||
print " [--ping-type] = The type of ping to send. Options are \"none\", \"tcp\", \"udp\", \"icmp\", \n";
|
||||
print " \"stream\", \"syn\", and \"external\". None disables pinging. Default is \"icmp\"\n";
|
||||
print " WARNING setting --ping-type=\"none\" can lead to files being \"transfer\"\n";
|
||||
print " to no where if your ftp server goes down.\n";
|
||||
print " [--ping-timeout] = How long to wait for the ping to timeout before giving up, default is 5 seconds.\n";
|
||||
print " [--ftp-host] = the host address to ftp into\n";
|
||||
print " [--ftp-port] = the port of the ftp server \n";
|
||||
print " [--ftp-user] = the user to log into the ftp server with\n";
|
||||
print " [--ftp-pass] = the password to log into the ftp server with\n";
|
||||
print " [--ftp-dir] = the directory to put the files into on the ftp server\n";
|
||||
print " [--url-path] = the url where the recordings can be accessed after the move\n";
|
||||
print " [--transfer-limit=XXX] = the number of files to transfer before giving up. Default is 1000\n";
|
||||
print " [--list-limit=XXX] = number of files to list in the directory before moving on\n";
|
||||
print " [--no-date-dir] = does not put the files in a dated directory.\n";
|
||||
print " [--campaign_id] = which OUTBOUND campaigns to transfer files for in a '-' delimited list \n";
|
||||
print " (this only works for outbound calls, not inbound or transfers)\n";
|
||||
print " [--ingroup_id] = which ingroups to transfer files for in a '-' delimited list\n";
|
||||
print " WARNING you can only set --campaign_id or --ingroup_id, not both.\n\n";
|
||||
exit;
|
||||
} else {
|
||||
if ($args =~ /--debug/i) {
|
||||
$debug=1;
|
||||
print "\n----- DEBUG -----\n\n";
|
||||
}
|
||||
if ($args =~ /--debugX/i) {
|
||||
$debugX=1;
|
||||
$debug=1;
|
||||
print "\n----- SUPER DEBUG -----\n\n";
|
||||
}
|
||||
if ($args =~ /--test/i) {
|
||||
$test=1;
|
||||
print "\n----- TESTING -----\n\n";
|
||||
}
|
||||
if (($args =~ /--nodatedir/i) || ($args =~ /--no-date-dir/i)) {
|
||||
$datedir=0;
|
||||
if ($debug) {
|
||||
print "\n----- NO DATE DIRECTORIES -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ping-type=/i) {
|
||||
my @data_in = split(/--ping-type=/,$args);
|
||||
$pingtype = $data_in[1];
|
||||
$pingtype =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FILE TRANSFER LIMIT: $trans_limit -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ping-timeout=/i) {
|
||||
my @data_in = split(/--ping-timeout=/,$args);
|
||||
$pingtimeout = $data_in[1];
|
||||
$pingtimeout =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- PING TIMEOUT: $pingtimeout -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ftp-host=/i) {
|
||||
my @data_in = split(/--ftp-host=/,$args);
|
||||
$ftp_host = $data_in[1];
|
||||
$ftp_host =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FTP HOST: $ftp_host -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ftp-port=/i) {
|
||||
my @data_in = split(/--ftp-port=/,$args);
|
||||
$ftp_port = $data_in[1];
|
||||
$ftp_port =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FTP PORT: $ftp_port -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ftp-user=/i) {
|
||||
my @data_in = split(/--ftp-user=/,$args);
|
||||
$ftp_user = $data_in[1];
|
||||
$ftp_user =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FTP USER: $ftp_user -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ftp-pass=/i) {
|
||||
my @data_in = split(/--ftp-pass=/,$args);
|
||||
$ftp_pass = $data_in[1];
|
||||
$ftp_pass =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FTP PASSWORD: $ftp_pass -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ftp-dir=/i) {
|
||||
my @data_in = split(/--ftp-dir=/,$args);
|
||||
$ftp_dir = $data_in[1];
|
||||
$ftp_dir =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FTP DIRECTORY: $ftp_dir -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--url-path=/i) {
|
||||
my @data_in = split(/--url-path=/,$args);
|
||||
$url_path = $data_in[1];
|
||||
$url_path =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- URL PATH: $url_path -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--campaign_id=/i) {
|
||||
my @data_in = split(/--campaign_id=/,$args);
|
||||
$campaigns = $data_in[1];
|
||||
$campaigns =~ s/ .*//gi;
|
||||
$camp_check=1;
|
||||
if ($debug) {
|
||||
print "\n----- CAMPAIGNS: $campaigns -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--ingroup_id=/i) {
|
||||
my @data_in = split(/--ingroup_id=/,$args);
|
||||
$ingroups = $data_in[1];
|
||||
$ingroups =~ s/ .*//gi;
|
||||
$ingrp_check=1;
|
||||
if ($debug) {
|
||||
print "\n----- INGROUPS: $ingroups -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--transfer-limit=/i) {
|
||||
my @data_in = split(/--transfer-limit=/,$args);
|
||||
$trans_limit = $data_in[1];
|
||||
$trans_limit =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FILE TRANSFER LIMIT: $trans_limit -----\n\n";
|
||||
}
|
||||
}
|
||||
if ($args =~ /--list-limit=/i) {
|
||||
my @data_in = split(/--list-limit=/,$args);
|
||||
$list_limit = $data_in[1];
|
||||
$list_limit =~ s/ .*//gi;
|
||||
if ($debug) {
|
||||
print "\n----- FILE LIST LIMIT: $list_limit -----\n\n";
|
||||
}
|
||||
}
|
||||
if ( ( $args =~ /--GSM/i ) || ( $args =~ /--gsm/i ) ){
|
||||
$trans_type="gsm";
|
||||
if ($debug) {
|
||||
print "GSM audio files\n";
|
||||
}
|
||||
} else {
|
||||
if ( ($args =~ /--MP3/i) || ($args =~ /--mp3/i) ) {
|
||||
$trans_type="mp3";
|
||||
if ($debug) {
|
||||
print "MP3 audio files\n";
|
||||
}
|
||||
} else {
|
||||
if ( ( $args =~ /--OGG/i) || ($args =~ /--ogg/i) ) {
|
||||
$trans_type="ogg";
|
||||
if ($debug) {
|
||||
print "OGG audio files\n";
|
||||
}
|
||||
} else {
|
||||
if ( ( $args =~ /--WAV/i ) || ( $args =~ /--wav/i ) ) {
|
||||
$trans_type="wav";
|
||||
if ($debug) {
|
||||
print "WAV audio files\n";
|
||||
}
|
||||
} else {
|
||||
if ( ($args =~ /--GSW/i) || ($args =~ /--gsw/i) ) {
|
||||
$trans_type="gsw";
|
||||
if ($debug) {
|
||||
print "GSW audio files\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#### make sure they are not trying to do something we cannot do ####
|
||||
if (($camp_check) && ($ingrp_check)) {
|
||||
print "ERROR. You cannot specify ingroups and campaigns in the same instance of this script.\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
#### get the list of campaigns ####
|
||||
if ($camp_check) {
|
||||
@camp_array = split(/-/,$campaigns);
|
||||
}
|
||||
|
||||
#### get the list of ingroups ####
|
||||
if ($ingrp_check) {
|
||||
@ingrp_array = split(/-/,$ingroups);
|
||||
}
|
||||
|
||||
#### connect to the db ####
|
||||
my $dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
|
||||
or die "Couldn't connect to database: " . DBI->errstr;
|
||||
|
||||
#### prepare the sql queries ahead of time so they run quicker ####
|
||||
# get the info for the recording
|
||||
my $rec_log_stmt = "SELECT recording_id, start_time, vicidial_id, lead_id FROM recording_log WHERE filename=? ORDER BY recording_id DESC LIMIT 1;";
|
||||
my $rec_log_sth = $dbhA->prepare($rec_log_stmt) or die "preparing: ",$dbhA->errstr;
|
||||
|
||||
# find the campaign_id for the call.
|
||||
my $vici_log_stmt = "SELECT campaign_id FROM vicidial_log WHERE uniqueid=? AND lead_id=? ORDER BY campaign_id DESC LIMIT 1;";
|
||||
my $vici_log_sth = $dbhA->prepare($vici_log_stmt) or die "preparing: ",$dbhA->errstr;
|
||||
|
||||
# find the ingroup_id for the call.
|
||||
# why did matt name the ingroup field in the closer log campaign_id?
|
||||
my $clsr_log_stmt = "SELECT campaign_id FROM vicidial_closer_log WHERE closecallid=? AND lead_id=? ORDER BY campaign_id DESC LIMIT 1;";
|
||||
my $clsr_log_sth = $dbhA->prepare($clsr_log_stmt) or die "preparing: ",$dbhA->errstr;
|
||||
|
||||
# update the recording log
|
||||
my $update_log_stmt = "UPDATE recording_log SET location=? WHERE recording_id=?;";
|
||||
my $update_log_sth = $dbhA->prepare($update_log_stmt) or die "preparing: ",$dbhA->errstr;
|
||||
|
||||
#### directory where -all recordings are
|
||||
my $directory = '';
|
||||
if ($trans_type eq "wav") {$directory = "$PATHDONEmonitor";}
|
||||
if ($trans_type eq "gsw") {$directory = "$PATHDONEmonitor/GSW";}
|
||||
if ($trans_type eq "gsm") {$directory = "$PATHDONEmonitor/GSM";}
|
||||
if ($trans_type eq "ogg") {$directory = "$PATHDONEmonitor/OGG";}
|
||||
if ($trans_type eq "mp3") {$directory = "$PATHDONEmonitor/MP3";}
|
||||
|
||||
|
||||
opendir(FILE, "$directory/");
|
||||
my @files = readdir(FILE);
|
||||
|
||||
### Loop through files first to gather filesizes
|
||||
my $file_loop_count=0;
|
||||
my $files_that_count=0;
|
||||
my @FILEsize1;
|
||||
my @FILES;
|
||||
foreach(@files) {
|
||||
$FILEsize1[$file_loop_count] = 0;
|
||||
if ( (length($FILES[$file_loop_count]) > 4) && (!-d "$directory/$FILES[$file_loop_count]") ) {
|
||||
$FILEsize1[$file_loop_count] = (-s "$directory/$FILES[$file_loop_count]");
|
||||
if ($debugX) {
|
||||
print "$directory/$FILES[$file_loop_count] $FILEsize1[$file_loop_count]\n";
|
||||
}
|
||||
$files_that_count++;
|
||||
}
|
||||
$file_loop_count++;
|
||||
if ($files_that_count >= $list_limit) {
|
||||
last();
|
||||
}
|
||||
}
|
||||
|
||||
### sleep 5 seconds
|
||||
sleep(5);
|
||||
|
||||
my $transfered_files = 0;
|
||||
my @FILEsize2;
|
||||
my $recording_id = '';
|
||||
my $start_date = '';
|
||||
my $ALLfile = '';
|
||||
my $SQLFILE = '';
|
||||
my $transfer_file=0;
|
||||
|
||||
my $ping;
|
||||
|
||||
if ($pingtype ne "none") {
|
||||
my $ping = Net::Ping->new($pingtype, $pingtimeout);
|
||||
}
|
||||
|
||||
### Loop through files a second time to gather filesizes again 5 seconds later
|
||||
$file_loop_count=0;
|
||||
foreach(@FILES) {
|
||||
$transfer_file=0;
|
||||
|
||||
$FILEsize2[$file_loop_count] = 0;
|
||||
|
||||
if ( (length($FILES[$file_loop_count]) > 4) && (!-d "$directory/$FILES[$file_loop_count]") ) {
|
||||
|
||||
$FILEsize2[$file_loop_count] = (-s "$directory/$FILES[$file_loop_count]");
|
||||
if ($debugX) {
|
||||
print "$directory/$FILES[$file_loop_count] $FILEsize2[$file_loop_count]\n\n";
|
||||
}
|
||||
|
||||
if ($FILEsize1[$file_loop_count] ne $FILEsize2[$file_loop_count]) {
|
||||
if ($debugX) {print "not transfering $directory/$FILES[$file_loop_count]. File size mismatch $FILEsize2[$file_loop_count] != $FILEsize1[$file_loop_count]\n\n";}
|
||||
}
|
||||
|
||||
if ( ($FILES[$file_loop_count] !~ /out\.|in\.|lost\+found/i) && ($FILEsize1[$file_loop_count] eq $FILEsize2[$file_loop_count]) && (length($FILES[$file_loop_count]) > 4)) {
|
||||
my $recording_id = '';
|
||||
my $start_date = '';
|
||||
my $lead_id = '';
|
||||
my $vicidial_id = '';
|
||||
my $ALLfile = $FILES[$file_loop_count];
|
||||
my $SQLFILE = $FILES[$file_loop_count];
|
||||
$SQLFILE =~ s/-all\.wav|-all\.gsm|-all\.ogg|-all\.mp3//gi;
|
||||
|
||||
my $rec_log_db_stmt = "select recording_id, start_time, vicidial_id, lead_id from recording_log where filename=$SQLFILE order by recording_id desc LIMIT 1;";
|
||||
$rec_log_sth->execute($SQLFILE) or die "executing: $rec_log_db_stmt ", $dbhA->errstr;
|
||||
my $sthArows=$rec_log_sth->rows;
|
||||
if ($sthArows > 0) {
|
||||
my @aryA = $rec_log_sth->fetchrow_array;
|
||||
$recording_id = "$aryA[0]";
|
||||
$start_date = "$aryA[1]";
|
||||
$vicidial_id = "$aryA[2]";
|
||||
$lead_id = "$aryA[3]";
|
||||
$start_date =~ s/ .*//gi;
|
||||
}
|
||||
$rec_log_sth->finish();
|
||||
|
||||
if ($debug) {
|
||||
print "|$recording_id|$start_date|$ALLfile| |$SQLFILE|\n";
|
||||
}
|
||||
|
||||
### are we doing a campaign check
|
||||
if ($camp_check) {
|
||||
my $vici_log_db_stmt = "select campaign_id from vicidial_log where uniqueid=$vicidial_id and lead_id=$lead_id;";
|
||||
$vici_log_sth->execute($vicidial_id, $lead_id) or die "executing: $rec_log_db_stmt ", $dbhA->errstr;
|
||||
my $sthArows=$vici_log_sth->rows;
|
||||
if ($sthArows > 0) {
|
||||
my @aryA = $vici_log_sth->fetchrow_array;
|
||||
my $campaign_id = "$aryA[0]";
|
||||
|
||||
# loop through the campaigns they want to transfer
|
||||
foreach( @camp_array ) {
|
||||
# see if the campaign is in there
|
||||
if ( $_ eq $campaign_id ) {
|
||||
$transfer_file = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
$vici_log_sth->finish();
|
||||
} else {
|
||||
### are we doing an ingroup check
|
||||
if ($ingrp_check) {
|
||||
my $clsr_log_db_stmt = "select campaign_id from vicidial_closer_log where closecallid=$vicidial_id and lead_id=$lead_id;";
|
||||
$clsr_log_sth->execute($vicidial_id, $lead_id) or die "executing: $rec_log_db_stmt ", $dbhA->errstr;
|
||||
my $sthArows=$clsr_log_sth->rows;
|
||||
if ($sthArows > 0) {
|
||||
my @aryA = $clsr_log_sth->fetchrow_array;
|
||||
my $ingroup_id = "$aryA[0]";
|
||||
|
||||
# loop through the ingroups they want to transfer
|
||||
foreach( @ingrp_array ) {
|
||||
# see if the ingroup is in there
|
||||
if ( $_ eq $ingroup_id ) {
|
||||
$transfer_file = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
$clsr_log_sth->finish();
|
||||
} else {
|
||||
### doing neither so always transfer the file.
|
||||
$transfer_file = 1;
|
||||
}
|
||||
}
|
||||
|
||||
### BEGIN Remote file transfer
|
||||
if ($transfer_file) {
|
||||
# ping the host to make sure it is alive
|
||||
my $ping_good = 0;
|
||||
if ($pingtype ne "none") {
|
||||
$ping_good = $ping->ping("$ftp_host");
|
||||
if($debug){print "Ping result: $ping_good\n";}
|
||||
}
|
||||
|
||||
### if the ping came back okay or if we are not pinging the server
|
||||
if (($ping_good) || ($pingtype eq "none")) {
|
||||
$transfered_files++;
|
||||
|
||||
my $start_date_PATH='';
|
||||
my $ftp = Net::FTP->new("$ftp_host", Port => $ftp_port, Debug => $debugX);
|
||||
$ftp->login("$ftp_user","$ftp_pass");
|
||||
$ftp->cwd("$ftp_dir");
|
||||
if ($datedir) {
|
||||
$ftp->mkdir("$start_date");
|
||||
$ftp->cwd("$start_date");
|
||||
$start_date_PATH = "$start_date/";
|
||||
}
|
||||
$ftp->binary();
|
||||
$ftp->put("$directory/$ALLfile", "$ALLfile");
|
||||
$ftp->quit;
|
||||
|
||||
my $update_log_db_stmt = "UPDATE recording_log set location='$url_path/$start_date_PATH$ALLfile' where recording_id='$recording_id';";
|
||||
if($debug){print STDERR "\n|$update_log_db_stmt|\n";}
|
||||
my $affected_rows = $update_log_sth->execute('$url_path/$start_date_PATH$ALLfile',$recording_id)
|
||||
or die "executing: $rec_log_db_stmt ", $dbhA->errstr;
|
||||
|
||||
if (!$test) {
|
||||
`mv -f "$directory/$ALLfile" "$PATHDONEmonitor/FTP/$ALLfile"`;
|
||||
}
|
||||
|
||||
if($debugX){
|
||||
print STDERR "Transfered $transfered_files files\n";
|
||||
}
|
||||
|
||||
if ( $transfered_files == $trans_limit) {
|
||||
if($debugX) {
|
||||
print STDERR "Transfer limit of $trans_limit reached breaking out of the loop\n";
|
||||
}
|
||||
last();
|
||||
}
|
||||
} else {
|
||||
if($debug){
|
||||
print "ERROR: Could not ping server $ftp_host\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
### END Remote file transfer
|
||||
|
||||
### sleep for twenty hundredths of a second to not flood the server with disk activity
|
||||
usleep(200*1000);
|
||||
}
|
||||
}
|
||||
$file_loop_count++;
|
||||
}
|
||||
|
||||
if ($debug) {print "DONE... EXITING\n\n";}
|
||||
|
||||
$dbhA->disconnect();
|
||||
|
||||
|
||||
exit;
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user