683 lines
29 KiB
Perl
683 lines
29 KiB
Perl
package vicidial;
|
|
|
|
# vicidial.pm version 2.0.5
|
|
#
|
|
# Experimental library for general vicidial things
|
|
#
|
|
# This library has not been tested in a production level enviroment.
|
|
#
|
|
# Copyright (C) 2008 VICIDIAL-GROUP <info@vicidial-group.com> LICENSE: AGPLv2
|
|
#
|
|
# CHANGELOG:
|
|
# 80311-1611 - First test build
|
|
# 80324-1435 - Fixed minor issues and tested all functions.
|
|
# 80326-1113 - Moved agi_log to the new viciagi.pm library
|
|
|
|
# Export our symbols
|
|
require Exporter;
|
|
@ISA = qw(Exporter);
|
|
@EXPORT = qw(get_date_hash_current get_date_hash_value get_now_date load_config_file load_sys_config_db load_server_config_db load_all_servers_config_db);
|
|
|
|
# USE FLAGS
|
|
use 5.008;
|
|
use strict;
|
|
use warnings;
|
|
use Switch;
|
|
use DBI;
|
|
|
|
# function to get a date hash that represents the current time
|
|
# this function does not take any arguments
|
|
# this function returns a reference to a hash with the localtime in it
|
|
# the has has the following values:
|
|
# 'sec' = the seconds
|
|
# 'min' = the minutes
|
|
# 'hour' = the hours
|
|
# 'Fhour' = the hours with a 0 infront if it it less than 10
|
|
# 'mday' = the day of the month
|
|
# 'mon' = the month of the year
|
|
# 'year' = the year
|
|
# 'wday' = the day of the week
|
|
# 'yday' = the day of the year
|
|
# 'isdst' = if day light savings time is in effect
|
|
sub get_date_hash_current {
|
|
return get_date_hash_value(time());
|
|
}
|
|
|
|
|
|
# function to get a date hash that represents a time value
|
|
# ARG1 a time value in seconds since epoch
|
|
# this function returns a reference to a hash with the localtime in it
|
|
# the has has the following values:
|
|
# 'sec' = the seconds
|
|
# 'min' = the minutes
|
|
# 'hour' = the hours
|
|
# 'Fhour' = the hours with a 0 infront if it it less than 10
|
|
# 'mday' = the day of the month
|
|
# 'mon' = the month of the year
|
|
# 'year' = the year
|
|
# 'wday' = the day of the week
|
|
# 'yday' = the day of the year
|
|
# 'isdst' = if day light savings time is in effect
|
|
sub get_date_hash_value {
|
|
# the time to compute
|
|
my $time_val = $_[0];
|
|
|
|
# init the hash
|
|
my %date_hash = ();
|
|
|
|
# assign the values
|
|
(
|
|
$date_hash{ 'sec' },
|
|
$date_hash{ 'min' },
|
|
$date_hash{ 'hour' },
|
|
$date_hash{ 'mday' },
|
|
$date_hash{ 'month' },
|
|
$date_hash{ 'year' },
|
|
$date_hash{ 'wday' },
|
|
$date_hash{ 'yday' },
|
|
$date_hash{ 'isdst' }
|
|
) = localtime( $time_val );
|
|
|
|
# make the values more useful
|
|
$date_hash{ 'year' } = ( $date_hash{ 'year' } + 1900 );
|
|
$date_hash{ 'month' }++;
|
|
if ( $date_hash{ 'month' } < 10 ) {
|
|
$date_hash{ 'month' } = "0$date_hash{ 'month' }";
|
|
}
|
|
if ( $date_hash{ 'mday' } < 10 ) {
|
|
$date_hash{ 'mday' } = "0$date_hash{ 'mday' }";
|
|
}
|
|
if ( $date_hash{ 'min' } < 10 ) {
|
|
$date_hash{ 'min' } = "0$date_hash{ 'min' }";
|
|
}
|
|
if ( $date_hash{ 'sec' } < 10 ) {
|
|
$date_hash{ 'sec' } = "0$date_hash{ 'sec' }";
|
|
}
|
|
if ( $date_hash{ 'hour' } < 10 ) {
|
|
$date_hash{ 'Fhour' } = "0$date_hash{ 'hour' }";
|
|
} else {
|
|
$date_hash{ 'Fhour' } = $date_hash{ 'hour' };
|
|
}
|
|
|
|
# return the hash
|
|
return \%date_hash;
|
|
}
|
|
|
|
|
|
# function to convert a date hash to a date string
|
|
# ARG1 is a reference to a date_hash to convert
|
|
# this function returns a reference to a date string
|
|
sub get_now_date {
|
|
my $date_hash_ref = $_[0];
|
|
my %date_hash = %$date_hash_ref;
|
|
|
|
# build the string
|
|
my $now_date =
|
|
"$date_hash{ 'year' }-$date_hash{ 'month' }-$date_hash{ 'mday' } $date_hash{ 'Fhour' }:$date_hash{ 'min' }:$date_hash{ 'sec' }";
|
|
|
|
return \$now_date;
|
|
}
|
|
|
|
# function to load the astguicleint config file
|
|
# ARG0 the path to the astguiclient config file
|
|
# this function returns a reference to a hash with all of the config file values
|
|
# the has has the following values:
|
|
# 'logs_path' = the path to the log directory
|
|
# 'home_path' = the location of the astguiclient scripts
|
|
# 'agi_path' = the path to the asteirsk agi directory
|
|
# 'web_path' = the path to the apache web directory vicidial is in
|
|
# 'sounds_path' = the path to the asterisk sounds directory
|
|
# 'monitor_path' = the path to where asterisk stores the recordings
|
|
# 'done_monitor_path' = the path to put the recordings after where done compressing them
|
|
# 'fagi_log_min_servers' = minimum number of server threads for the FAGI
|
|
# 'fagi_log_max_servers' = maximum number of server threads for the FAGI
|
|
# 'fagi_log_min_spare_servers' = minimum number of spare server threads for the FAGI
|
|
# 'fagi_log_max_spare_servers' = maximum number of spare server threads for the FAGI
|
|
# 'fagi_log_max_requests' = maximum number of requests a thread should handle before dieing
|
|
# 'fagi_log_checkfordead' = seconds before looking for dead threads to kill
|
|
# 'fagi_log_checkforwait' = seconds before looking if the FAGI can kill some waitng threads
|
|
# 'server_ip' = IP address of the server
|
|
# 'active_keepalives' = which processes should be check to see if they are alive
|
|
# 'db_server' = the IP or Hostname of the database server
|
|
# 'db_database' = the database that vicidial uses
|
|
# 'db_user' = the username that is used to connect to the database
|
|
# 'db_pass' = the password that is used to connect to the database
|
|
# 'db_port' = the port number to connect to the database
|
|
# 'ftp_host' = the IP or Hostname of the ftp server to store the recordings on
|
|
# 'ftp_user' = the username that is used to connect to the recording ftp server
|
|
# 'ftp_pass' = the password that is used to connect to the recording ftp server
|
|
# 'ftp_port' = the port number to connect to the recording ftp server
|
|
# 'ftp_dir' = the directory to place the recording into on the recording ftp server
|
|
# 'ftp_http_path' = the web address to access the recording that are on the recording ftp server
|
|
# 'report_host' = the IP or Hostname of the ftp server to store the reports on
|
|
# 'report_user' = the username that is used to connect to the report ftp server
|
|
# 'report_pass' = the password that is used to connect to the report ftp server
|
|
# 'report_port' = the port number to connect to the report ftp server
|
|
# 'report_dir' = the directory to place the reports into on the report ftp server
|
|
sub load_config_file {
|
|
my $file_path = $_[0];
|
|
|
|
# init the hash
|
|
my %config_hash = ();
|
|
|
|
$config_hash{ 'logs_path' } = "";
|
|
$config_hash{ 'home_path' } = "";
|
|
$config_hash{ 'agi_path' } = "";
|
|
$config_hash{ 'web_path' } = "";
|
|
$config_hash{ 'sounds_path' } = "";
|
|
$config_hash{ 'monitor_path' } = "";
|
|
$config_hash{ 'done_monitor_path' } = "";
|
|
$config_hash{ 'fagi_log_server-port' } = "4577";
|
|
$config_hash{ 'fagi_log_min_servers' } = "";
|
|
$config_hash{ 'fagi_log_max_servers' } = "";
|
|
$config_hash{ 'fagi_log_min_spare_servers' } = "";
|
|
$config_hash{ 'fagi_log_max_spare_servers' } = "";
|
|
$config_hash{ 'fagi_log_max_requests' } = "";
|
|
$config_hash{ 'fagi_log_checkfordead' } = "";
|
|
$config_hash{ 'fagi_log_checkforwait' } = "";
|
|
$config_hash{ 'fagi_in_server_port' } = "4578";
|
|
$config_hash{ 'fagi_in_min_servers' } = "";
|
|
$config_hash{ 'fagi_in_max_servers' } = "";
|
|
$config_hash{ 'fagi_in_min_spare_servers' } = "";
|
|
$config_hash{ 'fagi_in_max_spare_servers' } = "";
|
|
$config_hash{ 'fagi_in_max_requests' } = "";
|
|
$config_hash{ 'fagi_in_checkfordead' } = "";
|
|
$config_hash{ 'fagi_in_checkforwait' } = "";
|
|
$config_hash{ 'fagi_out_server-port' } = "4579";
|
|
$config_hash{ 'fagi_out_min_servers' } = "";
|
|
$config_hash{ 'fagi_out_max_servers' } = "";
|
|
$config_hash{ 'fagi_out_min_spare_servers' } = "";
|
|
$config_hash{ 'fagi_out_max_spare_servers' } = "";
|
|
$config_hash{ 'fagi_out_max_requests' } = "";
|
|
$config_hash{ 'fagi_out_checkfordead' } = "";
|
|
$config_hash{ 'fagi_out_checkforwait' } = "";
|
|
$config_hash{ 'server_ip' } = "";
|
|
$config_hash{ 'active_keepalives' } = "";
|
|
$config_hash{ 'db_server' } = "";
|
|
$config_hash{ 'db_database' } = "";
|
|
$config_hash{ 'db_user' } = "";
|
|
$config_hash{ 'db_pass' } = "";
|
|
$config_hash{ 'db_port' } = "";
|
|
$config_hash{ 'ftp_host' } = "";
|
|
$config_hash{ 'ftp_user' } = "";
|
|
$config_hash{ 'ftp_pass' } = "";
|
|
$config_hash{ 'ftp_port' } = "";
|
|
$config_hash{ 'ftp_dir' } = "";
|
|
$config_hash{ 'ftp_http_path' } = "";
|
|
$config_hash{ 'report_host' } = "";
|
|
$config_hash{ 'report_user' } = "";
|
|
$config_hash{ 'report_pass' } = "";
|
|
$config_hash{ 'report_port' } = "";
|
|
$config_hash{ 'report_dir' } = "";
|
|
|
|
|
|
# open the config file and read it in
|
|
open( CONFIG, "$file_path" ) || die "can't open $file_path: $!\n";
|
|
my @conf = <CONFIG>;
|
|
close(CONFIG);
|
|
|
|
# loop through the configs and set the apportiate value in the config_hash
|
|
my $i = 0;
|
|
foreach (@conf) {
|
|
my $line = $conf[$i];
|
|
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
|
|
|
|
switch ( $line ) {
|
|
# Paths to various directories
|
|
case qr/^PATHlogs/ {
|
|
$config_hash{ 'logs_path' } = $line;
|
|
$config_hash{ 'logs_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHhome/ {
|
|
$config_hash{ 'home_path' } = $line;
|
|
$config_hash{ 'home_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHagi/ {
|
|
$config_hash{ 'agi_path' } = $line;
|
|
$config_hash{ 'agi_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHweb/ {
|
|
$config_hash{ 'web_path' } = $line;
|
|
$config_hash{ 'web_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHsounds/ {
|
|
$config_hash{ 'sounds_path' } = $line;
|
|
$config_hash{ 'sounds_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHmonitor/ {
|
|
$config_hash{ 'monitor_path' } = $line;
|
|
$config_hash{ 'monitor_path' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^PATHDONEmonitor/ {
|
|
$config_hash{ 'done_monitor_path' } = $line;
|
|
$config_hash{ 'done_monitor_path' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# FAGI log server settings
|
|
case qr/^VARfastagi_log_server_port/ {
|
|
$config_hash{ 'fagi_log_server_port' } = $line;
|
|
$config_hash{ 'fagi_log_server_port' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_min_servers/ {
|
|
$config_hash{ 'fagi_log_min_servers' } = $line;
|
|
$config_hash{ 'fagi_log_min_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_max_servers/ {
|
|
$config_hash{ 'fagi_log_max_servers' } = $line;
|
|
$config_hash{ 'fagi_log_max_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_min_spare_servers/ {
|
|
$config_hash{ 'fagi_log_min_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_log_min_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_max_spare_servers/ {
|
|
$config_hash{ 'fagi_log_max_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_log_max_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_max_requests/ {
|
|
$config_hash{ 'fagi_log_max_requests' } = $line;
|
|
$config_hash{ 'fagi_log_max_requests' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_checkfordead/ {
|
|
$config_hash{ 'fagi_log_checkfordead' } = $line;
|
|
$config_hash{ 'fagi_log_checkfordead' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_log_checkforwait/ {
|
|
$config_hash{ 'fagi_log_checkforwait' } = $line;
|
|
$config_hash{ 'fagi_log_checkforwait' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# FAGI inbound server settings
|
|
case qr/^VARfastagi_in_server_port/ {
|
|
$config_hash{ 'fagi_in_server_port' } = $line;
|
|
$config_hash{ 'fagi_in_server_port' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_min_servers/ {
|
|
$config_hash{ 'fagi_in_min_servers' } = $line;
|
|
$config_hash{ 'fagi_in_min_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_max_servers/ {
|
|
$config_hash{ 'fagi_in_max_servers' } = $line;
|
|
$config_hash{ 'fagi_in_max_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_min_spare_servers/ {
|
|
$config_hash{ 'fagi_in_min_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_in_min_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_max_spare_servers/ {
|
|
$config_hash{ 'fagi_in_max_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_in_max_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_max_requests/ {
|
|
$config_hash{ 'fagi_in_max_requests' } = $line;
|
|
$config_hash{ 'fagi_in_max_requests' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_checkfordead/ {
|
|
$config_hash{ 'fagi_in_checkfordead' } = $line;
|
|
$config_hash{ 'fagi_in_checkfordead' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_in_checkforwait/ {
|
|
$config_hash{ 'fagi_in_checkforwait' } = $line;
|
|
$config_hash{ 'fagi_in_checkforwait' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# FAGI outbound server settings
|
|
case qr/^VARfastagi_out_server_port/ {
|
|
$config_hash{ 'fagi_out_server_port' } = $line;
|
|
$config_hash{ 'fagi_out_server_port' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_min_servers/ {
|
|
$config_hash{ 'fagi_out_min_servers' } = $line;
|
|
$config_hash{ 'fagi_out_min_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_max_servers/ {
|
|
$config_hash{ 'fagi_out_max_servers' } = $line;
|
|
$config_hash{ 'fagi_out_max_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_min_spare_servers/ {
|
|
$config_hash{ 'fagi_out_min_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_out_min_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_max_spare_servers/ {
|
|
$config_hash{ 'fagi_out_max_spare_servers' } = $line;
|
|
$config_hash{ 'fagi_out_max_spare_servers' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_max_requests/ {
|
|
$config_hash{ 'fagi_out_max_requests' } = $line;
|
|
$config_hash{ 'fagi_out_max_requests' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_checkfordead/ {
|
|
$config_hash{ 'fagi_out_checkfordead' } = $line;
|
|
$config_hash{ 'fagi_out_checkfordead' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARfastagi_out_checkforwait/ {
|
|
$config_hash{ 'fagi_out_checkforwait' } = $line;
|
|
$config_hash{ 'fagi_out_checkforwait' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# general server settings
|
|
case qr/^VARserver_ip/ {
|
|
$config_hash{ 'server_ip' } = $line;
|
|
$config_hash{ 'server_ip' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARactive_keepalives/ {
|
|
$config_hash{ 'active_keepalives' } = $line;
|
|
$config_hash{ 'active_keepalives' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# Database server connection information
|
|
case qr/^VARDB_server/ {
|
|
$config_hash{ 'db_server' } = $line;
|
|
$config_hash{ 'db_server' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARDB_database/ {
|
|
$config_hash{ 'db_database' } = $line;
|
|
$config_hash{ 'db_database' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARDB_user/ {
|
|
$config_hash{ 'db_user' } = $line;
|
|
$config_hash{ 'db_user' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARDB_pass/ {
|
|
$config_hash{ 'db_pass' } = $line;
|
|
$config_hash{ 'db_pass' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARDB_port/ {
|
|
$config_hash{ 'db_port' } = $line;
|
|
$config_hash{ 'db_port' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# FTP recording archive connection information
|
|
case qr/^VARFTP_host/ {
|
|
$config_hash{ 'ftp_host' } = $line;
|
|
$config_hash{ 'ftp_host' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARFTP_user/ {
|
|
$config_hash{ 'ftp_user' } = $line;
|
|
$config_hash{ 'ftp_user' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARFTP_pass/ {
|
|
$config_hash{ 'ftp_pass' } = $line;
|
|
$config_hash{ 'ftp_pass' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARFTP_port/ {
|
|
$config_hash{ 'ftp_port' } = $line;
|
|
$config_hash{ 'ftp_port' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARFTP_dir/ {
|
|
$config_hash{ 'ftp_dir' } = $line;
|
|
$config_hash{ 'ftp_dir' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARHTTP_path/ {
|
|
$config_hash{ 'ftp_http_path' } = $line;
|
|
$config_hash{ 'ftp_http_path' } =~ s/.*=//gi;
|
|
}
|
|
|
|
# REPORT server connection information
|
|
case qr/^VARREPORT_host/ {
|
|
$config_hash{ 'report_host' } = $line;
|
|
$config_hash{ 'report_host' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARREPORT_user/ {
|
|
$config_hash{ 'report_user' } = $line;
|
|
$config_hash{ 'report_user' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARREPORT_pass/ {
|
|
$config_hash{ 'report_pass' } = $line;
|
|
$config_hash{ 'report_pass' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARREPORT_port/ {
|
|
$config_hash{ 'report_port' } = $line;
|
|
$config_hash{ 'report_port' } =~ s/.*=//gi;
|
|
}
|
|
case qr/^VARREPORT_dir/ {
|
|
$config_hash{ 'report_dir' } = $line;
|
|
$config_hash{ 'report_dir' } =~ s/.*=//gi;
|
|
}
|
|
}
|
|
$i++;
|
|
}
|
|
|
|
# return the hash
|
|
return \%config_hash;
|
|
}
|
|
|
|
|
|
# function to load the system configs from the db
|
|
# ARG0 is an already connected database handle
|
|
# this function returns a hash with the servers configs in it
|
|
# the hash has the following values:
|
|
# version = the version of astguiclient that is being used
|
|
# install_date = the date that the orginal installation was done
|
|
# use_utf8 = if to use UTF8 instead of latin characters
|
|
# webroot_writable = if to place temp files in the webroot directory
|
|
# enable_qm_logging = if to use QueueMetrics
|
|
# qm_server_ip = QM servers ip address
|
|
# qm_dbname = QM DB name
|
|
# qm_login = QM DB username
|
|
# qm_pass = QM DB password
|
|
# qm_url = url to get to QM
|
|
# qm_log_id = the server ID that all VICIDIAL logs will use as an id for each record in QM
|
|
# qm_eq_prepend = field from vicidial_list to prepend to the cust. phone number in QM
|
|
# vd_agent_disable = if to disable manager actions on agents screens
|
|
# allow_sipsak_msgs = if to use sipsak
|
|
# admin_home_url = url to go to if you click the HOME link on the top of the admin page
|
|
# agent_xfer_weblog = log to a text logfile on the webserver every time call is xfered to agent
|
|
sub load_sys_config_db {
|
|
my $dbh = $_[0];
|
|
|
|
# init the hash
|
|
my %system_hash = ();
|
|
|
|
# fetch data from db
|
|
my $stmt =
|
|
"SELECT version, install_date, use_non_latin, webroot_writable, enable_queuemetrics_logging, queuemetrics_server_ip, queuemetrics_dbname, queuemetrics_login, queuemetrics_pass, queuemetrics_url, queuemetrics_log_id, queuemetrics_eq_prepend, vicidial_agent_disable, allow_sipsak_messages, admin_home_url, enable_agc_xfer_log FROM system_settings LIMIT 1;";
|
|
my $sth = $dbh->prepare($stmt) or die "preparing: ", $dbh->errstr;
|
|
$sth->execute or die "executing: $stmt ", $dbh->errstr;
|
|
my @ary = $sth->fetchrow_array;
|
|
$sth->finish();
|
|
|
|
# assign the hash values
|
|
$system_hash{ 'version' } = $ary[0]; # version db field
|
|
$system_hash{ 'install_date' } = $ary[1]; # install_date db field
|
|
$system_hash{ 'use_utf8' } = $ary[2]; # use_non_latin db field
|
|
$system_hash{ 'webroot_writable' } = $ary[3]; # webroot_writable db field
|
|
$system_hash{ 'enable_qm_log' } = $ary[4]; # enable_queuemetrics_logging db field
|
|
$system_hash{ 'qm_server_ip' } = $ary[5]; # queuemetrics_server_ip db field
|
|
$system_hash{ 'qm_dbname' } = $ary[6]; # queuemetrics_dbname db field
|
|
$system_hash{ 'qm_login' } = $ary[7]; # queuemetrics_login db field
|
|
$system_hash{ 'qm_pass' } = $ary[8]; # queuemetrics_pass db field
|
|
$system_hash{ 'qm_url' } = $ary[9]; # queuemetrics_url db field
|
|
$system_hash{ 'qm_log_id' } = $ary[10]; # queuemetrics_log_id db field
|
|
$system_hash{ 'qm_eq_prepend' } = $ary[11]; # queuemetrics_eq_prepend db field
|
|
$system_hash{ 'vd_agent_disable' } = $ary[12]; # vicidial_agent_disable db field
|
|
$system_hash{ 'allow_sipsak_msgs' } = $ary[13]; # allow_sipsak_messages db field
|
|
$system_hash{ 'admin_home_url' } = $ary[14]; # admin_home_url db field
|
|
$system_hash{ 'agent_xfer_weblog' } = $ary[15]; # enable_agc_xfer_log db field
|
|
|
|
# run through the hash and set any non-defined keys to ""
|
|
for my $sys_key ( keys %system_hash ) {
|
|
if ( !defined( $system_hash{ $sys_key } ) ) {
|
|
$system_hash{ $sys_key } = "";
|
|
}
|
|
}
|
|
|
|
# return the hash
|
|
return \%system_hash;
|
|
}
|
|
|
|
|
|
# function to load a servers configs from the db
|
|
# ARG0 is the ip of the server to load configs for
|
|
# ARG1 is an already connected database handle
|
|
# this function returns a reference to a hash with the servers configs in it
|
|
# the hash has the following values:
|
|
# server_id = the id for the server in the DB
|
|
# server_desc = the description of the server
|
|
# server_ip = the IP address of the server
|
|
# active = if the server is active or not
|
|
# ast_version = the version of asterisk used on the server
|
|
# max_vd_trunks = the maximum number of trunks vicidial can use on this server
|
|
# ast_mgr_host = the telnet host to connect to this servers Asterisk Manager interface
|
|
# localhost = what this server thinks localhost should be (usually 127.0.0.1)
|
|
# ast_mgr_port = the telnet port to connect to this servers Asterisk Manager interface
|
|
# ast_mgr_user = the username for the general connection to the manager interface
|
|
# ast_mgr_pass = the secret used to connect to the manager inferface for all of the usernames
|
|
# ast_mgr_update_user = the username to run updates from on the manager interface
|
|
# ast_mgr_listen_user = the username to listen on the manager interface
|
|
# ast_mgr_send_user = the username to send actions on the manager interface
|
|
# local_gmt = the gmt offset for this server
|
|
# vm_dump_exten = the extension to send voicemail to on this server
|
|
# dft_xfer_exten = default extension to send calls to for VICIDIAL auto dialing
|
|
# ext_context = the context where to find the vicidial extension
|
|
# sys_perf_log = if vicidial should do performance logging for this server
|
|
# vd_server_logs = if vicidial should do normal logging for this server
|
|
# agi_output = what style of logging should be done for this server
|
|
# vd_balance_active = if vicidial should do balanced dialing with this server
|
|
# vd_balance_free_trunks = the number of trunks balanced dialing must keep free
|
|
sub load_server_config_db {
|
|
my $server_ip = $_[0];
|
|
my $dbh = $_[1];
|
|
|
|
# init the hash
|
|
my %server_hash = ();
|
|
|
|
# fetch data from the DB
|
|
my $stmt = "SELECT server_id, server_description, server_ip, active, asterisk_version, max_vicidial_trunks, telnet_host, telnet_port, ASTmgrUSERNAME, ASTmgrSECRET, ASTmgrUSERNAMEupdate, ASTmgrUSERNAMElisten, ASTmgrUSERNAMEsend, local_gmt, voicemail_dump_exten, answer_transfer_agent, ext_context, sys_perf_log, vd_server_logs, agi_output, vicidial_balance_active, balance_trunks_offlimits FROM servers WHERE server_ip = '$server_ip' LIMIT 1;";
|
|
|
|
my $sth = $dbh->prepare($stmt) or die "preparing: ", $dbh->errstr;
|
|
$sth->execute or die "executing: $stmt ", $dbh->errstr;
|
|
my @ary = $sth->fetchrow_array;
|
|
$sth->finish();
|
|
|
|
# assign the hash values
|
|
$server_hash{ 'server_id' } = "$ary[0]"; # server_id db field
|
|
$server_hash{ 'server_desc' } = "$ary[1]"; # server_description db field
|
|
$server_hash{ 'server_ip' } = "$ary[2]"; # server_ip db field
|
|
$server_hash{ 'active' } = "$ary[3]"; # active db field
|
|
$server_hash{ 'ast_version' } = "$ary[4]"; # asterisk_version db field
|
|
$server_hash{ 'max_vd_trunks' } = "$ary[5]"; # max_vicidial_trunks db field
|
|
$server_hash{ 'ast_mgr_host' } = "$ary[6]"; # telnet_host db field
|
|
$server_hash{ 'ast_mgr_port' } = "$ary[7]"; # telnet_port db field
|
|
$server_hash{ 'ast_mgr_user' } = "$ary[8]"; # ASTmgrUSERNAME db field
|
|
$server_hash{ 'ast_mgr_pass' } = "$ary[9]"; # ASTmgrSECRET db field
|
|
$server_hash{ 'ast_mgr_update_user' } = "$ary[10]"; # ASTmgrUSERNAMEupdate db field
|
|
$server_hash{ 'ast_mgr_listen_user' } = "$ary[11]"; # ASTmgrUSERNAMElisten db field
|
|
$server_hash{ 'ast_mgr_send_user' } = "$ary[12]"; # ASTmgrUSERNAMEsend db field
|
|
$server_hash{ 'local_gmt' } = "$ary[13]"; # local_gmt db field
|
|
$server_hash{ 'vm_dump_exten' } = "$ary[14]"; # voicemail_dump_exten db field
|
|
$server_hash{ 'dft_xfer_exten' } = "$ary[15]"; # answer_transfer_agent db field
|
|
$server_hash{ 'ext_context' } = "$ary[16]"; # ext_context db field
|
|
$server_hash{ 'sys_perf_log' } = "$ary[17]"; # sys_perf_log db field
|
|
$server_hash{ 'vd_server_logs' } = "$ary[18]"; # vd_server_logs db field
|
|
$server_hash{ 'agi_output' } = "$ary[19]"; # agi_output db field
|
|
$server_hash{ 'vd_balance_active' } = "$ary[20]"; # vicidial_balance_active db field
|
|
$server_hash{ 'vd_balance_free_trunks' } = "$ary[21]"; # balance_trunks_offlimits db field
|
|
|
|
# run through the hash and set any non-defined keys to ""
|
|
for my $serv_key ( keys %server_hash ) {
|
|
if ( !defined( $server_hash{ $serv_key } ) ) {
|
|
$server_hash{ $serv_key } = "";
|
|
}
|
|
}
|
|
|
|
#return the hash
|
|
return \%server_hash;
|
|
}
|
|
|
|
|
|
# function to load all servers configs from the db
|
|
# ARG0 is an already connected database handle
|
|
# this function returns a reference to a hash of hashes with the servers configs in them
|
|
# the first level hash is referneced by the servers IP address
|
|
# the second level hash has the following values:
|
|
# server_id = the id for the server in the DB
|
|
# server_desc = the description of the server
|
|
# server_ip = the IP address of the server
|
|
# active = if the server is active or not
|
|
# ast_version = the version of asterisk used on the server
|
|
# max_vd_trunks = the maximum number of trunks vicidial can use on this server
|
|
# ast_mgr_host = the telnet host to connect to this servers Asterisk Manager interface
|
|
# localhost = what this server thinks localhost should be (usually 127.0.0.1)
|
|
# ast_mgr_port = the telnet port to connect to this servers Asterisk Manager interface
|
|
# ast_mgr_user = the username for the general connection to the manager interface
|
|
# ast_mgr_pass = the secret used to connect to the manager inferface for all of the usernames
|
|
# ast_mgr_update_user = the username to run updates from on the manager interface
|
|
# ast_mgr_listen_user = the username to listen on the manager interface
|
|
# ast_mgr_send_user = the username to send actions on the manager interface
|
|
# local_gmt = the gmt offset for this server
|
|
# vm_dump_exten = the extension to send voicemail to on this server
|
|
# dft_xfer_exten = default extension to send calls to for VICIDIAL auto dialing
|
|
# ext_context = the context where to find the vicidial extension
|
|
# sys_perf_log = if vicidial should do performance logging for this server
|
|
# vd_server_logs = if vicidial should do normal logging for this server
|
|
# agi_output = what style of logging should be done for this server
|
|
# vd_balance_active = if vicidial should do balanced dialing with this server
|
|
# vd_balance_free_trunks = the number of trunks balanced dialing must keep free
|
|
sub load_all_servers_config_db {
|
|
my $dbh = $_[0];
|
|
|
|
# init the hash
|
|
my %all_servers_hash = ();
|
|
|
|
# fetch data from the DB
|
|
my $stmt =
|
|
"SELECT server_id, server_description, server_ip, active, asterisk_version, max_vicidial_trunks, telnet_host, telnet_port, ASTmgrUSERNAME, ASTmgrSECRET, ASTmgrUSERNAMEupdate, ASTmgrUSERNAMElisten, ASTmgrUSERNAMEsend, local_gmt, voicemail_dump_exten, answer_transfer_agent, ext_context, sys_perf_log, vd_server_logs, agi_output, vicidial_balance_active, balance_trunks_offlimits FROM servers;";
|
|
my $sth = $dbh->prepare($stmt) or die "preparing: ", $dbh->errstr;
|
|
$sth->execute or die "executing: $stmt ", $dbh->errstr;
|
|
|
|
# loop through each of the servers
|
|
my $sthrows = $sth->rows;
|
|
my $rec_count = 0;
|
|
while ( $sthrows > $rec_count ) {
|
|
my @ary = $sth->fetchrow_array;
|
|
|
|
# get the ip address of the server for refernecing
|
|
my $server_ip = "$ary[2]";
|
|
|
|
# assign the hash values
|
|
$all_servers_hash{ $server_ip }{ 'server_id' } = "$ary[0]"; # server_id db field
|
|
$all_servers_hash{ $server_ip }{ 'server_desc' } = "$ary[1]"; # server_description db field
|
|
$all_servers_hash{ $server_ip }{ 'server_ip' } = "$ary[2]"; # server_ip db field
|
|
$all_servers_hash{ $server_ip }{ 'active' } = "$ary[3]"; # active db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_version' } = "$ary[4]"; # asterisk_version db field
|
|
$all_servers_hash{ $server_ip }{ 'max_vd_trunks' } = "$ary[5]"; # max_vicidial_trunks db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_host' } = "$ary[6]"; # telnet_host db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_port' } = "$ary[7]"; # telnet_port db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_user' } = "$ary[8]"; # ASTmgrUSERNAME db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_pass' } = "$ary[9]"; # ASTmgrSECRET db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_update_user' } = "$ary[10]"; # ASTmgrUSERNAMEupdate db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_listen_user' } = "$ary[11]"; # ASTmgrUSERNAMElisten db field
|
|
$all_servers_hash{ $server_ip }{ 'ast_mgr_send_user' } = "$ary[12]"; # ASTmgrUSERNAMEsend db field
|
|
$all_servers_hash{ $server_ip }{ 'local_gmt' } = "$ary[13]"; # local_gmt db field
|
|
$all_servers_hash{ $server_ip }{ 'vm_dump_exten' } = "$ary[14]"; # voicemail_dump_exten db field
|
|
$all_servers_hash{ $server_ip }{ 'dft_xfer_exten' } = "$ary[15]"; # answer_transfer_agent db field
|
|
$all_servers_hash{ $server_ip }{ 'ext_context' } = "$ary[16]"; # ext_context db field
|
|
$all_servers_hash{ $server_ip }{ 'sys_perf_log' } = "$ary[17]"; # sys_perf_log db field
|
|
$all_servers_hash{ $server_ip }{ 'vd_server_logs' } = "$ary[18]"; # vd_server_logs db field
|
|
$all_servers_hash{ $server_ip }{ 'agi_output' } = "$ary[19]"; # agi_output db field
|
|
$all_servers_hash{ $server_ip }{ 'vd_balance_active' } = "$ary[20]"; # vicidial_balance_active db field
|
|
$all_servers_hash{ $server_ip }{ 'vd_balance_free_trunks' } = "$ary[21]"; # balance_trunks_offlimits db field
|
|
|
|
$rec_count++;
|
|
}
|
|
|
|
my $all_servers_hash_ref = \%all_servers_hash;
|
|
|
|
# run through the hash and set any non-defined keys to ""
|
|
for my $serv_ip_key ( keys %$all_servers_hash_ref ) {
|
|
for my $serv_key ( keys %{$all_servers_hash_ref->{ $serv_ip_key }} ) {
|
|
if ( !defined( $all_servers_hash{ $serv_ip_key }{ $serv_key } ) ) {
|
|
$all_servers_hash{ $serv_ip_key }{ $serv_key } = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
$sth->finish();
|
|
|
|
# return the hash of hashes
|
|
return \%all_servers_hash;
|
|
}
|
|
|
|
1;
|