From 4e6a017c6c3da92a812374b5716d90829ebba8ea Mon Sep 17 00:00:00 2001 From: mattf Date: Wed, 31 Mar 2010 07:24:05 +0000 Subject: [PATCH] Added options to AST_cleanup_agent_log script git-svn-id: svn://192.168.202.10@1390 3d104415-ff17-0410-8863-d5cf3c621b8a --- .../agc_2.2.0/bin/AST_cleanup_agent_log.pl | 210 +++++++++++++++++- agc_2-X/trunk/bin/AST_cleanup_agent_log.pl | 210 +++++++++++++++++- agc_2-X/trunk/www/agc/vdc_db_query.php | 24 +- agc_2-X/trunk/www/agc/vicidial.php | 5 +- 4 files changed, 423 insertions(+), 26 deletions(-) diff --git a/agc_2-X/branches/agc_2.2.0/bin/AST_cleanup_agent_log.pl b/agc_2-X/branches/agc_2.2.0/bin/AST_cleanup_agent_log.pl index 379a621d..d688d496 100644 --- a/agc_2-X/branches/agc_2.2.0/bin/AST_cleanup_agent_log.pl +++ b/agc_2-X/branches/agc_2.2.0/bin/AST_cleanup_agent_log.pl @@ -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 ##### diff --git a/agc_2-X/trunk/bin/AST_cleanup_agent_log.pl b/agc_2-X/trunk/bin/AST_cleanup_agent_log.pl index 44ed2b19..d59ea11c 100644 --- a/agc_2-X/trunk/bin/AST_cleanup_agent_log.pl +++ b/agc_2-X/trunk/bin/AST_cleanup_agent_log.pl @@ -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 ##### diff --git a/agc_2-X/trunk/www/agc/vdc_db_query.php b/agc_2-X/trunk/www/agc/vdc_db_query.php index b53963b7..b696ff6e 100644 --- a/agc_2-X/trunk/www/agc/vdc_db_query.php +++ b/agc_2-X/trunk/www/agc/vdc_db_query.php @@ -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";} $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";} diff --git a/agc_2-X/trunk/www/agc/vicidial.php b/agc_2-X/trunk/www/agc/vicidial.php index 5e46e7ed..28b975c2 100644 --- a/agc_2-X/trunk/www/agc/vicidial.php +++ b/agc_2-X/trunk/www/agc/vicidial.php @@ -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();}