From 55476100f85ee43b31711988d27081d59f418ee9 Mon Sep 17 00:00:00 2001 From: mattf Date: Wed, 11 Aug 2021 21:24:46 +0000 Subject: [PATCH] Added option to logout agents only within campaigns/users with a specific dial_prefix/user_code for AST_agent_logout.pl script git-svn-id: svn://192.168.202.10@3491 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/bin/AST_agent_logout.pl | 173 +++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 4 deletions(-) diff --git a/agc_2-X/trunk/bin/AST_agent_logout.pl b/agc_2-X/trunk/bin/AST_agent_logout.pl index 7b4c6cdd..7366e7af 100644 --- a/agc_2-X/trunk/bin/AST_agent_logout.pl +++ b/agc_2-X/trunk/bin/AST_agent_logout.pl @@ -20,14 +20,21 @@ # ## 4:15PM on Saturday # 15 16 * * 6 /usr/share/astguiclient/AST_agent_logout.pl --debugX # +# ## Every minute between 9:15AM and 10:15PM Monday-Friday with settings container defined +# * 9,10,11,12,13,14,15,16,17,18,19,20,21,22 * * 1,2,3,4,5 /usr/share/astguiclient/AST_agent_logout.pl --debugX --container=XXX # -# Copyright (C) 2014 Matt Florell LICENSE: AGPLv2 +# EXAMPLE Settings Container Entry: +# dial_prefix => 444 +# user_code => backoffice_agent +# +# Copyright (C) 2021 Matt Florell LICENSE: AGPLv2 # # CHANGELOG # 80112-0330 - First Build # 91129-2138 - Replace SELECT STAR in SQL statement, fixed other formatting # 140426-1950 - Added pause_type # 200412-1037 - Updated to match web emergency logout, with QM logging +# 210811-1630 - Added option to logout agents only within campaigns/users with a specific dial_prefix/user_code # # constants @@ -68,6 +75,7 @@ if (length($ARGV[0])>1) print " [--debugX] = super debug\n"; print " [--test] = test\n"; print " [--campaign=XXX] = run for campaign XXX only\n"; + print " [--container=XXX] = optional, the ID of the settings container to run from the system\n"; print "\n"; exit; } @@ -82,6 +90,15 @@ if (length($ARGV[0])>1) } else {$CLIcampaign = '';} + if ($args =~ /--container=/i) + { + @data_in = split(/--container=/,$args); + $container = $data_in[1]; + $container =~ s/ .*$//gi; + if ($DB > 0) {print "\n----- SETTINGS CONTAINER: $container -----\n\n";} + } + else + {$container = '';} if ($args =~ /--debug/i) { $DB=1; @@ -169,19 +186,167 @@ $sthA->finish(); +### Grab container content from the database +$container_sql=''; +$CAMP_sql=''; +$USER_sql=''; +if (length($container) > 0) + { + $stmtA = "SELECT container_entry FROM vicidial_settings_containers where container_id = '$container';"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $container_sql = $aryA[0]; + } + $sthA->finish(); + + if (length($container_sql)>5) + { + @container_lines = split(/\n/,$container_sql); + $i=0; + foreach(@container_lines) + { + $container_lines[$i] =~ s/;.*|\r|\t//gi; + $container_lines[$i] =~ s/ => |=> | =>/=>/gi; + if (length($container_lines[$i])>5) + { + if ($container_lines[$i] =~ /^dial_prefix|^manual_dial_prefix|^campaign_description|^user_code|^custom_1|^custom_2|^custom_3|^custom_4|^custom_5/i) + { + if ($container_lines[$i] =~ /^dial_prefix/i) + { + $container_lines[$i] =~ s/^dial_prefix=>//gi; + if (length($CAMP_sql) > 10) {$CAMP_sql .= " or "} + $CAMP_sql .= "(dial_prefix='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |dial_prefix|$container_lines[$i]|$CAMP_sql|\n";} + } + if ($container_lines[$i] =~ /^manual_dial_prefix/i) + { + $container_lines[$i] =~ s/^manual_dial_prefix=>//gi; + if (length($CAMP_sql) > 10) {$CAMP_sql .= " or "} + $CAMP_sql .= "(manual_dial_prefix='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |manual_dial_prefix|$container_lines[$i]|$CAMP_sql|\n";} + } + if ($container_lines[$i] =~ /^campaign_description/i) + { + $container_lines[$i] =~ s/^campaign_description=>//gi; + if (length($CAMP_sql) > 10) {$CAMP_sql .= " or "} + $CAMP_sql .= "(campaign_description='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |campaign_description|$container_lines[$i]|$CAMP_sql|\n";} + } + if ($container_lines[$i] =~ /^user_code/i) + { + $container_lines[$i] =~ s/^user_code=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(user_code='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |user_code|$container_lines[$i]|$USER_sql|\n";} + } + if ($container_lines[$i] =~ /^custom_1/i) + { + $container_lines[$i] =~ s/^custom_1=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(custom_one='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |custom_1|$container_lines[$i]|$USER_sql|\n";} + } + if ($container_lines[$i] =~ /^custom_2/i) + { + $container_lines[$i] =~ s/^custom_2=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(custom_two='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |custom_2|$container_lines[$i]|$USER_sql|\n";} + } + if ($container_lines[$i] =~ /^custom_3/i) + { + $container_lines[$i] =~ s/^custom_3=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(custom_three='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |custom_3|$container_lines[$i]|$USER_sql|\n";} + } + if ($container_lines[$i] =~ /^custom_4/i) + { + $container_lines[$i] =~ s/^custom_4=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(custom_four='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |custom_4|$container_lines[$i]|$USER_sql|\n";} + } + if ($container_lines[$i] =~ /^custom_5/i) + { + $container_lines[$i] =~ s/^custom_5=>//gi; + if (length($USER_sql) > 10) {$USER_sql .= " or "} + $USER_sql .= "(custom_five='$container_lines[$i]')"; + if ($DBX) {print "DEBUG 1: |custom_5|$container_lines[$i]|$USER_sql|\n";} + } + } + else + {if ($DBX > 0) {print " not allowed config: $i|$container_lines[$i]|\n";}} + } + else + {if ($DBX > 0) {print " blank line: $i|$container_lines[$i]|\n";}} + $i++; + } + } + else + { + if ($Q < 1) + {print "ERROR: SETTINGS CONTAINER EMPTY: $container $container_sql\n";} + } + + $camp_select_sql=''; + if (length($CAMP_sql) > 5) + { + $stmtA = "SELECT campaign_id from vicidial_campaigns where $CAMP_sql order by campaign_id desc LIMIT 1000;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + $cct=0; + while ($sthArows > $cct) + { + @aryA = $sthA->fetchrow_array; + if ($cct > 0) {$camp_select_sql .= ",";} + $camp_select_sql .= "'$aryA[0]'"; + $cct++; + } + $sthA->finish(); + if ($cct > 0) {$camp_select_sql = "and campaign_id IN($camp_select_sql)";} + } + + $user_select_sql=''; + if (length($USER_sql) > 5) + { + $stmtA = "SELECT user from vicidial_users where $USER_sql order by user desc LIMIT 100000;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArows=$sthA->rows; + $cct=0; + while ($sthArows > $cct) + { + @aryA = $sthA->fetchrow_array; + if ($cct > 0) {$user_select_sql .= ",";} + $user_select_sql .= "'$aryA[0]'"; + $cct++; + } + $sthA->finish(); + if ($cct > 0) {$user_select_sql = "and user IN($user_select_sql)";} + } + } + + @user=@MT; if ($CLIcampaign) { - $stmtA = "SELECT user,server_ip,status,lead_id,campaign_id,uniqueid,callerid,channel,last_call_time,UNIX_TIMESTAMP(last_update_time),last_call_finish,closer_campaigns,call_server_ip,conf_exten from vicidial_live_agents where campaign_id='$CLIcampaign'"; + $stmtA = "SELECT user,server_ip,status,lead_id,campaign_id,uniqueid,callerid,channel,last_call_time,UNIX_TIMESTAMP(last_update_time),last_call_finish,closer_campaigns,call_server_ip,conf_exten from vicidial_live_agents where user!='' and campaign_id='$CLIcampaign' $camp_select_sql $user_select_sql;"; } else { - $stmtA = "SELECT user,server_ip,status,lead_id,campaign_id,uniqueid,callerid,channel,last_call_time,UNIX_TIMESTAMP(last_update_time),last_call_finish,closer_campaigns,call_server_ip,conf_exten from vicidial_live_agents"; + $stmtA = "SELECT user,server_ip,status,lead_id,campaign_id,uniqueid,callerid,channel,last_call_time,UNIX_TIMESTAMP(last_update_time),last_call_finish,closer_campaigns,call_server_ip,conf_exten from vicidial_live_agents where user!='' $camp_select_sql $user_select_sql;"; } $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthArows=$sthA->rows; +if ($DBX) {print "DEBUG2, AGENTS SELECT SQL: $sthArows|$stmtA|\n";} $rec_count=0; while ($sthArows > $rec_count) { @@ -239,7 +404,7 @@ while($rec_count > $i) if ( ($wait_epoch[$i] < 1) || ( ($status[$i] =~ /PAUSE/) && ($dispo_epoch[$i] < 1) ) ) { $pause_sec = ( ($now_date_epoch - $pause_epoch[$i]) + $pause_sec[$i]); - $stmtA = "UPDATE vicidial_agent_log SET wait_epoch='$now_date_epoch', pause_sec='$pause_sec' where agent_log_id='$agent_log_id[$i]',pause_type='SYSTEM';"; + $stmtA = "UPDATE vicidial_agent_log SET wait_epoch='$now_date_epoch', pause_sec='$pause_sec', pause_type='SYSTEM' where agent_log_id='$agent_log_id[$i]';"; } else {