mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-28 08:14:38 +02:00
2012-08-30 Miguel de Dios <miguel.dedios@artica.es>
* lib/PandoraFMS/Core.pm: refactoriced the code for the new Planned Downtime, now check the downtimes once and periodical and the subtypes of downtimes. * bin/pandora_server: cleaned source code style. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6925 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
aad5d39cdb
commit
3ffb3d5a31
@ -1,3 +1,11 @@
|
|||||||
|
2012-08-30 Miguel de Dios <miguel.dedios@artica.es>
|
||||||
|
|
||||||
|
* lib/PandoraFMS/Core.pm: refactoriced the code for the new Planned
|
||||||
|
Downtime, now check the downtimes once and periodical and the
|
||||||
|
subtypes of downtimes.
|
||||||
|
|
||||||
|
* bin/pandora_server: cleaned source code style.
|
||||||
|
|
||||||
2012-08-29 Sergio Martin <sergio.martin@artica.es>
|
2012-08-29 Sergio Martin <sergio.martin@artica.es>
|
||||||
|
|
||||||
* DEBIAN/control
|
* DEBIAN/control
|
||||||
|
@ -75,7 +75,7 @@ sub pandora_startup () {
|
|||||||
|
|
||||||
# Connect to the DB
|
# Connect to the DB
|
||||||
$DBH = db_connect ($Config{'dbengine'}, $Config{'dbname'}, $Config{'dbhost'}, $Config{'dbport'},
|
$DBH = db_connect ($Config{'dbengine'}, $Config{'dbname'}, $Config{'dbhost'}, $Config{'dbport'},
|
||||||
$Config{'dbuser'}, $Config{'dbpass'});
|
$Config{'dbuser'}, $Config{'dbpass'});
|
||||||
|
|
||||||
# Grab config tokens shared with the console and not in the .conf
|
# Grab config tokens shared with the console and not in the .conf
|
||||||
|
|
||||||
@ -277,63 +277,63 @@ my $time_ref = time ();
|
|||||||
my $counter = 0;
|
my $counter = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
|
|
||||||
# TASKS DONE EACH 5 SECONDS (Low latency tasks)
|
# TASKS DONE EACH 5 SECONDS (Low latency tasks)
|
||||||
# ---------------------------------------------
|
# ---------------------------------------------
|
||||||
# Server status update each 5 seconds
|
# Server status update each 5 seconds
|
||||||
# Neightbourhood problem detection each 5 seconds
|
# Neightbourhood problem detection each 5 seconds
|
||||||
# Forced alerts each 5 seconds as well
|
# Forced alerts each 5 seconds as well
|
||||||
if (($counter % 5) == 0) {
|
if (($counter % 5) == 0) {
|
||||||
|
|
||||||
# Update server status
|
# Update server status
|
||||||
foreach my $server (@Servers) {
|
foreach my $server (@Servers) {
|
||||||
die ($server->getErrStr ()) unless ($server->checkThreads () == 1);
|
die ($server->getErrStr ()) unless ($server->checkThreads () == 1);
|
||||||
$server->update ();
|
$server->update ();
|
||||||
}
|
}
|
||||||
|
|
||||||
# Update fallen servers
|
# Update fallen servers
|
||||||
db_do ($DBH, "UPDATE tserver SET status = 0 WHERE keepalive < ?", strftime ("%Y-%m-%d %H:%M:%S", localtime(time() - $Config{'keepalive'})));
|
db_do ($DBH, "UPDATE tserver SET status = 0 WHERE keepalive < ?", strftime ("%Y-%m-%d %H:%M:%S", localtime(time() - $Config{'keepalive'})));
|
||||||
|
|
||||||
# Update forced alerts
|
# Update forced alerts
|
||||||
pandora_exec_forced_alerts (\%Config, $DBH);
|
pandora_exec_forced_alerts (\%Config, $DBH);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# TASKS DONE EACH 30 SECONDS (Med latency tasks)
|
# TASKS DONE EACH 30 SECONDS (Med latency tasks)
|
||||||
# ---------------------------------------------
|
# ---------------------------------------------
|
||||||
# Tasks executed only each Server Threshold x 30 secs, for low-priority tasks
|
# Tasks executed only each Server Threshold x 30 secs, for low-priority tasks
|
||||||
if (($counter % 30) == 0) {
|
if (($counter % 30) == 0) {
|
||||||
|
|
||||||
# Keepalive module control.(very DB intensive, not run frecuently
|
# Keepalive module control.(very DB intensive, not run frecuently
|
||||||
pandora_module_keep_alive_nd (\%Config, $DBH);
|
pandora_module_keep_alive_nd (\%Config, $DBH);
|
||||||
|
|
||||||
# Set the status of unknown modules
|
# Set the status of unknown modules
|
||||||
pandora_module_unknown (\%Config, $DBH);
|
pandora_module_unknown (\%Config, $DBH);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# TASKS DONE EACH 60 SECONDS (Low latency tasks)
|
# TASKS DONE EACH 60 SECONDS (Low latency tasks)
|
||||||
# ---------------------------------------------
|
# ---------------------------------------------
|
||||||
if (($counter % 60) == 0) {
|
if (($counter % 60) == 0) {
|
||||||
# Downtimes are executed only 30 x Server Threshold secs
|
# Downtimes are executed only 30 x Server Threshold secs
|
||||||
pandora_planned_downtime (\%Config, $DBH);
|
pandora_planned_downtime (\%Config, $DBH);
|
||||||
|
|
||||||
# Realtime stats (Only master server!) - ( VERY HEAVY !)
|
# Realtime stats (Only master server!) - ( VERY HEAVY !)
|
||||||
# Realtimestats == 1, generated by WEB Console, not by server!
|
# Realtimestats == 1, generated by WEB Console, not by server!
|
||||||
if ($Config{"pandora_master"} == 1
|
if ($Config{"pandora_master"} == 1
|
||||||
&& defined($Config{"realtimestats"})
|
&& defined($Config{"realtimestats"})
|
||||||
&& $Config{"realtimestats"} == 0){
|
&& $Config{"realtimestats"} == 0){
|
||||||
|
|
||||||
# Check if I need to refresh stats
|
# Check if I need to refresh stats
|
||||||
my $last_execution_stats = get_db_value ($DBH, "SELECT MAX(utimestamp) FROM tgroup_stat");
|
my $last_execution_stats = get_db_value ($DBH, "SELECT MAX(utimestamp) FROM tgroup_stat");
|
||||||
if (!defined($last_execution_stats) || $last_execution_stats < (time() - $Config{"stats_interval"})){
|
if (!defined($last_execution_stats) || $last_execution_stats < (time() - $Config{"stats_interval"})){
|
||||||
pandora_group_statistics (\%Config, $DBH);
|
pandora_group_statistics (\%Config, $DBH);
|
||||||
pandora_server_statistics (\%Config, $DBH);
|
pandora_server_statistics (\%Config, $DBH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Pandora self monitoring
|
# Pandora self monitoring
|
||||||
if (defined($Config{"self_monitoring"})
|
if (defined($Config{"self_monitoring"})
|
||||||
&& $Config{"self_monitoring"} == 1){
|
&& $Config{"self_monitoring"} == 1){
|
||||||
@ -341,29 +341,30 @@ while (1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
# Restart on error or auto restart
|
# Restart on error or auto restart
|
||||||
if ($@) {
|
if ($@) {
|
||||||
|
|
||||||
if ($Config{'restart'} eq '0') {
|
if ($Config{'restart'} eq '0') {
|
||||||
print_message (\%Config, $@, 1);
|
print_message (\%Config, $@, 1);
|
||||||
pandora_shutdown ();
|
pandora_shutdown ();
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate 'restarting' events
|
# Generate 'restarting' events
|
||||||
foreach my $server (@Servers) {
|
foreach my $server (@Servers) {
|
||||||
$server->restartEvent ($@);
|
$server->restartEvent ($@);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger (\%Config, 'Pandora FMS Server restarting (' . $@ . ') in ' . $Config{'restart_delay'} . ' seconds.', 1);
|
logger (\%Config, 'Pandora FMS Server restarting (' . $@ . ') in ' . $Config{'restart_delay'} . ' seconds.', 1);
|
||||||
pandora_restart ();
|
pandora_restart ();
|
||||||
} elsif (($Config{'auto_restart'} > 0) && (time () - $time_ref > $Config{'auto_restart'})) {
|
}
|
||||||
|
elsif (($Config{'auto_restart'} > 0) && (time () - $time_ref > $Config{'auto_restart'})) {
|
||||||
$time_ref = time ();
|
$time_ref = time ();
|
||||||
|
|
||||||
# Mute
|
# Mute
|
||||||
open(OLDOUT, ">&STDOUT");
|
open(OLDOUT, ">&STDOUT");
|
||||||
open (STDOUT, '>/dev/null');
|
open (STDOUT, '>/dev/null');
|
||||||
|
|
||||||
# Restart
|
# Restart
|
||||||
pandora_restart ();
|
pandora_restart ();
|
||||||
|
|
||||||
@ -371,14 +372,15 @@ while (1) {
|
|||||||
open(STDOUT, ">&OLDOUT");
|
open(STDOUT, ">&OLDOUT");
|
||||||
close (OLDOUT);
|
close (OLDOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Avoid counter overflow
|
# Avoid counter overflow
|
||||||
if ($counter > 10000){
|
if ($counter > 10000){
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
$counter++;
|
$counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
threads->yield;
|
threads->yield;
|
||||||
sleep (1);
|
sleep (1);
|
||||||
|
|
||||||
|
@ -111,6 +111,12 @@ use HTML::Entities;
|
|||||||
use Time::Local;
|
use Time::Local;
|
||||||
use POSIX qw(strftime);
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
#This library need for planned downtimes for periodical weekly and monthly
|
||||||
|
use Time::Piece;
|
||||||
|
#And the with $var = localtime();
|
||||||
|
#print "Day in the week is ", $var1->_wday
|
||||||
|
#if it is sunday return 0 instead to 7
|
||||||
|
|
||||||
# Force XML::Simple to use XML::Parser instead SAX to manage XML
|
# Force XML::Simple to use XML::Parser instead SAX to manage XML
|
||||||
# due a bug processing some XML with blank spaces.
|
# due a bug processing some XML with blank spaces.
|
||||||
# See http://www.perlmonks.org/?node_id=706838
|
# See http://www.perlmonks.org/?node_id=706838
|
||||||
@ -159,6 +165,18 @@ our @EXPORT = qw(
|
|||||||
pandora_module_keep_alive_nd
|
pandora_module_keep_alive_nd
|
||||||
pandora_module_unknown
|
pandora_module_unknown
|
||||||
pandora_planned_downtime
|
pandora_planned_downtime
|
||||||
|
pandora_planned_downtime_set_quiet_elements
|
||||||
|
pandora_planned_downtime_unset_quiet_elements
|
||||||
|
pandora_planned_downtime_set_disabled_elements
|
||||||
|
pandora_planned_downtime_unset_disabled_elements
|
||||||
|
pandora_planned_downtime_quiet_once_start
|
||||||
|
pandora_planned_downtime_quiet_once_stop
|
||||||
|
pandora_planned_downtime_disabled_once_start
|
||||||
|
pandora_planned_downtime_disabled_once_stop
|
||||||
|
pandora_planned_downtime_monthly_start
|
||||||
|
pandora_planned_downtime_monthly_stop
|
||||||
|
pandora_planned_downtime_weekly_start
|
||||||
|
pandora_planned_downtime_weekly_stop
|
||||||
pandora_process_alert
|
pandora_process_alert
|
||||||
pandora_process_module
|
pandora_process_module
|
||||||
pandora_reset_server
|
pandora_reset_server
|
||||||
@ -805,7 +823,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
|
|||||||
$macros{$macro} = $value;
|
$macros{$macro} = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# User defined alerts
|
# User defined alerts
|
||||||
if ($action->{'internal'} == 0) {
|
if ($action->{'internal'} == 0) {
|
||||||
$macros{_field1_} = subst_alert_macros ($field1, \%macros);
|
$macros{_field1_} = subst_alert_macros ($field1, \%macros);
|
||||||
@ -813,22 +831,22 @@ sub pandora_execute_action ($$$$$$$$$;$) {
|
|||||||
$macros{_field3_} = subst_alert_macros ($field3, \%macros);
|
$macros{_field3_} = subst_alert_macros ($field3, \%macros);
|
||||||
my $command = subst_alert_macros (decode_entities ($action->{'command'}), \%macros);
|
my $command = subst_alert_macros (decode_entities ($action->{'command'}), \%macros);
|
||||||
logger($pa_config, "Executing command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "'.", 8);
|
logger($pa_config, "Executing command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "'.", 8);
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
system ($command);
|
system ($command);
|
||||||
logger($pa_config, "Command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "' returned with errorlevel " . ($? >> 8), 8);
|
logger($pa_config, "Command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "' returned with errorlevel " . ($? >> 8), 8);
|
||||||
};
|
};
|
||||||
|
|
||||||
if ($@){
|
if ($@){
|
||||||
logger($pa_config, "Error $@ executing command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') ."'.", 8);
|
logger($pa_config, "Error $@ executing command '$command' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') ."'.", 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Internal Audit
|
# Internal Audit
|
||||||
} elsif ($action->{'name'} eq "Internal Audit") {
|
} elsif ($action->{'name'} eq "Internal Audit") {
|
||||||
$field1 = subst_alert_macros ($field1, \%macros);
|
$field1 = subst_alert_macros ($field1, \%macros);
|
||||||
pandora_audit ($pa_config, $field1, defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A', 'Alert (' . safe_output($alert->{'description'}) . ')', $dbh);
|
pandora_audit ($pa_config, $field1, defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A', 'Alert (' . safe_output($alert->{'description'}) . ')', $dbh);
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
} elsif ($action->{'name'} eq "eMail") {
|
} elsif ($action->{'name'} eq "eMail") {
|
||||||
$field2 = subst_alert_macros ($field2, \%macros);
|
$field2 = subst_alert_macros ($field2, \%macros);
|
||||||
$field3 = subst_alert_macros ($field3, \%macros);
|
$field3 = subst_alert_macros ($field3, \%macros);
|
||||||
@ -837,7 +855,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
|
|||||||
$address =~ s/ +//g;
|
$address =~ s/ +//g;
|
||||||
pandora_sendmail ($pa_config, $address, $field2, $field3);
|
pandora_sendmail ($pa_config, $address, $field2, $field3);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Internal event
|
# Internal event
|
||||||
} elsif ($action->{'name'} eq "Pandora FMS Event") {
|
} elsif ($action->{'name'} eq "Pandora FMS Event") {
|
||||||
$field1 = subst_alert_macros ($field1, \%macros);
|
$field1 = subst_alert_macros ($field1, \%macros);
|
||||||
@ -855,7 +873,7 @@ sub pandora_execute_action ($$$$$$$$$;$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Unknown
|
# Unknown
|
||||||
} else {
|
} else {
|
||||||
logger($pa_config, "Unknown action '" . $action->{'name'} . "' for alert '". $alert->{'name'} . "' agent '" . (defined ($agent) ? $agent->{'nombre'} : 'N/A') . "'.", 3);
|
logger($pa_config, "Unknown action '" . $action->{'name'} . "' for alert '". $alert->{'name'} . "' agent '" . (defined ($agent) ? $agent->{'nombre'} : 'N/A') . "'.", 3);
|
||||||
@ -877,9 +895,9 @@ Update agent access table.
|
|||||||
##########################################################################
|
##########################################################################
|
||||||
sub pandora_access_update ($$$) {
|
sub pandora_access_update ($$$) {
|
||||||
my ($pa_config, $agent_id, $dbh) = @_;
|
my ($pa_config, $agent_id, $dbh) = @_;
|
||||||
|
|
||||||
return if ($agent_id < 0);
|
return if ($agent_id < 0);
|
||||||
|
|
||||||
if ($pa_config->{"agentaccess"} == 0){
|
if ($pa_config->{"agentaccess"} == 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1016,6 +1034,602 @@ sub pandora_process_module ($$$$$$$$$;$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_disabled_once_stop (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Stop the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_disabled_once_stop($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $utimestamp = time();
|
||||||
|
|
||||||
|
# Stop executed downtimes (enable agents)
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_downtime != "quiet" AND type_execution="once"
|
||||||
|
AND executed = 1 AND date_to <= ?', $utimestamp);
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
|
||||||
|
logger($pa_config, "Ending planned downtime '" . $downtime->{'name'} . "'.", 10);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 0
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
|
||||||
|
pandora_event ($pa_config, 'Server ' . $pa_config->{'servername'} . ' stopped planned downtime: ' . $downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
pandora_planned_downtime_unset_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_disabled_once_start (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_disabled_once_start($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $utimestamp = time();
|
||||||
|
|
||||||
|
# Start pending downtimes (disable agents)
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_downtime = "quiet" AND type_execution="once"
|
||||||
|
AND executed = 0 AND date_from <= ?
|
||||||
|
AND date_to >= ?', $utimestamp, $utimestamp);
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 1
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
pandora_planned_downtime_set_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_set_quiet_elements (I<$pa_config>, I<$dbh>, <$id_downtime>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_set_disabled_elements($$$) {
|
||||||
|
my ($pa_config, $dbh, $downtime) = @_;
|
||||||
|
|
||||||
|
my @downtime_agents = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime_agents
|
||||||
|
WHERE id_downtime = ' . $downtime->{'id'});
|
||||||
|
|
||||||
|
foreach my $downtime_agent (@downtime_agents) {
|
||||||
|
my $only_alerts = 0;
|
||||||
|
|
||||||
|
if ($downtime->{'only_alerts'} == 0) {
|
||||||
|
if ($downtime->{'type_downtime'} == 'disable_agents_alerts') {
|
||||||
|
$only_alerts = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$only_alerts = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($only_alerts == 0) {
|
||||||
|
db_do ($dbh, 'UPDATE tagente
|
||||||
|
SET disabled = 1
|
||||||
|
WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
db_do ($dbh, 'UPDATE talert_template_modules
|
||||||
|
SET disabled = 1
|
||||||
|
WHERE id_agent_module IN (
|
||||||
|
SELECT id_agente_modulo
|
||||||
|
FROM tagente_modulo
|
||||||
|
WHERE id_agente = ?)', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_set_quiet_elements (I<$pa_config>, I<$dbh>, <$id_downtime>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_unset_disabled_elements($$$) {
|
||||||
|
my ($pa_config, $dbh, $downtime) = @_;
|
||||||
|
|
||||||
|
my @downtime_agents = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime_agents
|
||||||
|
WHERE id_downtime = ' . $downtime->{'id'});
|
||||||
|
|
||||||
|
foreach my $downtime_agent (@downtime_agents) {
|
||||||
|
my $only_alerts = 0;
|
||||||
|
|
||||||
|
if ($downtime->{'only_alerts'} == 0) {
|
||||||
|
if ($downtime->{'type_downtime'} == 'disable_agents_alerts') {
|
||||||
|
$only_alerts = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$only_alerts = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($only_alerts == 0) {
|
||||||
|
db_do ($dbh, 'UPDATE tagente
|
||||||
|
SET disabled = 0
|
||||||
|
WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
db_do ($dbh, 'UPDATE talert_template_modules
|
||||||
|
SET disabled = 0
|
||||||
|
WHERE id_agent_module IN (
|
||||||
|
SELECT id_agente_modulo
|
||||||
|
FROM tagente_modulo
|
||||||
|
WHERE id_agente = ?)', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_set_quiet_elements (I<$pa_config>, I<$dbh>, <$id_downtime>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_set_quiet_elements($$$) {
|
||||||
|
my ($pa_config, $dbh, $downtime_id) = @_;
|
||||||
|
|
||||||
|
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
|
||||||
|
SET quiet = 1
|
||||||
|
WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
my @downtime_modules = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime_modules
|
||||||
|
WHERE id_agent = ' . $downtime_agent->{'id_agent'} . '
|
||||||
|
AND id_downtime = ' . $downtime_id);
|
||||||
|
|
||||||
|
foreach my $downtime_module (@downtime_modules) {
|
||||||
|
db_do ($dbh, 'UPDATE tagente_modulo
|
||||||
|
SET quiet = 1
|
||||||
|
WHERE id_agente_modulo = ?', $downtime_agent->{'id_agent_module'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_unset_quiet_elements (I<$pa_config>, I<$dbh>, <$id_downtime>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_unset_quiet_elements($$$) {
|
||||||
|
my ($pa_config, $dbh, $downtime_id) = @_;
|
||||||
|
|
||||||
|
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
|
||||||
|
SET quiet = 0
|
||||||
|
WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
my @downtime_modules = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime_modules
|
||||||
|
WHERE id_agent = ' . $downtime_agent->{'id_agent'} . '
|
||||||
|
AND id_downtime = ' . $downtime_id);
|
||||||
|
|
||||||
|
foreach my $downtime_module (@downtime_modules) {
|
||||||
|
db_do ($dbh, 'UPDATE tagente_modulo
|
||||||
|
SET quiet = 0
|
||||||
|
WHERE id_agente_modulo = ?', $downtime_agent->{'id_agent_module'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_quiet_once_stop (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_quiet_once_stop($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $utimestamp = time();
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_downtime = "quiet" AND type_execution="once"
|
||||||
|
AND executed = 1 AND date_from <= ?
|
||||||
|
AND date_to >= ?', $utimestamp, $utimestamp);
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 0
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
pandora_planned_downtime_unset_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_quiet_once_start (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the once type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_quiet_once_start($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $utimestamp = time();
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_downtime = "quiet" AND type_execution="once"
|
||||||
|
AND executed = 0 AND date_from <= ?
|
||||||
|
AND date_to >= ?', $utimestamp, $utimestamp);
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 1
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
pandora_planned_downtime_set_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_monthly_start (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the monthly type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_monthly_start($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $local_time = localtime();
|
||||||
|
my $number_day_month = $local_time->mday;
|
||||||
|
my $number_last_day_month = $local_time->month_last_day;
|
||||||
|
my $time = $local_time->hms;
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_periodicity="monthly"
|
||||||
|
AND executed = 0
|
||||||
|
AND periodically_day_from >= ?', $number_day_month);
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
#Convert to identical type.
|
||||||
|
my $date_downtime = Time::Piece->strptime(
|
||||||
|
$downtime->{'periodically_time_from'},
|
||||||
|
"%H:%M:%S");
|
||||||
|
my $date_now_time = Time::Piece->strptime(
|
||||||
|
$time,
|
||||||
|
"%H:%M:%S");
|
||||||
|
|
||||||
|
if ($date_now_time >= $date_downtime) {
|
||||||
|
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 1
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
if ($downtime->{'type_downtime'} == "quiet") {
|
||||||
|
pandora_planned_downtime_set_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
elsif (($downtime->{'type_downtime'} == "disable_agents")
|
||||||
|
|| ($downtime->{'type_downtime'} == "disabled_agents_alerts")) {
|
||||||
|
pandora_planned_downtime_set_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_monthly_stop (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the montly type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_monthly_stop($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $local_time = localtime();
|
||||||
|
my $number_day_month = $local_time->mday;
|
||||||
|
my $number_last_day_month = $local_time->month_last_day;
|
||||||
|
my $time = $local_time->hms;
|
||||||
|
|
||||||
|
#With this stop the planned downtime for 31 (or 30) day in months
|
||||||
|
# with less days.
|
||||||
|
#For to avoid the problems with february
|
||||||
|
if (($number_last_day_month == 28) &&
|
||||||
|
($number_day_month >= 28)) {
|
||||||
|
$number_day_month = 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
#For to avoid the problems with months with 30 days
|
||||||
|
if (($number_last_day_month == 30) &&
|
||||||
|
($number_day_month >= 30)) {
|
||||||
|
$number_day_month = 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_periodicity="monthly"
|
||||||
|
AND executed = 1
|
||||||
|
AND periodically_day_to <= ?', $number_day_month);
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
#Convert to identical type.
|
||||||
|
my $date_downtime = Time::Piece->strptime(
|
||||||
|
$downtime->{'periodically_time_to'},
|
||||||
|
"%H:%M:%S");
|
||||||
|
my $date_now_time = Time::Piece->strptime(
|
||||||
|
$time,
|
||||||
|
"%H:%M:%S");
|
||||||
|
|
||||||
|
if ($date_now_time <= $date_downtime) {
|
||||||
|
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Stopping planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 0
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
if ($downtime->{'type_downtime'} == "quiet") {
|
||||||
|
pandora_planned_downtime_unset_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
elsif (($downtime->{'type_downtime'} == "disable_agents")
|
||||||
|
|| ($downtime->{'type_downtime'} == "disabled_agents_alerts")) {
|
||||||
|
pandora_planned_downtime_set_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_weekly_start (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Start the planned downtime, the montly type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_weekly_start($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $local_time = localtime();
|
||||||
|
my $number_day_week = $local_time->_wday;
|
||||||
|
my $time = $local_time->hms;
|
||||||
|
my $found = 0;
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_periodicity="weekly"
|
||||||
|
AND executed = 0');
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
$found = 0;
|
||||||
|
if (($number_day_week == 1) &&
|
||||||
|
($downtime->{'monday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 2) &&
|
||||||
|
($downtime->{'tuesday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 3) &&
|
||||||
|
($downtime->{'wednesday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 4) &&
|
||||||
|
($downtime->{'thursday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 5) &&
|
||||||
|
($downtime->{'friday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 6) &&
|
||||||
|
($downtime->{'saturday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
if (($number_day_week == 0) &&
|
||||||
|
($downtime->{'sunday'})) {
|
||||||
|
$found = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($found) {
|
||||||
|
#Convert to identical type.
|
||||||
|
my $date_downtime = Time::Piece->strptime(
|
||||||
|
$downtime->{'periodically_time_from'},
|
||||||
|
"%H:%M:%S");
|
||||||
|
my $date_now_time = Time::Piece->strptime(
|
||||||
|
$time,
|
||||||
|
"%H:%M:%S");
|
||||||
|
|
||||||
|
if ($date_now_time >= $date_downtime) {
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 1
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
if ($downtime->{'type_downtime'} == "quiet") {
|
||||||
|
pandora_planned_downtime_set_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
elsif (($downtime->{'type_downtime'} == "disable_agents")
|
||||||
|
|| ($downtime->{'type_downtime'} == "disabled_agents_alerts")) {
|
||||||
|
pandora_planned_downtime_set_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
=head2 C<< pandora_planned_downtime_weekly_stop (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
|
Stop the planned downtime, the montly type.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
########################################################################
|
||||||
|
sub pandora_planned_downtime_weekly_stop($$) {
|
||||||
|
my ($pa_config, $dbh) = @_;
|
||||||
|
my $local_time = localtime();
|
||||||
|
my $number_day_week = $local_time->_wday;
|
||||||
|
my $time = $local_time->hms;
|
||||||
|
my $found = 0;
|
||||||
|
|
||||||
|
# Start pending downtimes
|
||||||
|
my @downtimes = get_db_rows($dbh, 'SELECT *
|
||||||
|
FROM tplanned_downtime
|
||||||
|
WHERE type_periodicity="weekly"
|
||||||
|
AND executed = 1');
|
||||||
|
|
||||||
|
foreach my $downtime (@downtimes) {
|
||||||
|
#Convert to identical type.
|
||||||
|
my $date_downtime = Time::Piece->strptime(
|
||||||
|
$downtime->{'periodically_time_to'},
|
||||||
|
"%H:%M:%S");
|
||||||
|
my $date_now_time = Time::Piece->strptime(
|
||||||
|
$time,
|
||||||
|
"%H:%M:%S");
|
||||||
|
|
||||||
|
if ($date_now_time <= $date_downtime) {
|
||||||
|
|
||||||
|
if (!defined($downtime->{'description'})) {
|
||||||
|
$downtime->{'description'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($downtime->{'name'})) {
|
||||||
|
$downtime->{'name'} = "N/A";
|
||||||
|
}
|
||||||
|
|
||||||
|
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 1);
|
||||||
|
|
||||||
|
db_do($dbh, 'UPDATE tplanned_downtime
|
||||||
|
SET executed = 0
|
||||||
|
WHERE id = ?', $downtime->{'id'});
|
||||||
|
pandora_event ($pa_config,
|
||||||
|
"Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
||||||
|
|
||||||
|
if ($downtime->{'type_downtime'} == "quiet") {
|
||||||
|
pandora_planned_downtime_unset_quiet_elements($pa_config,
|
||||||
|
$dbh, $downtime->{'id'});
|
||||||
|
}
|
||||||
|
elsif (($downtime->{'type_downtime'} == "disable_agents")
|
||||||
|
|| ($downtime->{'type_downtime'} == "disabled_agents_alerts")) {
|
||||||
|
pandora_planned_downtime_unset_disabled_elements($pa_config,
|
||||||
|
$dbh, $downtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
=head2 C<< pandora_planned_downtime (I<$pa_config>, I<$dbh>) >>
|
=head2 C<< pandora_planned_downtime (I<$pa_config>, I<$dbh>) >>
|
||||||
|
|
||||||
@ -1025,58 +1639,18 @@ Update planned downtimes.
|
|||||||
##########################################################################
|
##########################################################################
|
||||||
sub pandora_planned_downtime ($$) {
|
sub pandora_planned_downtime ($$) {
|
||||||
my ($pa_config, $dbh) = @_;
|
my ($pa_config, $dbh) = @_;
|
||||||
my $utimestamp = time();
|
|
||||||
|
|
||||||
# Start pending downtimes (disable agents)
|
pandora_planned_downtime_disabled_once_start($pa_config, $dbh);
|
||||||
my @downtimes = get_db_rows($dbh, 'SELECT * FROM tplanned_downtime WHERE executed = 0 AND date_from <= ? AND date_to >= ?', $utimestamp, $utimestamp);
|
pandora_planned_downtime_disabled_once_stop($pa_config, $dbh);
|
||||||
|
|
||||||
foreach my $downtime (@downtimes) {
|
pandora_planned_downtime_quiet_once_start($pa_config, $dbh);
|
||||||
|
pandora_planned_downtime_quiet_once_stop($pa_config, $dbh);
|
||||||
if (!defined($downtime->{'description'})){
|
|
||||||
$downtime->{'description'} = "N/A";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!defined($downtime->{'name'})){
|
|
||||||
$downtime->{'name'} = "N/A";
|
|
||||||
}
|
|
||||||
|
|
||||||
logger($pa_config, "Starting planned downtime '" . $downtime->{'name'} . "'.", 10);
|
|
||||||
|
|
||||||
db_do($dbh, 'UPDATE tplanned_downtime SET executed = 1 WHERE id = ?', $downtime->{'id'});
|
|
||||||
pandora_event ($pa_config, "Server ".$pa_config->{'servername'}." started planned downtime: ".$downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
|
||||||
|
|
||||||
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->{'only_alerts'} == 0) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET disabled = 1 WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
|
||||||
} else {
|
|
||||||
db_do ($dbh, 'UPDATE talert_template_modules SET disabled = 1 WHERE id_agent_module IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = ?)', $downtime_agent->{'id_agent'});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Stop executed downtimes (enable agents)
|
pandora_planned_downtime_monthly_start($pa_config, $dbh);
|
||||||
@downtimes = get_db_rows($dbh, 'SELECT * FROM tplanned_downtime WHERE executed = 1 AND date_to <= ?', $utimestamp);
|
pandora_planned_downtime_monthly_stop($pa_config, $dbh);
|
||||||
foreach my $downtime (@downtimes) {
|
|
||||||
|
pandora_planned_downtime_weekly_start($pa_config, $dbh);
|
||||||
logger($pa_config, "Ending planned downtime '" . $downtime->{'name'} . "'.", 10);
|
pandora_planned_downtime_weekly_stop($pa_config, $dbh);
|
||||||
|
|
||||||
db_do($dbh, 'UPDATE tplanned_downtime SET executed = 0 WHERE id = ?', $downtime->{'id'});
|
|
||||||
|
|
||||||
pandora_event ($pa_config, 'Server ' . $pa_config->{'servername'} . ' stopped planned downtime: ' . $downtime->{'description'}, 0, 0, 1, 0, 0, 'system', 0, $dbh);
|
|
||||||
|
|
||||||
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->{'only_alerts'} == 0) {
|
|
||||||
db_do ($dbh, 'UPDATE tagente SET disabled = 0 WHERE id_agente = ?', $downtime_agent->{'id_agent'});
|
|
||||||
} else {
|
|
||||||
db_do ($dbh, 'UPDATE talert_template_modules SET disabled = 0 WHERE id_agent_module IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente = ?)', $downtime_agent->{'id_agent'});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user