Added options to AST_cleanup_agent_log script

git-svn-id: svn://192.168.202.10@1390 3d104415-ff17-0410-8863-d5cf3c621b8a
This commit is contained in:
mattf
2010-03-31 07:24:05 +00:00
parent 8a7ff2bfdc
commit 4e6a017c6c
4 changed files with 423 additions and 26 deletions
@@ -25,6 +25,7 @@
# 91214-0933 - Added queue_position to queue_log COMPLETE... and ABANDON records
# 100203-1110 - Added fix for vicidial_closer_log records with 0 length
# 100327-0926 - Added validation of four agent "sec" fields
# 100331-0310 - Added one-day-ago and only-fix-old-lagged options, fixed validation process
#
# constants
@@ -49,10 +50,12 @@ if (length($ARGV[0])>1)
print " [-last-24hours] = will clean up logs for the last 24 hours only\n";
print " [-more-than-24hours] = will clean up logs older than 24 hours only\n";
print " [-last-30days] = will clean up logs for the last 30 days only\n";
print " [-one-day-ago] = will clean up logs for the last 24-48 hours ago only\n";
print " [-skip-queue-log-inserts] = will skip only the queue_log missing record checks\n";
print " [-skip-agent-log-validation] = will skip only the vicidial_agent_log validation\n";
print " [-only-check-agent-login-lags] = will only fix queue_log missing PAUSEREASON records\n";
print " [-only-qm-live-call-check] = will only check the queue_log calls that report as live, in ViciDial\n";
print " [-only-fix-old-lagged] = will go through old lagged entries and add a new entry after\n";
print " [-q] = quiet, no output\n";
print " [-test] = test\n";
print " [-debug] = verbose debug messages\n";
@@ -83,6 +86,7 @@ if (length($ARGV[0])>1)
}
if ($args =~ /-no-time-restriction/i)
{
$VAL_validate=1;
$ALL_TIME=1;
if ($Q < 1) {print "\n----- NO TIME RESTRICTIONS -----\n\n";}
}
@@ -98,16 +102,25 @@ if (length($ARGV[0])>1)
}
if ($args =~ /-last-24hours/i)
{
$VAL_validate=1;
$TWENTYFOUR_HOURS=1;
if ($Q < 1) {print "\n----- LAST 24 HOURS ONLY -----\n\n";}
}
if ($args =~ /-one-day-ago/i)
{
$VAL_validate=1;
$ONEDAYAGO=1;
if ($Q < 1) {print "\n----- ONE DAY AGO ONLY -----\n\n";}
}
if ($args =~ /-last-30days/i)
{
$VAL_validate=1;
$THIRTY_DAYS=1;
if ($Q < 1) {print "\n----- LAST 30 DAYS ONLY -----\n\n";}
}
if ($args =~ /-more-than-24hours/i)
{
$VAL_validate=1;
$TWENTYFOUR_OLDER=1;
if ($Q < 1) {print "\n----- MORE THAN 24 HOURS OLD ONLY -----\n\n";}
}
@@ -121,6 +134,11 @@ if (length($ARGV[0])>1)
$skip_agent_log_validation=1;
if ($Q < 1) {print "\n----- SKIPPING VICIDIAL_AGENT_LOG VALIDATION -----\n\n";}
}
if ($args =~ /-only-fix-old-lagged/i)
{
$fix_old_lagged_entries=1;
if ($Q < 1) {print "\n----- FIX OLD LAGGED ENTRIES ONLY -----\n\n";}
}
}
}
else
@@ -193,6 +211,35 @@ if ($TWENTYFOUR_HOURS > 0)
$QM_SQL_time = "and time_id > $TDtarget and time_id < $FDtarget";
$QM_SQL_time_H = "and time_id > $TDtarget and time_id < $HDtarget";
}
if ($ONEDAYAGO > 0)
{
$TDtarget = ($secX - 86400); # 24 hours in the past
($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";
$KDtarget = ($secX - 172800); # 48 hours in the past
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($KDtarget);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$KDSQLdate = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$VDAD_SQL_time = "and event_time > \"$KDSQLdate\" and event_time < \"$TDSQLdate\"";
$VDCL_SQL_time = "and call_date > \"$KDSQLdate\" and call_date < \"$TDSQLdate\"";
$QM_SQL_time = "and time_id > $KDtarget and time_id < $TDtarget";
$QM_SQL_time_H = "and time_id > $KDtarget and time_id < $TDtarget";
}
if ($TWENTYFOUR_OLDER > 0)
{
$TDtarget = ($secX - 86400); # 24 hours in the past
@@ -302,6 +349,97 @@ $sthA->finish();
###########################################
##### BEGIN fix_old_lagged_entries process (not recurring process, only run once) #####
if ($fix_old_lagged_entries > 0)
{
if ($DBX) {print "\n\n";}
if ($DB) {print " - starting validation of vicidial_agent_log sec fields\n";}
$total_corrected_records=0;
$total_scanned_records=0;
$total_pause=0;
$total_wait=0;
$total_talk=0;
$total_dispo=0;
$total_dead=0;
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT user,agent_log_id,pause_epoch,wait_epoch,talk_epoch,dispo_epoch,UNIX_TIMESTAMP(event_time),server_ip,campaign_id,user_group from vicidial_agent_log where sub_status='LAGGED' $VDAD_SQL_time;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArowsU=$sthA->rows;
$i=0;
while ($sthArowsU > $i)
{
@aryA = $sthA->fetchrow_array;
$Vuser[$i] = $aryA[0];
$Vagent_log_id[$i] = $aryA[1];
$Vpause_epoch[$i] = $aryA[2];
$Vwait_epoch[$i] = $aryA[3];
$Vtalk_epoch[$i] = $aryA[4];
$Vdispo_epoch[$i] = $aryA[5];
$Vevent_epoch[$i] = $aryA[6];
$Vserver_ip[$i] = $aryA[7];
$Vcampaign_id[$i] = $aryA[8];
$Vuser_group[$i] = $aryA[9];
if ($Vpause_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vpause_epoch[$i];}
if ($Vwait_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vwait_epoch[$i];}
if ($Vtalk_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vtalk_epoch[$i];}
if ($Vdispo_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vdispo_epoch[$i];}
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($Vlast_epoch[$i]);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$Vlast_date[$i] = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$i++;
}
$sthA->finish();
$i=0;
while ($sthArowsU > $i)
{
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT count(*) from vicidial_agent_log where user='$Vuser[$i]' and pause_epoch='$Vlast_epoch[$i]' $VDAD_SQL_time;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
if ($aryA[0] < 1)
{
##### insert vicidial_agent_log record
$stmtAX = "INSERT INTO vicidial_agent_log SET user='$Vuser[$i]',event_time='$Vlast_date[$i]',pause_epoch='$Vlast_epoch[$i]',wait_epoch='$Vlast_epoch[$i]',pause_sec='0',user_group='$Vuser_group[$i]',campaign_id='$Vcampaign_id[$i]',server_ip='$Vserver_ip[$i]',sub_status='LOGOUT';";
if ($TEST < 1)
{$VALaffected_rows = $dbhA->do($stmtAX);}
if ($DB) {print " VAL record inserted: $VALaffected_rows|$stmtAX|\n";}
$val_fixed++;
}
else
{
if ($DB) {print " VAL record exists: $aryA[0]|$stmtA|\n";}
$val_good++;
}
$i++;
}
if ($DB) {print " - finished lagged fixing:\n";}
if ($DB) {print " records scanned: $i\n";}
if ($DB) {print " records fixed: $val_fixed\n";}
if ($DB) {print " records good: $val_good\n";}
if ($DB) {print "process completed, exiting...\n";}
exit;
}
##### END fix_old_lagged_entries process #####
### BEGIN CHECKING ENTERQUEUE/CALLOUTBOUND ENTRIES FOR LIVE CALLS
@@ -794,7 +932,7 @@ if ($DB) {print STDERR " Bad Closer times recalculated: $affected_rows\n\n";
##### BEGIN vicidial_agent_log sec validation #####
if ($skip_agent_log_validation < 1)
if ( ($skip_agent_log_validation < 1) && ($VAL_validate > 0) )
{
if ($DBX) {print "\n\n";}
if ($DB) {print " - starting validation of vicidial_agent_log sec fields\n";}
@@ -805,9 +943,10 @@ if ($skip_agent_log_validation < 1)
$total_talk=0;
$total_dispo=0;
$total_dead=0;
$epoch_changes=0;
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT distinct user from vicidial_agent_log where user != '' $VDAD_SQL_time;";
$stmtA = "SELECT distinct user from vicidial_agent_log where user != '' $VDAD_SQL_time order by user;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@@ -826,7 +965,7 @@ if ($skip_agent_log_validation < 1)
while ($sthArowsU > $i)
{
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT agent_log_id,pause_epoch,pause_sec,wait_epoch,wait_sec,talk_epoch,talk_sec,dispo_epoch,dispo_sec,dead_epoch,dead_sec,event_time from vicidial_agent_log where user='$Vuser[$i]' $VDAD_SQL_time;";
$stmtA = "SELECT agent_log_id,pause_epoch,pause_sec,wait_epoch,wait_sec,talk_epoch,talk_sec,dispo_epoch,dispo_sec,dead_epoch,dead_sec,event_time from vicidial_agent_log where user='$Vuser[$i]' $VDAD_SQL_time order by event_time, agent_log_id;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@@ -870,6 +1009,9 @@ if ($skip_agent_log_validation < 1)
$r=0;
while ($sthArowsR > $r)
{
$corrections=0;
$corrections_LOG='';
$corrections_SQL='';
$NVpause_sec=0;
$NVwait_sec=0;
$NVtalk_sec=0;
@@ -880,9 +1022,47 @@ if ($skip_agent_log_validation < 1)
{$next_begin_epoch = $Vpause_epoch[$next_r];}
else
{$next_begin_epoch = 0;}
$Vpause_date="1970-01-01 00:00:00";
if ($Vpause_epoch[$next_r] > 1000)
{
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($Vpause_epoch[$next_r]);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$Vpause_date = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$Vpause_dayB = "$Kyear-$Kmon-$Kmday 00:00:00";
}
### find if next record is a LOGIN
$LOGOUT_update=0;
$stmtA = "SELECT count(*) from vicidial_user_log where user='$Vuser[$i]' and event_date='$Vpause_date' and event='LOGIN';";
# if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
if ($aryA[0] > 0)
{
$stmtA = "SELECT UNIX_TIMESTAMP(event_date),event_date from vicidial_user_log where user='$Vuser[$i]' and event_date < '$Vpause_date' and event_date > \"$Vpause_dayB\" and event='LOGOUT' order by event_date desc limit 1;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
$next_begin_epoch = $aryA[0];
$LOGOUT_update++;
# if ($DBX) {print "$next_begin_epoch|$aryA[1]|$LOGOUT_update|$stmtA\n";}
}
if ( ($Vwait_epoch[$r] < 1000) || ( ($Vwait_epoch[$r] <= $Vpause_epoch[$r]) && ($Vtalk_epoch[$r] < 1000) && ($Vpause_sec[$r] > 0) ) )
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "WAITEPOCH:$next_begin_epoch!$Vwait_epoch[$r]|";
$corrections_SQL .= "wait_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vwait_epoch[$r] = $next_begin_epoch;
$NVpause_sec = ($Vwait_epoch[$r] - $Vpause_epoch[$r]);
}
@@ -891,6 +1071,12 @@ if ($skip_agent_log_validation < 1)
$NVpause_sec = ($Vwait_epoch[$r] - $Vpause_epoch[$r]);
if ($Vtalk_epoch[$r] < 1000)
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "TALKEPOCH:$next_begin_epoch!$Vtalk_epoch[$r]|";
$corrections_SQL .= "talk_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vtalk_epoch[$r] = $next_begin_epoch;
$NVwait_sec = ($Vtalk_epoch[$r] - $Vwait_epoch[$r]);
}
@@ -899,6 +1085,12 @@ if ($skip_agent_log_validation < 1)
$NVwait_sec = ($Vtalk_epoch[$r] - $Vwait_epoch[$r]);
if ($Vdispo_epoch[$r] < 1000)
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "DISPOEPOCH:$next_begin_epoch!$Vdispo_epoch[$r]|";
$corrections_SQL .= "dispo_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vdispo_epoch[$r] = $next_begin_epoch;
$NVtalk_sec = ($Vdispo_epoch[$r] - $Vtalk_epoch[$r]);
}
@@ -922,9 +1114,6 @@ if ($skip_agent_log_validation < 1)
if ( ($NVtalk_sec > 43999) || ($NVtalk_sec < 0) ) {$NVtalk_sec = 0;}
if ( ($NVdispo_sec > 43999) || ($NVdispo_sec < 0) ) {$NVdispo_sec = 0;}
$corrections=0;
$corrections_LOG='';
$corrections_SQL='';
if ( ($NVpause_sec > $Vpause_sec[$r]) || ($NVpause_sec < $Vpause_sec[$r]) )
{
$corrections++;
@@ -983,10 +1172,11 @@ if ($skip_agent_log_validation < 1)
if ($DB) {print " - finished validation of vicidial_agent_log sec fields:\n";}
if ($DB) {print " records scanned/corrected: $total_scanned_records / $total_corrected_records\n";}
if ($DB) {print " PAUSE updates: $total_pause\n";}
if ($DB) {print " WAIT updates: $total_wait\n";}
if ($DB) {print " TALK updates: $total_talk\n";}
if ($DB) {print " WAIT updates: $total_wait\n";}
if ($DB) {print " TALK updates: $total_talk\n";}
if ($DB) {print " DISPO updates: $total_dispo\n";}
if ($DB) {print " DEAD updates: $total_dead\n";}
if ($DB) {print " DEAD updates: $total_dead\n";}
if ($DB) {print " EPOCH updates: $epoch_changes\n";}
if ($DB) {print " distinct users: $i\n";}
}
##### END vicidial_agent_log sec validation #####
+200 -10
View File
@@ -26,6 +26,7 @@
# 100203-1110 - Added fix for vicidial_closer_log records with 0 length
# 100309-0555 - Added queuemetrics_loginout option
# 100327-0926 - Added validation of four agent "sec" fields
# 100331-0310 - Added one-day-ago and only-fix-old-lagged options, fixed validation process
#
# constants
@@ -50,10 +51,12 @@ if (length($ARGV[0])>1)
print " [-last-24hours] = will clean up logs for the last 24 hours only\n";
print " [-more-than-24hours] = will clean up logs older than 24 hours only\n";
print " [-last-30days] = will clean up logs for the last 30 days only\n";
print " [-one-day-ago] = will clean up logs for the last 24-48 hours ago only\n";
print " [-skip-queue-log-inserts] = will skip only the queue_log missing record checks\n";
print " [-skip-agent-log-validation] = will skip only the vicidial_agent_log validation\n";
print " [-only-check-agent-login-lags] = will only fix queue_log missing PAUSEREASON records\n";
print " [-only-qm-live-call-check] = will only check the queue_log calls that report as live, in ViciDial\n";
print " [-only-fix-old-lagged] = will go through old lagged entries and add a new entry after\n";
print " [-q] = quiet, no output\n";
print " [-test] = test\n";
print " [-debug] = verbose debug messages\n";
@@ -84,6 +87,7 @@ if (length($ARGV[0])>1)
}
if ($args =~ /-no-time-restriction/i)
{
$VAL_validate=1;
$ALL_TIME=1;
if ($Q < 1) {print "\n----- NO TIME RESTRICTIONS -----\n\n";}
}
@@ -99,16 +103,25 @@ if (length($ARGV[0])>1)
}
if ($args =~ /-last-24hours/i)
{
$VAL_validate=1;
$TWENTYFOUR_HOURS=1;
if ($Q < 1) {print "\n----- LAST 24 HOURS ONLY -----\n\n";}
}
if ($args =~ /-one-day-ago/i)
{
$VAL_validate=1;
$ONEDAYAGO=1;
if ($Q < 1) {print "\n----- ONE DAY AGO ONLY -----\n\n";}
}
if ($args =~ /-last-30days/i)
{
$VAL_validate=1;
$THIRTY_DAYS=1;
if ($Q < 1) {print "\n----- LAST 30 DAYS ONLY -----\n\n";}
}
if ($args =~ /-more-than-24hours/i)
{
$VAL_validate=1;
$TWENTYFOUR_OLDER=1;
if ($Q < 1) {print "\n----- MORE THAN 24 HOURS OLD ONLY -----\n\n";}
}
@@ -122,6 +135,11 @@ if (length($ARGV[0])>1)
$skip_agent_log_validation=1;
if ($Q < 1) {print "\n----- SKIPPING VICIDIAL_AGENT_LOG VALIDATION -----\n\n";}
}
if ($args =~ /-only-fix-old-lagged/i)
{
$fix_old_lagged_entries=1;
if ($Q < 1) {print "\n----- FIX OLD LAGGED ENTRIES ONLY -----\n\n";}
}
}
}
else
@@ -194,6 +212,35 @@ if ($TWENTYFOUR_HOURS > 0)
$QM_SQL_time = "and time_id > $TDtarget and time_id < $FDtarget";
$QM_SQL_time_H = "and time_id > $TDtarget and time_id < $HDtarget";
}
if ($ONEDAYAGO > 0)
{
$TDtarget = ($secX - 86400); # 24 hours in the past
($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";
$KDtarget = ($secX - 172800); # 48 hours in the past
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($KDtarget);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$KDSQLdate = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$VDAD_SQL_time = "and event_time > \"$KDSQLdate\" and event_time < \"$TDSQLdate\"";
$VDCL_SQL_time = "and call_date > \"$KDSQLdate\" and call_date < \"$TDSQLdate\"";
$QM_SQL_time = "and time_id > $KDtarget and time_id < $TDtarget";
$QM_SQL_time_H = "and time_id > $KDtarget and time_id < $TDtarget";
}
if ($TWENTYFOUR_OLDER > 0)
{
$TDtarget = ($secX - 86400); # 24 hours in the past
@@ -304,6 +351,97 @@ $sthA->finish();
###########################################
##### BEGIN fix_old_lagged_entries process (not recurring process, only run once) #####
if ($fix_old_lagged_entries > 0)
{
if ($DBX) {print "\n\n";}
if ($DB) {print " - starting validation of vicidial_agent_log sec fields\n";}
$total_corrected_records=0;
$total_scanned_records=0;
$total_pause=0;
$total_wait=0;
$total_talk=0;
$total_dispo=0;
$total_dead=0;
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT user,agent_log_id,pause_epoch,wait_epoch,talk_epoch,dispo_epoch,UNIX_TIMESTAMP(event_time),server_ip,campaign_id,user_group from vicidial_agent_log where sub_status='LAGGED' $VDAD_SQL_time;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArowsU=$sthA->rows;
$i=0;
while ($sthArowsU > $i)
{
@aryA = $sthA->fetchrow_array;
$Vuser[$i] = $aryA[0];
$Vagent_log_id[$i] = $aryA[1];
$Vpause_epoch[$i] = $aryA[2];
$Vwait_epoch[$i] = $aryA[3];
$Vtalk_epoch[$i] = $aryA[4];
$Vdispo_epoch[$i] = $aryA[5];
$Vevent_epoch[$i] = $aryA[6];
$Vserver_ip[$i] = $aryA[7];
$Vcampaign_id[$i] = $aryA[8];
$Vuser_group[$i] = $aryA[9];
if ($Vpause_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vpause_epoch[$i];}
if ($Vwait_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vwait_epoch[$i];}
if ($Vtalk_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vtalk_epoch[$i];}
if ($Vdispo_epoch[$i] > 1000) {$Vlast_epoch[$i] = $Vdispo_epoch[$i];}
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($Vlast_epoch[$i]);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$Vlast_date[$i] = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$i++;
}
$sthA->finish();
$i=0;
while ($sthArowsU > $i)
{
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT count(*) from vicidial_agent_log where user='$Vuser[$i]' and pause_epoch='$Vlast_epoch[$i]' $VDAD_SQL_time;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
if ($aryA[0] < 1)
{
##### insert vicidial_agent_log record
$stmtAX = "INSERT INTO vicidial_agent_log SET user='$Vuser[$i]',event_time='$Vlast_date[$i]',pause_epoch='$Vlast_epoch[$i]',wait_epoch='$Vlast_epoch[$i]',pause_sec='0',user_group='$Vuser_group[$i]',campaign_id='$Vcampaign_id[$i]',server_ip='$Vserver_ip[$i]',sub_status='LOGOUT';";
if ($TEST < 1)
{$VALaffected_rows = $dbhA->do($stmtAX);}
if ($DB) {print " VAL record inserted: $VALaffected_rows|$stmtAX|\n";}
$val_fixed++;
}
else
{
if ($DB) {print " VAL record exists: $aryA[0]|$stmtA|\n";}
$val_good++;
}
$i++;
}
if ($DB) {print " - finished lagged fixing:\n";}
if ($DB) {print " records scanned: $i\n";}
if ($DB) {print " records fixed: $val_fixed\n";}
if ($DB) {print " records good: $val_good\n";}
if ($DB) {print "process completed, exiting...\n";}
exit;
}
##### END fix_old_lagged_entries process #####
### BEGIN CHECKING ENTERQUEUE/CALLOUTBOUND ENTRIES FOR LIVE CALLS
@@ -796,7 +934,7 @@ if ($DB) {print STDERR " Bad Closer times recalculated: $affected_rows\n\n";
##### BEGIN vicidial_agent_log sec validation #####
if ($skip_agent_log_validation < 1)
if ( ($skip_agent_log_validation < 1) && ($VAL_validate > 0) )
{
if ($DBX) {print "\n\n";}
if ($DB) {print " - starting validation of vicidial_agent_log sec fields\n";}
@@ -807,9 +945,10 @@ if ($skip_agent_log_validation < 1)
$total_talk=0;
$total_dispo=0;
$total_dead=0;
$epoch_changes=0;
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT distinct user from vicidial_agent_log where user != '' $VDAD_SQL_time;";
$stmtA = "SELECT distinct user from vicidial_agent_log where user != '' $VDAD_SQL_time order by user;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@@ -828,7 +967,7 @@ if ($skip_agent_log_validation < 1)
while ($sthArowsU > $i)
{
### Gather distinct users in vicidial_agent_log during time period
$stmtA = "SELECT agent_log_id,pause_epoch,pause_sec,wait_epoch,wait_sec,talk_epoch,talk_sec,dispo_epoch,dispo_sec,dead_epoch,dead_sec,event_time from vicidial_agent_log where user='$Vuser[$i]' $VDAD_SQL_time;";
$stmtA = "SELECT agent_log_id,pause_epoch,pause_sec,wait_epoch,wait_sec,talk_epoch,talk_sec,dispo_epoch,dispo_sec,dead_epoch,dead_sec,event_time from vicidial_agent_log where user='$Vuser[$i]' $VDAD_SQL_time order by event_time, agent_log_id;";
if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@@ -872,6 +1011,9 @@ if ($skip_agent_log_validation < 1)
$r=0;
while ($sthArowsR > $r)
{
$corrections=0;
$corrections_LOG='';
$corrections_SQL='';
$NVpause_sec=0;
$NVwait_sec=0;
$NVtalk_sec=0;
@@ -882,9 +1024,47 @@ if ($skip_agent_log_validation < 1)
{$next_begin_epoch = $Vpause_epoch[$next_r];}
else
{$next_begin_epoch = 0;}
$Vpause_date="1970-01-01 00:00:00";
if ($Vpause_epoch[$next_r] > 1000)
{
($Ksec,$Kmin,$Khour,$Kmday,$Kmon,$Kyear,$Kwday,$Kyday,$Kisdst) = localtime($Vpause_epoch[$next_r]);
$Kyear = ($Kyear + 1900);
$Kmon++;
if ($Kmon < 10) {$Kmon = "0$Kmon";}
if ($Kmday < 10) {$Kmday = "0$Kmday";}
if ($Khour < 10) {$Khour = "0$Khour";}
if ($Kmin < 10) {$Kmin = "0$Kmin";}
if ($Ksec < 10) {$Ksec = "0$Ksec";}
$Vpause_date = "$Kyear-$Kmon-$Kmday $Khour:$Kmin:$Ksec";
$Vpause_dayB = "$Kyear-$Kmon-$Kmday 00:00:00";
}
### find if next record is a LOGIN
$LOGOUT_update=0;
$stmtA = "SELECT count(*) from vicidial_user_log where user='$Vuser[$i]' and event_date='$Vpause_date' and event='LOGIN';";
# if ($DBX) {print "$stmtA\n";}
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
if ($aryA[0] > 0)
{
$stmtA = "SELECT UNIX_TIMESTAMP(event_date),event_date from vicidial_user_log where user='$Vuser[$i]' and event_date < '$Vpause_date' and event_date > \"$Vpause_dayB\" and event='LOGOUT' order by event_date desc limit 1;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
@aryA = $sthA->fetchrow_array;
$next_begin_epoch = $aryA[0];
$LOGOUT_update++;
# if ($DBX) {print "$next_begin_epoch|$aryA[1]|$LOGOUT_update|$stmtA\n";}
}
if ( ($Vwait_epoch[$r] < 1000) || ( ($Vwait_epoch[$r] <= $Vpause_epoch[$r]) && ($Vtalk_epoch[$r] < 1000) && ($Vpause_sec[$r] > 0) ) )
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "WAITEPOCH:$next_begin_epoch!$Vwait_epoch[$r]|";
$corrections_SQL .= "wait_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vwait_epoch[$r] = $next_begin_epoch;
$NVpause_sec = ($Vwait_epoch[$r] - $Vpause_epoch[$r]);
}
@@ -893,6 +1073,12 @@ if ($skip_agent_log_validation < 1)
$NVpause_sec = ($Vwait_epoch[$r] - $Vpause_epoch[$r]);
if ($Vtalk_epoch[$r] < 1000)
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "TALKEPOCH:$next_begin_epoch!$Vtalk_epoch[$r]|";
$corrections_SQL .= "talk_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vtalk_epoch[$r] = $next_begin_epoch;
$NVwait_sec = ($Vtalk_epoch[$r] - $Vwait_epoch[$r]);
}
@@ -901,6 +1087,12 @@ if ($skip_agent_log_validation < 1)
$NVwait_sec = ($Vtalk_epoch[$r] - $Vwait_epoch[$r]);
if ($Vdispo_epoch[$r] < 1000)
{
if ($LOGOUT_update > 0)
{
$corrections_LOG .= "DISPOEPOCH:$next_begin_epoch!$Vdispo_epoch[$r]|";
$corrections_SQL .= "dispo_epoch='$next_begin_epoch',";
$epoch_changes++;
}
$Vdispo_epoch[$r] = $next_begin_epoch;
$NVtalk_sec = ($Vdispo_epoch[$r] - $Vtalk_epoch[$r]);
}
@@ -924,9 +1116,6 @@ if ($skip_agent_log_validation < 1)
if ( ($NVtalk_sec > 43999) || ($NVtalk_sec < 0) ) {$NVtalk_sec = 0;}
if ( ($NVdispo_sec > 43999) || ($NVdispo_sec < 0) ) {$NVdispo_sec = 0;}
$corrections=0;
$corrections_LOG='';
$corrections_SQL='';
if ( ($NVpause_sec > $Vpause_sec[$r]) || ($NVpause_sec < $Vpause_sec[$r]) )
{
$corrections++;
@@ -985,10 +1174,11 @@ if ($skip_agent_log_validation < 1)
if ($DB) {print " - finished validation of vicidial_agent_log sec fields:\n";}
if ($DB) {print " records scanned/corrected: $total_scanned_records / $total_corrected_records\n";}
if ($DB) {print " PAUSE updates: $total_pause\n";}
if ($DB) {print " WAIT updates: $total_wait\n";}
if ($DB) {print " TALK updates: $total_talk\n";}
if ($DB) {print " WAIT updates: $total_wait\n";}
if ($DB) {print " TALK updates: $total_talk\n";}
if ($DB) {print " DISPO updates: $total_dispo\n";}
if ($DB) {print " DEAD updates: $total_dead\n";}
if ($DB) {print " DEAD updates: $total_dead\n";}
if ($DB) {print " EPOCH updates: $epoch_changes\n";}
if ($DB) {print " distinct users: $i\n";}
}
##### END vicidial_agent_log sec validation #####
+20 -4
View File
@@ -2680,13 +2680,13 @@ if ($stage == "end")
$four_hours_ago = date("Y-m-d H:i:s", mktime(date("H")-4,date("i"),date("s"),date("m"),date("d"),date("Y")));
##### look for the start epoch in the vicidial_closer_log table
$stmt="SELECT start_epoch,term_reason,closecallid,campaign_id FROM vicidial_closer_log where phone_number='$phone_number' and lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by closecallid desc limit 1;";
$stmt="SELECT start_epoch,term_reason,closecallid,campaign_id,status FROM vicidial_closer_log where phone_number='$phone_number' and lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by closecallid desc limit 1;";
$VDIDselect = "VDCL_LID $lead_id $phone_number $user $four_hours_ago";
}
else
{
##### look for the start epoch in the vicidial_log table
$stmt="SELECT start_epoch,term_reason,uniqueid,campaign_id FROM vicidial_log where uniqueid='$uniqueid' and lead_id='$lead_id' order by call_date desc limit 1;";
$stmt="SELECT start_epoch,term_reason,uniqueid,campaign_id,status FROM vicidial_log where uniqueid='$uniqueid' and lead_id='$lead_id' order by call_date desc limit 1;";
$VDIDselect = "VDL_UIDLID $uniqueid $lead_id";
}
$rslt=mysql_query($stmt, $link);
@@ -2700,6 +2700,7 @@ if ($stage == "end")
$VDterm_reason = $row[1];
$VDvicidial_id = $row[2];
$VDcampaign_id = $row[3];
$VDstatus = $row[4];
$length_in_sec = ($StarTtime - $start_epoch);
}
else
@@ -2741,7 +2742,9 @@ if ($stage == "end")
if ($VLA_inOUT == 'INBOUND')
{
$stmt = "UPDATE vicidial_closer_log set end_epoch='$StarTtime', length_in_sec='$length_in_sec', status='$status_dispo' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;";
$vcl_statusSQL='';
if ($VDstatus == 'INCALL') {$vcl_statusSQL = ",status='$status_dispo'";}
$stmt = "UPDATE vicidial_closer_log set end_epoch='$StarTtime', length_in_sec='$length_in_sec' $vcl_statusSQL where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00062',$user,$server_ip,$session_name,$one_mysql_log);}
@@ -2749,6 +2752,10 @@ if ($stage == "end")
if ($affected_rows > 0)
{
echo "$uniqueid\n$channel\n";
# $fp = fopen ("./vicidial_debug.txt", "a");
# fwrite ($fp, "$NOW_TIME|INBND_LOG_4|$VDstatus|$uniqueid|$lead_id|$user|$inOUT|$length_in_sec|$VDterm_reason|$VDvicidial_id|$start_epoch|$stmt|\n");
# fclose($fp);
}
else
{
@@ -3367,7 +3374,7 @@ if ($stage == "end")
if (strlen($SQLterm) > 0)
{
##### update the duration and end time in the vicidial_log table
$stmt="UPDATE vicidial_closer_log set $SQLterm, status='$status_dispo' where lead_id='$lead_id' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;";
$stmt="UPDATE vicidial_closer_log set $SQLterm where lead_id='$lead_id' and call_date > \"$four_hours_ago\" order by call_date desc limit 1;";
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00092',$user,$server_ip,$session_name,$one_mysql_log);}
@@ -4834,6 +4841,10 @@ if ($ACTION == 'updateDISPO')
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00142',$user,$server_ip,$session_name,$one_mysql_log);}
# $fp = fopen ("./vicidial_debug.txt", "a");
# fwrite ($fp, "$NOW_TIME|DISPO_CALL |$MDnextCID|$stage|$campaign|$lead_id|$dispo_choice|$user|$uniqueid|$auto_dial_level|$agent_log_id|\n");
# fclose($fp);
$stmt = "SELECT count(*) from vicidial_inbound_groups where group_id='$stage';";
if ($format=='debug') {echo "\n<!-- $stmt -->";}
$rslt=mysql_query($stmt, $link);
@@ -4845,6 +4856,11 @@ if ($ACTION == 'updateDISPO')
if ($DB) {echo "$stmt\n";}
$rslt=mysql_query($stmt, $link);
if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00144',$user,$server_ip,$session_name,$one_mysql_log);}
$VCLaffected_rows = mysql_affected_rows($link);
# $fp = fopen ("./vicidial_debug.txt", "a");
# fwrite ($fp, "$NOW_TIME|DISPO_CALL2|$VCLaffected_rows|$stmt|\n");
# fclose($fp);
$stmt = "UPDATE vicidial_live_inbound_agents set last_call_finish=NOW() where group_id='$stage' and user='$user' limit 1;";
if ($DB) {echo "$stmt\n";}
+3 -2
View File
@@ -3547,7 +3547,7 @@ if ($enable_fast_refresh < 1) {echo "\tvar refresh_interval = 1000;\n";}
dialedcall_send_hangup();
}
if ( (APIStatuS.length < 10) && (APIStatuS.length > 0) && (AgentDispoing > 0) )
if ( (APIStatuS.length < 10) && (APIStatuS.length > 0) && (AgentDispoing > 1) )
{
document.vicidial_form.DispoSelection.value = APIStatuS;
DispoSelect_submit();
@@ -10249,10 +10249,11 @@ else
}
}
}
if (AgentDispoing==1)
if (AgentDispoing > 0)
{
WaitingForNextStep=1;
check_for_conf_calls(session_id, '0');
AgentDispoing++;
}
if (logout_stop_timeouts==1) {WaitingForNextStep=1;}
if ( (custchannellive < -30) && (lastcustchannel.length > 3) && (no_empty_session_warnings < 1) ) {CustomerChanneLGone();}