diff --git a/agc_2-X/trunk/bin/AST_CRON_purge_recordings.pl b/agc_2-X/trunk/bin/AST_CRON_purge_recordings.pl new file mode 100644 index 00000000..f98ae8d5 --- /dev/null +++ b/agc_2-X/trunk/bin/AST_CRON_purge_recordings.pl @@ -0,0 +1,193 @@ +#!/usr/bin/perl +# +# AST_CRON_purge_recordings.pl +# +# IMPORTANT!!! used to delete recordings!!! +# +# runs every day, goes through recordings older than a certain number of days +# and deletes those recordings that are not of a certain status +# default is 30 days old to remove non-sales +# +# put an entry into the cron of of your asterisk machine 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 LICENSE: GPLv2 +# +# +# 70917-1339 - first build +# + +$save_statuses = '|SALE|UPSALE|UPSELL|XFER|DNC|DROP|A1|A2|A3|A4|A5|A6|A7|A8|A9|'; +$suffix = '-all.wav'; +$local_DIR = '/home2/cron/RECORDINGS'; +$use_date_DIRs = 1; + +# Customize variables for FTP +$FTP_host = '10.0.0.4'; +$FTP_user = 'cron'; +$FTP_pass = 'test'; +$FTP_dir = 'RECORDINGS'; +$HTTP_path = 'http://10.0.0.4'; + + +$secX = time(); + +$TDtarget = ($secX - 2592000); # thirty days +($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";} + $TDSQLdate = "$Tyear-$Tmon-$Tmday $Thour:$Tmin:$Tsec"; + +$FDtarget = ($secX - 3456000); # forty-five days +($Fsec,$Fmin,$Fhour,$Fmday,$Fmon,$Fyear,$Fwday,$Fyday,$Fisdst) = localtime($FDtarget); +$Fyear = ($Fyear + 1900); +$Fmon++; +if ($Fmon < 10) {$Fmon = "0$Fmon";} +if ($Fmday < 10) {$Fmday = "0$Fmday";} +if ($Fhour < 10) {$Fhour = "0$Fhour";} +if ($Fmin < 10) {$Fmin = "0$Fmin";} +if ($Fsec < 10) {$Fsec = "0$Fsec";} + $FDSQLdate = "$Fyear-$Fmon-$Fmday $Fhour:$Fmin:$Fsec"; + + +# 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 +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 lead_id,recording_id,start_time,filename,location FROM recording_log where start_time < '$TDSQLdate' and start_time > '$FDSQLdate' and location IS NOT NULL and location NOT IN('','NOT_FOUND','NOT_FOUND_2','DELETED') LIMIT 5000;"; + 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]"; + $i++; + } +$sthA->finish(); + +##### Go through list of leads and find all of their statuses ##### +$i=0; +foreach(@lead_ids) + { + ### Grab status of the lead in the vicidial_list table + $stmtA = "SELECT status FROM vicidial_list where lead_id='$lead_ids[$i]';"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + $h=0; + while ($sthArows > $h) + { + @aryA = $sthA->fetchrow_array; + $statuses[$i] = "$aryA[0]"; + $h++; + } + $sthA->finish(); + + $i++; + } + + +##### Go through list of leads and delete all recordings with no-save statuses ##### +$i=0; +$KEEP=0; +$DELETE=0; +foreach(@lead_ids) + { + if ($save_statuses !~ /\|$statuses[$i]\|/) + { + if ($use_date_DIRs) + { + $date_DIR = $start_times[$i]; + $date_DIR =~ s/ .*//gi; + $date_DIR .= "/"; + } + else {$date_DIR=''} + `rm -f $local_DIR/$date_DIR$filenames[$i]$suffix`; + print "rm -f $local_DIR/$date_DIR$filenames[$i]$suffix |$statuses[$i]|$lead_ids[$i]|\n"; + + $stmtA = "UPDATE recording_log set location='DELETED' where recording_id='$recording_ids[$i]';"; + $affected_rows = $dbhA->do($stmtA); # or die "Couldn't execute query:|$stmtA|\n"; + $DELETE++; + } + else + { + print "KEEP- $filenames[$i]$suffix |$statuses[$i]|$lead_ids[$i]|\n"; + $KEEP++; + } + $i++; + } + +print "KEEP: $KEEP\n"; +print "DELETED: $DELETE\n"; +print "--------------------\n"; +print "TOTAL: $i\n"; + +if ($v) {print "DONE... EXITING\n\n";} + +$dbhA->disconnect(); + + +exit; diff --git a/agc_2-X/trunk/docs/BASE_INSTALL.txt b/agc_2-X/trunk/docs/BASE_INSTALL.txt index 80e007b9..db4e8435 100644 --- a/agc_2-X/trunk/docs/BASE_INSTALL.txt +++ b/agc_2-X/trunk/docs/BASE_INSTALL.txt @@ -620,6 +620,15 @@ AST_CRON_mix_recordings_BASIC.pl file in it's place) ### VICIDIAL agent time log weekly summary report generation 2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl +### remove old recordings more than 7 days old +/usr/bin/find /var/spool/asterisk/monitor -maxdepth 2 -type f -mtime +7 -print | xargs rm -f + +### remove old vicidial logs and asterisk logs more than 2 days old +/usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f +/usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f + + + - once your system starts up you can attach to the screen running asterisk by typing "screen -r " find which screen by typing "screen -r" and looking for the lowest screen number. Then to detach again from the screen diff --git a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt index 07a29695..f11fe44d 100644 --- a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt +++ b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt @@ -396,3 +396,21 @@ make make install + + + + + +#### pureftpd + +cd /usr/local +wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.20.tar.gz +gunzip pure-ftpd-1.0.20.tar.gz +tar xvf pure-ftpd-1.0.20.tar +cd pure-ftpd-1.0.20 +groupadd ftpgroup +useradd -g ftpgroup -d /dev/null -s /etc ftpuser +./configure --with-everything --with-largefile --with-virtualchroot +make install-strip +pure-pw useradd cron -u ftpuser -d /home/cron +/usr/local/sbin/pure-ftpd & diff --git a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt index bdf0ab27..8802e00b 100644 --- a/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt +++ b/agc_2-X/trunk/docs/SCRATCH_INSTALL.txt @@ -2837,6 +2837,16 @@ AST_CRON_mix_recordings_BASIC.pl file in it's place) ### VICIDIAL agent time log weekly summary report generation 2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl +### remove old recordings more than 7 days old +/usr/bin/find /var/spool/asterisk/monitor -maxdepth 2 -type f -mtime +7 -print | xargs rm -f + +### remove old vicidial logs and asterisk logs more than 2 days old +/usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f +/usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f + + + + - once your system starts up you can attach to the screen running asterisk by typing "screen -r " find which screen by typing "screen -r" and looking for the lowest screen number. Then to detach again from the screen