preserve previous disabled or quiet condition when downtime is over

This commit is contained in:
alejandro.campos@artica.es 2023-08-07 17:03:25 +02:00
parent 8f04fbec4d
commit 68525f0a12
4 changed files with 100 additions and 11 deletions

View File

@ -70,6 +70,10 @@ ALTER TABLE `tlayout_template`
ADD COLUMN `grid_color` VARCHAR(45) NOT NULL DEFAULT '#cccccc' AFTER `maintenance_mode`,
ADD COLUMN `grid_size` VARCHAR(45) NOT NULL DEFAULT '10' AFTER `grid_color`;
ALTER TABLE `tagente_modulo` ADD COLUMN `quiet_by_downtime` TINYINT NOT NULL DEFAULT 0;
ALTER TABLE `tagente_modulo` ADD COLUMN `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0;
ALTER TABLE `talert_template_modules` ADD COLUMN `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0;
ALTER TABLE `tagente` ADD COLUMN `disabled_by_downtime` TINYINT NOT NULL DEFAULT 0;
DELETE FROM tconfig WHERE token = 'refr';

View File

@ -645,9 +645,13 @@ function planned_downtimes_stop($downtime)
foreach ($modules as $module) {
$result = db_process_sql_update(
'tagente_modulo',
['quiet' => 0],
[
'id_agente_modulo' => $module['id_agent_module'],
'quiet' => 0,
'quiet_by_downtime' => 0,
],
[
'quiet_by_downtime' => 1,
'id_agente_modulo' => $module['id_agent_module'],
]
);
@ -673,20 +677,31 @@ function planned_downtimes_stop($downtime)
$result = db_process_sql_update(
'tagente',
[
'disabled' => 0,
'update_module_count' => 1,
],
['id_agente' => $agent['id_agent']]
);
if ($result) {
$result_disabled = db_process_sql_update(
'tagente',
[
'disabled' => 0,
'disabled_by_downtime' => 0,
],
[
'disabled_by_downtime' => 1,
'id_agente' => $agent['id_agent'],
]
);
if ($result !== false && $result_disabled !== false) {
$count++;
}
}
break;
case 'disable_agent_modules':
$update_sql = sprintf(
/*$update_sql = sprintf(
'UPDATE tagente_modulo tam, tagente ta, tplanned_downtime_modules tpdm
SET tam.disabled = 0, ta.update_module_count = 1
WHERE tpdm.id_agent_module = tam.id_agente_modulo AND
@ -697,7 +712,46 @@ function planned_downtimes_stop($downtime)
db_process_sql($update_sql);
$count = '';
$count = '';*/
$agents = db_get_all_rows_filter(
'tplanned_downtime_agents',
['id_downtime' => $id_downtime]
);
if (empty($agents)) {
$agents = [];
}
$count = 0;
foreach ($agents as $agent) {
$modules = db_get_all_rows_filter(
'tplanned_downtime_modules',
[
'id_agent' => $agent['id_agent'],
'id_downtime' => $id_downtime,
]
);
if (empty($modules)) {
$modules = [];
}
foreach ($modules as $module) {
$result = db_process_sql_update(
'tagente_modulo',
[
'disabled' => 0,
'disabled_by_downtime' => 0,
],
[
'disabled_by_downtime' => 1,
'id_agente_modulo' => $module['id_agent_module'],
]
);
if ($result !== false) {
$count++;
}
}
}
break;
case 'disable_agents_alerts':
@ -722,13 +776,17 @@ function planned_downtimes_stop($downtime)
foreach ($modules as $module) {
$result = db_process_sql_update(
'talert_template_modules',
['disabled' => 0],
[
'id_agent_module' => $module['id_agente_modulo'],
'disabled' => 0,
'disabled_by_downtime' => 0,
],
[
'disabled_by_downtime' => 1,
'id_agent_module' => $module['id_agente_modulo'],
]
);
if ($result) {
if ($result !== false) {
$count++;
}
}

View File

@ -91,6 +91,7 @@ CREATE TABLE IF NOT EXISTS `tagente` (
`cps` INT NOT NULL DEFAULT 0,
`satellite_server` INT NOT NULL DEFAULT 0,
`fixed_ip` TINYINT NOT NULL DEFAULT 0,
`disabled_by_downtime` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (`id_agente`),
KEY `nombre` (`nombre`(255)),
KEY `direccion` (`direccion`),
@ -274,6 +275,8 @@ CREATE TABLE IF NOT EXISTS `tagente_modulo` (
`percentage_critical` TINYINT UNSIGNED DEFAULT 0,
`percentage_warning` TINYINT UNSIGNED DEFAULT 0,
`warning_time` INT UNSIGNED DEFAULT 0,
`quiet_by_downtime` TINYINT NOT NULL DEFAULT 0,
`disabled_by_downtime` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (`id_agente_modulo`),
KEY `main_idx` (`id_agente_modulo`,`id_agente`),
KEY `tam_agente` (`id_agente`),
@ -550,6 +553,7 @@ CREATE TABLE IF NOT EXISTS `talert_template_modules` (
`standby` TINYINT DEFAULT 0,
`priority` TINYINT DEFAULT 0,
`force_execution` TINYINT DEFAULT 0,
`disabled_by_downtime` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_template_module` (`id_agent_module`),
FOREIGN KEY (`id_agent_module`) REFERENCES tagente_modulo(`id_agente_modulo`)

View File

@ -2544,6 +2544,12 @@ sub pandora_planned_downtime_set_disabled_elements($$$) {
if ($only_alerts == 0) {
if ($downtime->{'type_downtime'} eq 'disable_agent_modules') {
db_do($dbh,'UPDATE tagente_modulo tam, tagente ta, tplanned_downtime_modules tpdm
SET tam.disabled_by_downtime = 1
WHERE tam.disabled = 0 AND tpdm.id_agent_module = tam.id_agente_modulo AND
ta.id_agente = tam.id_agente AND
tpdm.id_downtime = ?', $downtime->{'id'});
db_do($dbh,'UPDATE tagente_modulo tam, tagente ta, tplanned_downtime_modules tpdm
SET tam.disabled = 1, ta.update_module_count = 1
WHERE tpdm.id_agent_module = tam.id_agente_modulo AND
@ -2553,7 +2559,12 @@ sub pandora_planned_downtime_set_disabled_elements($$$) {
db_do($dbh,'UPDATE tplanned_downtime_agents tp, tagente ta
SET tp.manually_disabled = ta.disabled
WHERE tp.id_agent = ta.id_agente AND tp.id_downtime = ?',$downtime->{'id'});
db_do($dbh,'UPDATE tagente ta, tplanned_downtime_agents tpa
SET ta.disabled_by_downtime = 1
WHERE ta.disabled = 0 AND tpa.id_agent = ta.id_agente AND
tpa.id_downtime = ?',$downtime->{'id'});
db_do($dbh,'UPDATE tagente ta, tplanned_downtime_agents tpa
SET ta.disabled = 1, ta.update_module_count = 1
WHERE tpa.id_agent = ta.id_agente AND
@ -2565,6 +2576,11 @@ sub pandora_planned_downtime_set_disabled_elements($$$) {
WHERE id_downtime = ' . $downtime->{'id'});
foreach my $downtime_agent (@downtime_agents) {
db_do ($dbh, 'UPDATE talert_template_modules tat, tagente_modulo tam
SET tat.disabled_by_downtime = 1
WHERE tat.disabled = 0 AND tat.id_agent_module = tam.id_agente_modulo
AND tam.id_agente = ?', $downtime_agent->{'id_agent'});
db_do ($dbh, 'UPDATE talert_template_modules tat, tagente_modulo tam
SET tat.disabled = 1
WHERE tat.id_agent_module = tam.id_agente_modulo
@ -2645,6 +2661,13 @@ sub pandora_planned_downtime_set_quiet_elements($$$) {
AND id_downtime = ' . $downtime_id);
foreach my $downtime_module (@downtime_modules) {
# If traversed module was already quiet, do not set quiet_by_downtime flag.
# quiet_by_downtime is used to avoid setting the module back to quiet=0 when downtime is over for those modules that were quiet before the downtime.
db_do ($dbh, 'UPDATE tagente_modulo
SET quiet_by_downtime = 1
WHERE quiet = 0 && id_agente_modulo = ?',
$downtime_module->{'id_agent_module'});
db_do ($dbh, 'UPDATE tagente_modulo
SET quiet = 1
WHERE id_agente_modulo = ?',
@ -2667,7 +2690,7 @@ sub pandora_planned_downtime_unset_quiet_elements($$$) {
my @downtime_agents = get_db_rows($dbh, 'SELECT *
FROM tplanned_downtime_agents
WHERE id_downtime = ' . $downtime_id);
foreach my $downtime_agent (@downtime_agents) {
if ($downtime_agent->{'all_modules'}) {
db_do ($dbh, 'UPDATE tagente