mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-31 01:35:36 +02:00
Merge branch 'ent-9662-second-round' of brutus.artica.es:artica/pandorafms into ent-9662-second-round
This commit is contained in:
commit
be1fb9298b
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-agent-unix
|
package: pandorafms-agent-unix
|
||||||
Version: 7.0NG.769-230323
|
Version: 7.0NG.769-230324
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.769-230323"
|
pandora_version="7.0NG.769-230324"
|
||||||
|
|
||||||
echo "Test if you has the tools for to make the packages."
|
echo "Test if you has the tools for to make the packages."
|
||||||
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
|
||||||
|
@ -1023,7 +1023,7 @@ my $Sem = undef;
|
|||||||
my $ThreadSem = undef;
|
my $ThreadSem = undef;
|
||||||
|
|
||||||
use constant AGENT_VERSION => '7.0NG.769';
|
use constant AGENT_VERSION => '7.0NG.769';
|
||||||
use constant AGENT_BUILD => '230323';
|
use constant AGENT_BUILD => '230324';
|
||||||
|
|
||||||
# Agent log default file size maximum and instances
|
# Agent log default file size maximum and instances
|
||||||
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
use constant DEFAULT_MAX_LOG_SIZE => 600000;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_agent_linux
|
%define name pandorafms_agent_linux
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_agent_linux
|
%define name pandorafms_agent_linux
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.769"
|
PI_VERSION="7.0NG.769"
|
||||||
PI_BUILD="230323"
|
PI_BUILD="230324"
|
||||||
OS_NAME=`uname -s`
|
OS_NAME=`uname -s`
|
||||||
|
|
||||||
FORCE=0
|
FORCE=0
|
||||||
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
Version
|
Version
|
||||||
{230323}
|
{230324}
|
||||||
|
|
||||||
ViewReadme
|
ViewReadme
|
||||||
{Yes}
|
{Yes}
|
||||||
|
@ -30,7 +30,7 @@ using namespace Pandora;
|
|||||||
using namespace Pandora_Strutils;
|
using namespace Pandora_Strutils;
|
||||||
|
|
||||||
#define PATH_SIZE _MAX_PATH+1
|
#define PATH_SIZE _MAX_PATH+1
|
||||||
#define PANDORA_VERSION ("7.0NG.769 Build 230323")
|
#define PANDORA_VERSION ("7.0NG.769 Build 230324")
|
||||||
|
|
||||||
string pandora_path;
|
string pandora_path;
|
||||||
string pandora_dir;
|
string pandora_dir;
|
||||||
|
@ -11,7 +11,7 @@ BEGIN
|
|||||||
VALUE "LegalCopyright", "Artica ST"
|
VALUE "LegalCopyright", "Artica ST"
|
||||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||||
VALUE "ProductVersion", "(7.0NG.769(Build 230323))"
|
VALUE "ProductVersion", "(7.0NG.769(Build 230324))"
|
||||||
VALUE "FileVersion", "1.0.0.0"
|
VALUE "FileVersion", "1.0.0.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-console
|
package: pandorafms-console
|
||||||
Version: 7.0NG.769-230323
|
Version: 7.0NG.769-230324
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.769-230323"
|
pandora_version="7.0NG.769-230324"
|
||||||
|
|
||||||
package_pear=0
|
package_pear=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -1,5 +1,14 @@
|
|||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
|
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `ssh_status` TINYINT UNSIGNED DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `db_status` TINYINT UNSIGNED DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `replication_status` TINYINT UNSIGNED DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `replication_delay` BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `master` TINYINT UNSIGNED DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `utimestamp` BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `mysql_version` VARCHAR(10) DEFAULT '';
|
||||||
|
ALTER TABLE `tdatabase` ADD COLUMN `pandora_version` VARCHAR(10) DEFAULT '';
|
||||||
|
|
||||||
UPDATE tconfig_os SET `icon_name` = 'linux@os.svg' WHERE `id_os` = 1;
|
UPDATE tconfig_os SET `icon_name` = 'linux@os.svg' WHERE `id_os` = 1;
|
||||||
UPDATE tconfig_os SET `icon_name` = 'solaris@os.svg' WHERE `id_os` = 2;
|
UPDATE tconfig_os SET `icon_name` = 'solaris@os.svg' WHERE `id_os` = 2;
|
||||||
UPDATE tconfig_os SET `icon_name` = 'aix@os.svg' WHERE `id_os` = 3;
|
UPDATE tconfig_os SET `icon_name` = 'aix@os.svg' WHERE `id_os` = 3;
|
||||||
@ -166,4 +175,6 @@ CREATE TABLE IF NOT EXISTS `tfavmenu_user` (
|
|||||||
`section` VARCHAR(255) NOT NULL,
|
`section` VARCHAR(255) NOT NULL,
|
||||||
PRIMARY KEY (`id`));
|
PRIMARY KEY (`id`));
|
||||||
|
|
||||||
|
INSERT INTO `tconfig` (`token`, `value`) VALUES ('legacy_database_ha', 1);
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -115,6 +115,7 @@ $exception_condition_value = 10;
|
|||||||
$modulegroup = 0;
|
$modulegroup = 0;
|
||||||
$period = SECONDS_1DAY;
|
$period = SECONDS_1DAY;
|
||||||
$search = '';
|
$search = '';
|
||||||
|
$full_text = 0;
|
||||||
$log_number = 1000;
|
$log_number = 1000;
|
||||||
// Added support for projection graphs.
|
// Added support for projection graphs.
|
||||||
$period_pg = SECONDS_5DAY;
|
$period_pg = SECONDS_5DAY;
|
||||||
@ -316,6 +317,7 @@ switch ($action) {
|
|||||||
$source = $es['source'];
|
$source = $es['source'];
|
||||||
$search = $es['search'];
|
$search = $es['search'];
|
||||||
$log_number = empty($es['log_number']) ? $log_number : $es['log_number'];
|
$log_number = empty($es['log_number']) ? $log_number : $es['log_number'];
|
||||||
|
$full_text = empty($es['full_text']) ? 0 : $es['full_text'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'simple_graph':
|
case 'simple_graph':
|
||||||
@ -1313,6 +1315,14 @@ $class = 'databox filters';
|
|||||||
<td >
|
<td >
|
||||||
<?php
|
<?php
|
||||||
html_print_input_text('search', $search, '', 40, 100);
|
html_print_input_text('search', $search, '', 40, 100);
|
||||||
|
html_print_checkbox(
|
||||||
|
'full_text',
|
||||||
|
1,
|
||||||
|
$full_text,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
ui_print_help_tip(__('Full context'), false);
|
||||||
?>
|
?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -1597,11 +1597,13 @@ switch ($action) {
|
|||||||
$agents_to_report = get_parameter('id_agents3');
|
$agents_to_report = get_parameter('id_agents3');
|
||||||
$source = get_parameter('source', '');
|
$source = get_parameter('source', '');
|
||||||
$search = get_parameter('search', '');
|
$search = get_parameter('search', '');
|
||||||
|
$full_text = (integer) get_parameter('full_text', 0);
|
||||||
$log_number = get_parameter('log_number', '');
|
$log_number = get_parameter('log_number', '');
|
||||||
|
|
||||||
$es['source'] = $source;
|
$es['source'] = $source;
|
||||||
$es['id_agents'] = $agents_to_report;
|
$es['id_agents'] = $agents_to_report;
|
||||||
$es['search'] = $search;
|
$es['search'] = $search;
|
||||||
|
$es['full_text'] = $full_text;
|
||||||
$es['log_number'] = $log_number;
|
$es['log_number'] = $log_number;
|
||||||
|
|
||||||
$values['external_source'] = json_encode($es);
|
$values['external_source'] = json_encode($es);
|
||||||
@ -2542,11 +2544,13 @@ switch ($action) {
|
|||||||
$agents_to_report = get_parameter('id_agents3');
|
$agents_to_report = get_parameter('id_agents3');
|
||||||
$source = get_parameter('source', '');
|
$source = get_parameter('source', '');
|
||||||
$search = get_parameter('search', '');
|
$search = get_parameter('search', '');
|
||||||
|
$full_text = (integer) get_parameter('full_text', 0);
|
||||||
$log_number = get_parameter('log_number', '');
|
$log_number = get_parameter('log_number', '');
|
||||||
|
|
||||||
$es['source'] = $source;
|
$es['source'] = $source;
|
||||||
$es['id_agents'] = $agents_to_report;
|
$es['id_agents'] = $agents_to_report;
|
||||||
$es['search'] = $search;
|
$es['search'] = $search;
|
||||||
|
$es['full_text'] = $full_text;
|
||||||
$es['log_number'] = $log_number;
|
$es['log_number'] = $log_number;
|
||||||
|
|
||||||
$values['external_source'] = json_encode($es);
|
$values['external_source'] = json_encode($es);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* Pandora build version and version
|
* Pandora build version and version
|
||||||
*/
|
*/
|
||||||
$build_version = 'PC230323';
|
$build_version = 'PC230324';
|
||||||
$pandora_version = 'v7.0NG.769';
|
$pandora_version = 'v7.0NG.769';
|
||||||
|
|
||||||
// Do not overwrite default timezone set if defined.
|
// Do not overwrite default timezone set if defined.
|
||||||
@ -153,6 +153,19 @@ if (! defined('ENTERPRISE_DIR')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
db_select_engine();
|
db_select_engine();
|
||||||
|
|
||||||
|
if (empty($config['remote_config']) === false
|
||||||
|
&& file_exists($config['remote_config'].'/conf/'.PANDORA_HA_FILE)
|
||||||
|
&& filesize($config['remote_config'].'/conf/'.PANDORA_HA_FILE) > 0
|
||||||
|
) {
|
||||||
|
$data = file_get_contents($config['remote_config'].'/conf/'.PANDORA_HA_FILE);
|
||||||
|
if (empty($data) === false) {
|
||||||
|
$ip_list = explode(',', $data);
|
||||||
|
// Connects to the first pandora_ha_dbs.conf database.
|
||||||
|
$config['dbhost'] = trim($ip_list[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$config['dbconnection'] = db_connect();
|
$config['dbconnection'] = db_connect();
|
||||||
|
|
||||||
require_once $ownDir.'functions_config.php';
|
require_once $ownDir.'functions_config.php';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants definitions.
|
* Constants definitions.
|
||||||
*
|
*
|
||||||
@ -703,6 +704,11 @@ define('HA_ACTION_ENABLE', 6);
|
|||||||
define('HA_ACTION_CLEANUP', 7);
|
define('HA_ACTION_CLEANUP', 7);
|
||||||
define('HA_ACTION_RESYNC', 8);
|
define('HA_ACTION_RESYNC', 8);
|
||||||
|
|
||||||
|
define('HA_RESYNC', 1);
|
||||||
|
define('HA_DISABLE', 5);
|
||||||
|
define('HA_ENABLE', 6);
|
||||||
|
|
||||||
|
|
||||||
define('HA_UNINITIALIZED', 0);
|
define('HA_UNINITIALIZED', 0);
|
||||||
define('HA_ONLINE', 1);
|
define('HA_ONLINE', 1);
|
||||||
define('HA_PENDING', 2);
|
define('HA_PENDING', 2);
|
||||||
@ -864,6 +870,8 @@ define(
|
|||||||
|
|
||||||
// Pandora FMS Enterprise license.
|
// Pandora FMS Enterprise license.
|
||||||
define('LICENSE_FILE', 'customer_key');
|
define('LICENSE_FILE', 'customer_key');
|
||||||
|
// Pandora HA database list.
|
||||||
|
define('PANDORA_HA_FILE', 'pandora_ha_hosts.conf');
|
||||||
|
|
||||||
// Home screen values for user definition.
|
// Home screen values for user definition.
|
||||||
define('HOME_SCREEN_DEFAULT', 'default');
|
define('HOME_SCREEN_DEFAULT', 'default');
|
||||||
|
@ -456,6 +456,10 @@ function config_update_config()
|
|||||||
$error_update[] = __('Enable Update Manager');
|
$error_update[] = __('Enable Update Manager');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config_update_value('legacy_database_ha', get_parameter('legacy_database_ha'), true) === false) {
|
||||||
|
$error_update[] = __('Legacy database HA');
|
||||||
|
}
|
||||||
|
|
||||||
if (config_update_value('ipam_ocuppied_critical_treshold', get_parameter('ipam_ocuppied_critical_treshold'), true) === false) {
|
if (config_update_value('ipam_ocuppied_critical_treshold', get_parameter('ipam_ocuppied_critical_treshold'), true) === false) {
|
||||||
$error_update[] = __('Ipam Ocuppied Manager Critical');
|
$error_update[] = __('Ipam Ocuppied Manager Critical');
|
||||||
}
|
}
|
||||||
@ -2237,6 +2241,10 @@ function config_process_config()
|
|||||||
config_update_value('enable_update_manager', 1);
|
config_update_value('enable_update_manager', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isset($config['legacy_database_ha'])) {
|
||||||
|
config_update_value('legacy_database_ha', 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!isset($config['disabled_newsletter'])) {
|
if (!isset($config['disabled_newsletter'])) {
|
||||||
config_update_value('disabled_newsletter', 0);
|
config_update_value('disabled_newsletter', 0);
|
||||||
}
|
}
|
||||||
|
@ -3261,6 +3261,7 @@ function html_print_input_image($name, $src, $value, $style='', $return=false, $
|
|||||||
'onkeyup',
|
'onkeyup',
|
||||||
'class',
|
'class',
|
||||||
'form',
|
'form',
|
||||||
|
'disabled',
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($attrs as $attribute) {
|
foreach ($attrs as $attribute) {
|
||||||
|
@ -11582,6 +11582,12 @@ div[role="dialog"] {
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.database_background_state {
|
||||||
|
mask: url(../../images/database@groups.svg) no-repeat center / contain;
|
||||||
|
-webkit-mask: url(../../images/database@groups.svg) no-repeat center / contain;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
.filter-list-adv .wizard li {
|
.filter-list-adv .wizard li {
|
||||||
display: grid;
|
display: grid;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@
|
|||||||
<div style='padding-bottom: 50px'>
|
<div style='padding-bottom: 50px'>
|
||||||
<?php
|
<?php
|
||||||
$version = '7.0NG.769';
|
$version = '7.0NG.769';
|
||||||
$build = '230323';
|
$build = '230324';
|
||||||
$banner = "v$version Build $build";
|
$banner = "v$version Build $build";
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name apache2
|
%define httpd_name apache2
|
||||||
|
@ -2634,9 +2634,17 @@ CREATE TABLE IF NOT EXISTS `tdatabase` (
|
|||||||
`action` TINYINT UNSIGNED DEFAULT 0,
|
`action` TINYINT UNSIGNED DEFAULT 0,
|
||||||
`ssh_key` TEXT,
|
`ssh_key` TEXT,
|
||||||
`ssh_pubkey` TEXT,
|
`ssh_pubkey` TEXT,
|
||||||
|
`ssh_status` TINYINT UNSIGNED DEFAULT 0,
|
||||||
`last_error` TEXT,
|
`last_error` TEXT,
|
||||||
|
`db_status` TINYINT UNSIGNED DEFAULT 0,
|
||||||
|
`replication_status` TINYINT UNSIGNED DEFAULT 0,
|
||||||
|
`replication_delay` BIGINT DEFAULT 0,
|
||||||
|
`master` TINYINT UNSIGNED DEFAULT 0,
|
||||||
|
`utimestamp` BIGINT DEFAULT 0,
|
||||||
|
`mysql_version` VARCHAR(10) DEFAULT '',
|
||||||
|
`pandora_version` VARCHAR(10) DEFAULT '',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4 ;
|
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- Table `twidget`
|
-- Table `twidget`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-server
|
package: pandorafms-server
|
||||||
Version: 7.0NG.769-230323
|
Version: 7.0NG.769-230324
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
pandora_version="7.0NG.769-230323"
|
pandora_version="7.0NG.769-230324"
|
||||||
|
|
||||||
package_cpan=0
|
package_cpan=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -702,8 +702,35 @@ ncm_ssh_utility /usr/share/pandora_server/util/ncm_ssh_extension
|
|||||||
# Pandora FMS Daemon Watchdog execution interval in seconds (PANDORA FMS ENTERPRISE ONLY).
|
# Pandora FMS Daemon Watchdog execution interval in seconds (PANDORA FMS ENTERPRISE ONLY).
|
||||||
ha_interval 30
|
ha_interval 30
|
||||||
|
|
||||||
# Pandora FMS Daemon Watchdog monitoring interval in seconds. Must be a multiple of ha_interval (PANDORA FMS ENTERPRISE ONLY).
|
# HA operation mode. For backward compatibility with pacemaker. Do not change this value (PANDORA FMS ENTERPRISE ONLY).
|
||||||
ha_monitoring_interval 60
|
ha_mode pandora
|
||||||
|
|
||||||
|
# Comma separated list of HA host IPs or FQDNs (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_hosts 172.16.0.8,172.168.0.16
|
||||||
|
|
||||||
|
# Database username for pandora_ha (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_dbuser pandora
|
||||||
|
|
||||||
|
# Database password for pandora_ha (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_dbpass pandora
|
||||||
|
|
||||||
|
# SSH username for pandora_ha (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_sshuser pandora
|
||||||
|
|
||||||
|
# SSH port for pandora_ha (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_sshport 22
|
||||||
|
|
||||||
|
# Absolute path to the HA slave resync script (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#ha_resync /usr/share/pandora_server/util/pandora_ha_resync_slave.sh
|
||||||
|
|
||||||
|
# Database username for HA replication (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#repl_dbuser pandora
|
||||||
|
|
||||||
|
# Database password for HA replication (PANDORA FMS ENTERPRISE ONLY).
|
||||||
|
#repl_dbpass pandora
|
||||||
|
|
||||||
|
# Number of retries for connection attempts to HA databases.
|
||||||
|
#ha_connect_retries 2
|
||||||
|
|
||||||
# Enable (1) or disable (0) Pandora FMS Alert Server.
|
# Enable (1) or disable (0) Pandora FMS Alert Server.
|
||||||
alertserver 0
|
alertserver 0
|
||||||
|
@ -46,7 +46,7 @@ our @EXPORT = qw(
|
|||||||
|
|
||||||
# version: Defines actual version of Pandora Server for this module only
|
# version: Defines actual version of Pandora Server for this module only
|
||||||
my $pandora_version = "7.0NG.769";
|
my $pandora_version = "7.0NG.769";
|
||||||
my $pandora_build = "230323";
|
my $pandora_build = "230324";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
# Setup hash
|
# Setup hash
|
||||||
@ -553,6 +553,25 @@ sub pandora_load_config {
|
|||||||
|
|
||||||
$pa_config->{"unknown_block_size"} = 1000; # 7.0.769
|
$pa_config->{"unknown_block_size"} = 1000; # 7.0.769
|
||||||
|
|
||||||
|
$pa_config->{"ha_mode"} = "pacemaker"; # 7.0.770
|
||||||
|
$pa_config->{"ha_file"} = undef; # 7.0.770
|
||||||
|
$pa_config->{"ha_hosts_file"} = '/var/spool/pandora/data_in/conf/pandora_ha_hosts.conf'; # 7.0.770
|
||||||
|
$pa_config->{"ha_connect_retries"} = 2; # 7.0.770
|
||||||
|
$pa_config->{"ha_connect_delay"} = 1; # 7.0.770
|
||||||
|
$pa_config->{"ha_dbuser"} = undef; # 7.0.770
|
||||||
|
$pa_config->{"ha_dbpass"} = undef; # 7.0.770
|
||||||
|
$pa_config->{"ha_hosts"} = undef; # 7.0.770
|
||||||
|
$pa_config->{"ha_resync"} = '/usr/share/pandora_server/util/pandora_ha_resync_slave.sh'; # 7.0.770
|
||||||
|
$pa_config->{"ha_resync_log"} = '/var/log/pandora/pandora_ha_resync.log'; # 7.0.770
|
||||||
|
$pa_config->{"ha_sshuser"} = 'pandora'; # 7.0.770
|
||||||
|
$pa_config->{"ha_sshport"} = 22; # 7.0.770
|
||||||
|
|
||||||
|
$pa_config->{"ha_max_splitbrain_retries"} = 2;
|
||||||
|
$pa_config->{"ha_resync_sleep"} = 10;
|
||||||
|
|
||||||
|
$pa_config->{"repl_dbuser"} = undef; # 7.0.770
|
||||||
|
$pa_config->{"repl_dbpass"} = undef; # 7.0.770
|
||||||
|
|
||||||
# Check for UID0
|
# Check for UID0
|
||||||
if ($pa_config->{"quiet"} != 0){
|
if ($pa_config->{"quiet"} != 0){
|
||||||
if ($> == 0){
|
if ($> == 0){
|
||||||
@ -1283,9 +1302,36 @@ sub pandora_load_config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Pandora HA extra
|
# Pandora HA extra
|
||||||
|
elsif ($parametro =~ m/^ha_mode\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_mode'} = clean_blank($1);
|
||||||
|
}
|
||||||
elsif ($parametro =~ m/^ha_file\s(.*)/i) {
|
elsif ($parametro =~ m/^ha_file\s(.*)/i) {
|
||||||
$pa_config->{'ha_file'} = clean_blank($1);
|
$pa_config->{'ha_file'} = clean_blank($1);
|
||||||
}
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_hosts_file\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_hosts_file'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_dbuser\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_dbuser'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_dbpass\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_dbpass'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_sshuser\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_sshuser'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_sshport\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_sshport'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_hosts\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_hosts'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_resync\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_resync'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_resync_log\s(.*)/i) {
|
||||||
|
$pa_config->{'ha_resync_log'} = clean_blank($1);
|
||||||
|
}
|
||||||
elsif ($parametro =~ m/^ha_pid_file\s(.*)/i) {
|
elsif ($parametro =~ m/^ha_pid_file\s(.*)/i) {
|
||||||
$pa_config->{'ha_pid_file'} = clean_blank($1);
|
$pa_config->{'ha_pid_file'} = clean_blank($1);
|
||||||
}
|
}
|
||||||
@ -1313,9 +1359,42 @@ sub pandora_load_config {
|
|||||||
elsif ($parametro =~ m/^dataserver_smart_queue\s([0-1])/i) {
|
elsif ($parametro =~ m/^dataserver_smart_queue\s([0-1])/i) {
|
||||||
$pa_config->{'dataserver_smart_queue'} = clean_blank($1);
|
$pa_config->{'dataserver_smart_queue'} = clean_blank($1);
|
||||||
}
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_connect_retries\s+([0-9]*)/i) {
|
||||||
|
$pa_config->{'ha_connect_retries'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^ha_connect_delay\s+([0-9]*)/i) {
|
||||||
|
$pa_config->{'ha_connect_delay'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^repl_dbuser\s(.*)/i) {
|
||||||
|
$pa_config->{'repl_dbuser'} = clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^repl_dbpass\s(.*)/i) {
|
||||||
|
$pa_config->{'repl_dbpass'} = clean_blank($1);
|
||||||
|
}
|
||||||
} # end of loop for parameter #
|
} # end of loop for parameter #
|
||||||
|
|
||||||
|
# The DB host was overridden by pandora_ha.
|
||||||
|
if (-f $pa_config->{'ha_hosts_file'}) {
|
||||||
|
eval {
|
||||||
|
open(my $fh, '<', $pa_config->{'ha_hosts_file'}) or return;
|
||||||
|
my $dbhost = <$fh>;
|
||||||
|
chomp($dbhost);
|
||||||
|
if (defined($dbhost) && $dbhost ne '') {
|
||||||
|
$pa_config->{'dbhost'} = $dbhost;
|
||||||
|
}
|
||||||
|
close($fh);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
print " [*] DB Host is " . $pa_config->{'dbhost'} . "\n";
|
||||||
|
|
||||||
|
# ha_dbuser and ha_dbpass default to dbuser and dbpass respectively.
|
||||||
|
$pa_config->{'ha_dbuser'} = $pa_config->{'dbuser'} unless defined($pa_config->{'ha_dbuser'});
|
||||||
|
$pa_config->{'ha_dbpass'} = $pa_config->{'dbpass'} unless defined($pa_config->{'ha_dbpass'});
|
||||||
|
|
||||||
|
# repl_dbuser and repl_dbpass default to dbuser and dbpass respectively.
|
||||||
|
$pa_config->{'repl_dbuser'} = $pa_config->{'dbuser'} unless defined($pa_config->{'repl_dbuser'});
|
||||||
|
$pa_config->{'repl_dbpass'} = $pa_config->{'dbpass'} unless defined($pa_config->{'repl_dbpass'});
|
||||||
|
|
||||||
# Generate the encryption key after reading the passphrase.
|
# Generate the encryption key after reading the passphrase.
|
||||||
$pa_config->{"encryption_key"} = enterprise_hook('pandora_get_encryption_key', [$pa_config, $pa_config->{"encryption_passphrase"}]);
|
$pa_config->{"encryption_key"} = enterprise_hook('pandora_get_encryption_key', [$pa_config, $pa_config->{"encryption_passphrase"}]);
|
||||||
|
|
||||||
|
@ -54,6 +54,8 @@ Exported Functions:
|
|||||||
|
|
||||||
=item * C<pandora_event>
|
=item * C<pandora_event>
|
||||||
|
|
||||||
|
=item * C<pandora_timed_event>
|
||||||
|
|
||||||
=item * C<pandora_execute_alert>
|
=item * C<pandora_execute_alert>
|
||||||
|
|
||||||
=item * C<pandora_execute_action>
|
=item * C<pandora_execute_action>
|
||||||
@ -194,6 +196,7 @@ our @EXPORT = qw(
|
|||||||
pandora_evaluate_alert
|
pandora_evaluate_alert
|
||||||
pandora_evaluate_snmp_alerts
|
pandora_evaluate_snmp_alerts
|
||||||
pandora_event
|
pandora_event
|
||||||
|
pandora_timed_event
|
||||||
pandora_extended_event
|
pandora_extended_event
|
||||||
pandora_execute_alert
|
pandora_execute_alert
|
||||||
pandora_execute_action
|
pandora_execute_action
|
||||||
@ -3996,7 +3999,8 @@ Generate an event.
|
|||||||
|
|
||||||
=cut
|
=cut
|
||||||
##########################################################################
|
##########################################################################
|
||||||
sub pandora_event ($$$$$$$$$$;$$$$$$$$$$$$) {
|
#sub pandora_event ($$$$$$$$$$;$$$$$$$$$$$$) {
|
||||||
|
sub pandora_event {
|
||||||
my ($pa_config, $evento, $id_grupo, $id_agente, $severity,
|
my ($pa_config, $evento, $id_grupo, $id_agente, $severity,
|
||||||
$id_alert_am, $id_agentmodule, $event_type, $event_status, $dbh,
|
$id_alert_am, $id_agentmodule, $event_type, $event_status, $dbh,
|
||||||
$source, $user_name, $comment, $id_extra, $tags,
|
$source, $user_name, $comment, $id_extra, $tags,
|
||||||
@ -4113,6 +4117,28 @@ sub pandora_event ($$$$$$$$$$;$$$$$$$$$$$$) {
|
|||||||
return $event_id;
|
return $event_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
=head2 C<< pandora_timed_event (I<$time_limit>, I<@event>) >>
|
||||||
|
|
||||||
|
Generate an event, but no more than one every $time_limit seconds.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
##########################################################################
|
||||||
|
my %TIMED_EVENTS :shared;
|
||||||
|
sub pandora_timed_event ($@) {
|
||||||
|
my ($time_limit, @event) = @_;
|
||||||
|
|
||||||
|
# Match events by message.
|
||||||
|
my $event_msg = $event[1];
|
||||||
|
|
||||||
|
# Do not generate more than one event every $time_limit seconds.
|
||||||
|
my $now = time();
|
||||||
|
if (!defined($TIMED_EVENTS{$event_msg}) || $TIMED_EVENTS{$event_msg} + $time_limit < $now) {
|
||||||
|
$TIMED_EVENTS{$event_msg} = $now;
|
||||||
|
pandora_event(@event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
=head2 C<< pandora_extended_event (I<$pa_config>, I<$dbh>, I<$event_id>, I<$description>) >>
|
=head2 C<< pandora_extended_event (I<$pa_config>, I<$dbh>, I<$event_id>, I<$description>) >>
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ our @ISA = qw(Exporter);
|
|||||||
|
|
||||||
# version: Defines actual version of Pandora Server for this module only
|
# version: Defines actual version of Pandora Server for this module only
|
||||||
my $pandora_version = "7.0NG.769";
|
my $pandora_version = "7.0NG.769";
|
||||||
my $pandora_build = "230323";
|
my $pandora_build = "230324";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
%global __os_install_post %{nil}
|
%global __os_install_post %{nil}
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.769
|
%define version 7.0NG.769
|
||||||
%define release 230323
|
%define release 230324
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.769"
|
PI_VERSION="7.0NG.769"
|
||||||
PI_BUILD="230323"
|
PI_BUILD="230324"
|
||||||
|
|
||||||
MODE=$1
|
MODE=$1
|
||||||
if [ $# -gt 1 ]; then
|
if [ $# -gt 1 ]; then
|
||||||
|
@ -35,7 +35,7 @@ use PandoraFMS::Config;
|
|||||||
use PandoraFMS::DB;
|
use PandoraFMS::DB;
|
||||||
|
|
||||||
# version: define current version
|
# version: define current version
|
||||||
my $version = "7.0NG.769 Build 230323";
|
my $version = "7.0NG.769 Build 230324";
|
||||||
|
|
||||||
# Pandora server configuration
|
# Pandora server configuration
|
||||||
my %conf;
|
my %conf;
|
||||||
@ -629,6 +629,21 @@ sub pandora_load_config_pdb ($) {
|
|||||||
$conf->{'errorlogfile'} = $conf->{'errorlog_file'};
|
$conf->{'errorlogfile'} = $conf->{'errorlog_file'};
|
||||||
$conf->{'errorlogfile'} = "/var/log/pandora_server.error" unless defined ($conf->{'errorlogfile'});
|
$conf->{'errorlogfile'} = "/var/log/pandora_server.error" unless defined ($conf->{'errorlogfile'});
|
||||||
|
|
||||||
|
# The DB host was overridden by pandora_ha.
|
||||||
|
$conf->{'ha_hosts_file'} = '/var/spool/pandora/data_in/conf/pandora_ha_hosts.conf' unless defined($conf->{'ha_hosts_file'});
|
||||||
|
if (-f $conf->{'ha_hosts_file'}) {
|
||||||
|
eval {
|
||||||
|
open(my $fh, '<', $conf->{'ha_hosts_file'}) or return;
|
||||||
|
my $dbhost = <$fh>;
|
||||||
|
chomp($dbhost);
|
||||||
|
if (defined($dbhost) && $dbhost ne '') {
|
||||||
|
$conf->{'dbhost'} = $dbhost;
|
||||||
|
}
|
||||||
|
close($fh);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
print " [*] DB Host is " . $conf->{'dbhost'} . "\n";
|
||||||
|
|
||||||
# Read additional tokens from the DB
|
# Read additional tokens from the DB
|
||||||
my $dbh = db_connect ($conf->{'dbengine'}, $conf->{'dbname'}, $conf->{'dbhost'}, $conf->{'dbport'}, $conf->{'dbuser'}, $conf->{'dbpass'});
|
my $dbh = db_connect ($conf->{'dbengine'}, $conf->{'dbname'}, $conf->{'dbhost'}, $conf->{'dbport'}, $conf->{'dbuser'}, $conf->{'dbpass'});
|
||||||
|
|
||||||
|
@ -34,15 +34,27 @@ my %Opts;
|
|||||||
# Run as a daemon.
|
# Run as a daemon.
|
||||||
my $DAEMON = 0;
|
my $DAEMON = 0;
|
||||||
|
|
||||||
|
# Timeout for the HA DB lock.
|
||||||
|
my $LOCK_TIMEOUT = 300;
|
||||||
|
|
||||||
# Avoid retry old processing orders.
|
# Avoid retry old processing orders.
|
||||||
my $First_Cleanup = 1;
|
my $First_Cleanup = 1;
|
||||||
|
|
||||||
|
# List of known HA DB hosts.
|
||||||
|
my @HA_DB_Hosts;
|
||||||
|
|
||||||
|
# Current master node.
|
||||||
|
my $DB_Host = '';
|
||||||
|
|
||||||
# PID file.
|
# PID file.
|
||||||
my $PID_FILE = '/var/run/pandora_ha.pid';
|
my $PID_FILE = '/var/run/pandora_ha.pid';
|
||||||
|
|
||||||
# Server service handler.
|
# Server service handler.
|
||||||
my $Pandora_Service;
|
my $Pandora_Service;
|
||||||
|
|
||||||
|
# Restart the Pandora FMS Server.
|
||||||
|
my $Restart = 0;
|
||||||
|
|
||||||
# Controlled exit
|
# Controlled exit
|
||||||
my $Running = 0;
|
my $Running = 0;
|
||||||
|
|
||||||
@ -55,6 +67,10 @@ sub log_message($$$;$) {
|
|||||||
my $level = $verbosity_level;
|
my $level = $verbosity_level;
|
||||||
$level = 5 unless defined($level);
|
$level = 5 unless defined($level);
|
||||||
|
|
||||||
|
if ($source eq 'DEBUG' && !defined($ENV{'PANDORA_DEBUG'})) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ref($conf) eq "HASH") {
|
if (ref($conf) eq "HASH") {
|
||||||
logger($conf, 'HA (' . $source . ') ' . "$message", $level);
|
logger($conf, 'HA (' . $source . ') ' . "$message", $level);
|
||||||
}
|
}
|
||||||
@ -169,6 +185,17 @@ sub ha_keep_pandora_running($$) {
|
|||||||
my ($conf, $dbh) = @_;
|
my ($conf, $dbh) = @_;
|
||||||
my $OSNAME = $^O;
|
my $OSNAME = $^O;
|
||||||
my $control_command;
|
my $control_command;
|
||||||
|
$Pandora_Service = $conf->{'pandora_service_cmd'};
|
||||||
|
|
||||||
|
# A restart was requested.
|
||||||
|
if ($Restart == 1) {
|
||||||
|
$Restart = 0;
|
||||||
|
|
||||||
|
log_message($conf, 'LOG', 'Restarting Pandora service');
|
||||||
|
$control_command = $^O eq "freebsd" ? "restart_server" : 'restart-server';
|
||||||
|
`$Pandora_Service $control_command $ENV{'PANDORA_DBHOST'} 2>/dev/null`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# Check if all servers are running
|
# Check if all servers are running
|
||||||
# Restart if crashed or keep interval is over.
|
# Restart if crashed or keep interval is over.
|
||||||
@ -185,8 +212,6 @@ sub ha_keep_pandora_running($$) {
|
|||||||
|
|
||||||
my $nservers = get_db_value ($dbh, 'SELECT count(*) FROM tserver where name = ?', $conf->{'servername'});
|
my $nservers = get_db_value ($dbh, 'SELECT count(*) FROM tserver where name = ?', $conf->{'servername'});
|
||||||
|
|
||||||
$Pandora_Service = $conf->{'pandora_service_cmd'};
|
|
||||||
|
|
||||||
# Check if service is running
|
# Check if service is running
|
||||||
$control_command = "status-server";
|
$control_command = "status-server";
|
||||||
if ($OSNAME eq "freebsd") {
|
if ($OSNAME eq "freebsd") {
|
||||||
@ -308,6 +333,37 @@ sub ha_update_server($$) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Dump the list of known databases to disk.
|
||||||
|
################################################################################
|
||||||
|
sub ha_dump_databases($) {
|
||||||
|
my ($conf) = @_;
|
||||||
|
|
||||||
|
# HA is not configured.
|
||||||
|
return unless defined($conf->{'ha_hosts'});
|
||||||
|
|
||||||
|
eval {
|
||||||
|
open(my $fh, '>', $conf->{'ha_hosts_file'});
|
||||||
|
print $fh $DB_Host; # The console only needs the master DB.
|
||||||
|
close($fh);
|
||||||
|
log_message($conf, 'DEBUG', "Dumped master database $DB_Host to disk");
|
||||||
|
};
|
||||||
|
log_message($conf, 'WARNING', $@) if ($@);
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Read the list of known databases from disk.
|
||||||
|
################################################################################
|
||||||
|
sub ha_load_databases($) {
|
||||||
|
my ($conf) = @_;
|
||||||
|
|
||||||
|
# HA is not configured.
|
||||||
|
return unless defined($conf->{'ha_hosts'});
|
||||||
|
|
||||||
|
@HA_DB_Hosts = grep { !/^#/ } map { s/^\s+|\s+$//g; $_; } split(/,/, $conf->{'ha_hosts'});
|
||||||
|
log_message($conf, 'DEBUG', "Loaded databases from disk (@HA_DB_Hosts)");
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Connect to ha database, falling back to direct connection to db.
|
# Connect to ha database, falling back to direct connection to db.
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -324,9 +380,111 @@ sub ha_database_connect($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Main
|
# Connect to ha database, falling back to direct connection to db.
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub ha_main($) {
|
sub ha_database_connect_pandora($) {
|
||||||
|
my $conf = shift;
|
||||||
|
my $dbhost = $conf->{'dbhost'};
|
||||||
|
|
||||||
|
# Load the list of HA databases.
|
||||||
|
ha_load_databases($conf);
|
||||||
|
|
||||||
|
# Select a new master database.
|
||||||
|
my ($dbh, $utimestamp, $max_utimestamp) = (undef, undef, -1);
|
||||||
|
foreach my $ha_dbhost (@HA_DB_Hosts) {
|
||||||
|
|
||||||
|
# Retry each database ha_connect_retries times.
|
||||||
|
for (my $i = 0; $i < $conf->{'ha_connect_retries'}; $i++) {
|
||||||
|
eval {
|
||||||
|
log_message($conf, 'DEBUG', "Trying database $ha_dbhost...");
|
||||||
|
$dbh= db_connect('mysql',
|
||||||
|
$conf->{'dbname'},
|
||||||
|
$ha_dbhost,
|
||||||
|
$conf->{'dbport'},
|
||||||
|
$conf->{'ha_dbuser'},
|
||||||
|
$conf->{'ha_dbpass'});
|
||||||
|
log_message($conf, 'DEBUG', "Connected to database $ha_dbhost");
|
||||||
|
};
|
||||||
|
log_message($conf, 'WARNING', $@) if ($@);
|
||||||
|
|
||||||
|
# Connection successful.
|
||||||
|
last if defined($dbh);
|
||||||
|
|
||||||
|
# Wait for the next retry.
|
||||||
|
sleep($conf->{'ha_connect_delay'});
|
||||||
|
}
|
||||||
|
|
||||||
|
# No luck. Try the next database.
|
||||||
|
next unless defined($dbh);
|
||||||
|
|
||||||
|
eval {
|
||||||
|
# Get the most recent utimestamp from the database.
|
||||||
|
$utimestamp = get_db_value($dbh, 'SELECT UNIX_TIMESTAMP(MAX(keepalive)) FROM tserver');
|
||||||
|
db_disconnect($dbh);
|
||||||
|
|
||||||
|
# Did we find a more recent database?
|
||||||
|
$utimestamp = 0 unless defined($utimestamp);
|
||||||
|
if ($utimestamp > $max_utimestamp) {
|
||||||
|
$dbhost = $ha_dbhost;
|
||||||
|
$max_utimestamp = $utimestamp;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
log_message($conf, 'WARNING', $@) if ($@);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Return a connection to the selected master.
|
||||||
|
eval {
|
||||||
|
log_message($conf, 'DEBUG', "Connecting to selected master $dbhost...");
|
||||||
|
$dbh = db_connect('mysql',
|
||||||
|
$conf->{'dbname'},
|
||||||
|
$dbhost,
|
||||||
|
$conf->{'dbport'},
|
||||||
|
$conf->{'ha_dbuser'},
|
||||||
|
$conf->{'ha_dbpass'});
|
||||||
|
|
||||||
|
# Restart if a new master was selected.
|
||||||
|
if ($dbhost ne $DB_Host) {
|
||||||
|
log_message($conf, 'DEBUG', "Setting master database to $dbhost");
|
||||||
|
$DB_Host = $dbhost;
|
||||||
|
$Restart = 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
log_message($conf, 'WARNING', $@) if ($@);
|
||||||
|
|
||||||
|
# Save the list of HA databases.
|
||||||
|
ha_dump_databases($conf);
|
||||||
|
|
||||||
|
return $dbh;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Return 1 if the given DB is read-only, 0 otherwise.
|
||||||
|
###############################################################################
|
||||||
|
sub ha_read_only($$) {
|
||||||
|
my ($conf, $dbh) = @_;
|
||||||
|
|
||||||
|
my $read_only = get_db_value($dbh, 'SELECT @@global.read_only');
|
||||||
|
return 1 if (defined($read_only) && $read_only == 1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Restart the Pandora FMS Server.
|
||||||
|
###############################################################################
|
||||||
|
sub ha_restart_pandora($) {
|
||||||
|
my ($config) = @_;
|
||||||
|
|
||||||
|
my $control_command = $^O eq 'freebsd' ?
|
||||||
|
'restart_server' :
|
||||||
|
'restart-server';
|
||||||
|
`$config->{'pandora_service_cmd'} $control_command 2>/dev/null`;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Main (Pacemaker)
|
||||||
|
###############################################################################
|
||||||
|
sub ha_main_pacemaker($) {
|
||||||
my ($conf) = @_;
|
my ($conf) = @_;
|
||||||
|
|
||||||
# Set the PID file.
|
# Set the PID file.
|
||||||
@ -404,6 +562,100 @@ sub ha_main($) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Main (Pandora)
|
||||||
|
###############################################################################
|
||||||
|
sub ha_main_pandora($) {
|
||||||
|
my ($conf) = @_;
|
||||||
|
|
||||||
|
# Set the PID file.
|
||||||
|
$conf->{'PID'} = $PID_FILE;
|
||||||
|
|
||||||
|
# Log to a separate file if needed.
|
||||||
|
$conf->{'log_file'} = $conf->{'ha_log_file'} if defined ($conf->{'ha_log_file'});
|
||||||
|
|
||||||
|
# Run in the background.
|
||||||
|
ha_daemonize($conf) if ($DAEMON == 1);
|
||||||
|
|
||||||
|
# Main loop.
|
||||||
|
$Running = 1;
|
||||||
|
while ($Running) {
|
||||||
|
my $dbh = undef;
|
||||||
|
eval {
|
||||||
|
|
||||||
|
# Connect to a DB.
|
||||||
|
log_message($conf, 'LOG', "Looking for databases");
|
||||||
|
$dbh = ha_database_connect_pandora($conf);
|
||||||
|
if (!defined($dbh)) {
|
||||||
|
log_message($conf, 'LOG', 'No databases available');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make the DB host available to the Pandora FMS Server.
|
||||||
|
$ENV{'PANDORA_DBHOST'} = $DB_Host;
|
||||||
|
|
||||||
|
# Needed for the Enterprise module.
|
||||||
|
$conf->{'dbhost'} = $DB_Host;
|
||||||
|
|
||||||
|
# Enterprise capabilities need access to the DB.
|
||||||
|
eval {
|
||||||
|
local $SIG{__DIE__};
|
||||||
|
# Load enterprise components.
|
||||||
|
enterprise_load($conf, 1);
|
||||||
|
|
||||||
|
# Register Enterprise logger
|
||||||
|
enterprise_hook('pandoraha_logger', [\&log_message]);
|
||||||
|
log_message($conf, 'LOG', 'Enterprise capabilities loaded');
|
||||||
|
|
||||||
|
};
|
||||||
|
log_message($conf, 'LOG', "No enterprise capabilities: $@") if ($@);
|
||||||
|
|
||||||
|
log_message($conf, 'LOG', "Connected to database $DB_Host");
|
||||||
|
enterprise_hook('pandoraha_stop_slave', [$conf, $dbh]);
|
||||||
|
|
||||||
|
if (ha_read_only($conf, $dbh) == 1) {
|
||||||
|
log_message($conf, 'LOG', "The database is read-only.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if there are updates pending.
|
||||||
|
ha_update_server($conf, $dbh);
|
||||||
|
|
||||||
|
# Keep pandora running
|
||||||
|
ha_keep_pandora_running($conf, $dbh);
|
||||||
|
|
||||||
|
# Keep Tentacle running
|
||||||
|
ha_keep_tentacle_running($conf, $dbh);
|
||||||
|
|
||||||
|
# Are we the master?
|
||||||
|
pandora_set_master($conf, $dbh);
|
||||||
|
if (!pandora_is_master($conf)) {
|
||||||
|
log_message($conf, 'LOG', $conf->{'servername'} . ' is not the current master. Skipping DB-HA actions and monitoring.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check the status of slave databases.
|
||||||
|
enterprise_hook('pandoraha_check_slaves', [$conf, $dbh, $DB_Host, \@HA_DB_Hosts]);
|
||||||
|
|
||||||
|
# Update the status of HA databases.
|
||||||
|
enterprise_hook('pandoraha_update_dbs', [$conf, $dbh, $DB_Host, \@HA_DB_Hosts]);
|
||||||
|
|
||||||
|
# Execute resync actions.
|
||||||
|
enterprise_hook('pandoraha_resync_dbs', [$conf, $dbh, $DB_Host, \@HA_DB_Hosts]);
|
||||||
|
};
|
||||||
|
log_message($conf, 'WARNING', $@) if ($@);
|
||||||
|
|
||||||
|
# Cleanup.
|
||||||
|
eval {
|
||||||
|
db_disconnect($dbh) if defined($dbh);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Go to sleep.
|
||||||
|
log_message($conf, 'LOG', "Sleep.");
|
||||||
|
sleep($conf->{'ha_interval'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Stop pandora server
|
# Stop pandora server
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -429,7 +681,6 @@ END {
|
|||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$SIG{INT} = \&stop;
|
$SIG{INT} = \&stop;
|
||||||
$SIG{TERM} = \&stop;
|
$SIG{TERM} = \&stop;
|
||||||
|
|
||||||
@ -440,6 +691,10 @@ ha_init_pandora(\%Conf);
|
|||||||
ha_load_pandora_conf (\%Conf);
|
ha_load_pandora_conf (\%Conf);
|
||||||
|
|
||||||
# Main
|
# Main
|
||||||
ha_main(\%Conf);
|
if (defined($Conf{'ha_mode'}) && lc($Conf{'ha_mode'}) eq 'pandora') {
|
||||||
|
ha_main_pandora(\%Conf);
|
||||||
|
} else {
|
||||||
|
ha_main_pacemaker(\%Conf);
|
||||||
|
}
|
||||||
|
|
||||||
exit 0;
|
exit 0;
|
||||||
|
@ -36,7 +36,7 @@ use Encode::Locale;
|
|||||||
Encode::Locale::decode_argv;
|
Encode::Locale::decode_argv;
|
||||||
|
|
||||||
# version: define current version
|
# version: define current version
|
||||||
my $version = "7.0NG.769 Build 230323";
|
my $version = "7.0NG.769 Build 230324";
|
||||||
|
|
||||||
# save program name for logging
|
# save program name for logging
|
||||||
my $progname = basename($0);
|
my $progname = basename($0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user