added GSM_sALe recording compression script for archive servers

changed IVR regording to use recording_id only as filename

git-svn-id: svn://192.168.202.10@712 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2007-11-13 05:30:46 +00:00
parent cb852a4227
commit 5195575767
2 changed files with 167 additions and 2 deletions
@@ -326,10 +326,11 @@ $affected_rows = $dbhA->do($stmtA);
### if set to record this session, start recording ###
if ($record_call =~ /Y/)
{
$filename = "$inbound_number$US$phone_number$US$ivr_id";
#$filename = "$inbound_number$US$phone_number$US$ivr_id";
$filename = "$ivr_id";
### code to record call goes here ###
$AGI->exec("Monitor wav|/var/spool/asterisk/monitor/$inbound_number$US$phone_number$US$ivr_id|m");
$AGI->exec("Monitor wav|/var/spool/asterisk/monitor/$filename|m");
### insert record into recording_log table ###
$stmtA = "INSERT INTO recording_log (channel,server_ip,extension,start_time,start_epoch,length_in_sec,filename,lead_id,user,location) values('$channel','$server_ip','$inbound_number','$now_date','start_epoch','0','$filename','$lead_id','$user','$ivr_id');";
@@ -0,0 +1,164 @@
#!/usr/bin/perl
#
# AST_CRON_GSM_SALE_recordings.pl
#
# IMPORTANT!!! used to delete recordings!!!
#
# runs every day, goes through all recordings to compress only the SALE recordings
# and place them in a special directory
#
# put an entry into the cron of of your asterisk archive to run this script
# every day or however often you desire
#
# This program assumes that recordings are saved as .wav
# should be easy to change this code if you use .gsm instead
#
# Copyright (C) 2007 Matt Florell <vicidial@gmail.com> LICENSE: GPLv2
#
#
# 1112-1245 - first build
#
$save_statuses = '|SALE|UPSALE|UPSELL|XFER|A1|A2|A3|A4|';
$save_statusesSQL = "'SALE','UPSALE','UPSELL','XFER','A1','A2','A3','A4'";
$suffix = '-all.wav';
$local_DIR = '/home2/cron/RECORDINGS';
$GSM_DIR = '/home/cron/GSM';
$use_date_DIRs = 1;
$secX = time();
$TDtarget = ($secX - 36000); # 10 hours ago
($Tsec,$Tmin,$Thour,$Tmday,$Tmon,$Tyear,$Twday,$Tyday,$Tisdst) = localtime($TDtarget);
$Tyear = ($Tyear + 1900);
$Tmon++;
if ($Tmon < 10) {$Tmon = "0$Tmon";}
if ($Tmday < 10) {$Tmday = "0$Tmday";}
if ($Thour < 10) {$Thour = "0$Thour";}
if ($Tmin < 10) {$Tmin = "0$Tmin";}
if ($Tsec < 10) {$Tsec = "0$Tsec";}
$BEGINdate = "$Tyear-$Tmon-$Tmday 00:00:00";
$ENDdate = "$Tyear-$Tmon-$Tmday 23:59:59";
$BEGINdate = "2007-08-01 00:00:00";
$ENDdate = "2007-08-31 23:59:59";
$soxbin = '';
if ( -e ('/usr/bin/sox')) {$soxbin = '/usr/bin/sox';}
else
{
if ( -e ('/usr/local/bin/sox')) {$soxbin = '/usr/local/bin/sox';}
else
{
print "Can't find sox binary! Exiting...\n";
exit;
}
}
# 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;}
$i++;
}
# Customized Variables
$server_ip = $VARserver_ip; # Asterisk server IP
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;
### directory where in/out recordings are saved to by Asterisk
$dir1 = "$PATHmonitor";
##### Get the lead_ids of all recordings that are not DELETED or NULL #####
$stmtA = "SELECT recording_log.lead_id,recording_id,start_time,filename,location,status FROM recording_log,vicidial_log where start_time > '$BEGINdate' and start_time < '$ENDdate' and location IS NOT NULL and location NOT IN('','NOT_FOUND','NOT_FOUND_2','DELETED') and vicidial_log.status IN($save_statusesSQL) and call_date > '$BEGINdate' and call_date < '$ENDdate' and recording_log.lead_id=vicidial_log.lead_id and recording_log.user=vicidial_log.user order by recording_id LIMIT 500000;";
print "$stmtA\n";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$i=0;
while ($sthArows > $i)
{
@aryA = $sthA->fetchrow_array;
$lead_ids[$i] = "$aryA[0]";
$recording_ids[$i] = "$aryA[1]";
$start_times[$i] = "$aryA[2]";
$filenames[$i] = "$aryA[3]";
$locations[$i] = "$aryA[4]";
$status[$i] = "$aryA[5]";
$i++;
}
$sthA->finish();
##### Go through the list of sales recordings and compress all of them #####
$i=0;
$WAV='-all.wav';
$GSM='-all.gsm';
foreach(@lead_ids)
{
if ($use_date_DIRs)
{
$date_DIR = $start_times[$i];
$date_DIR =~ s/ .*//gi;
$date_DIR .= "/";
}
else {$date_DIR=''}
if ( -e ("$GSM_DIR/$date_DIR")) {$nothing=1;}
else {mkdir("$GSM_DIR/$date_DIR");}
if ( -e ("$GSM_DIR/$date_DIR$filenames[$i]$GSM"))
{print "DUPLICATE: $GSM_DIR/$date_DIR$filenames[$i]$GSM EXISTS\n";}
else
{
`$soxbin "$local_DIR/$date_DIR$filenames[$i]$WAV" "$GSM_DIR/$date_DIR$filenames[$i]$GSM"`;
print "$soxbin \"$local_DIR/$date_DIR$filenames[$i]$WAV\" \"$GSM_DIR/$date_DIR$filenames[$i]$GSM\"\n";
}
$i++;
}
print "TOTAL COMPRESSED: $i\n";
if ($v) {print "DONE... EXITING\n\n";}
$dbhA->disconnect();
exit;