From cabacec0ef36607e338012fd51e44d7598e219a4 Mon Sep 17 00:00:00 2001 From: fermin831 Date: Wed, 30 Sep 2015 15:15:50 +0200 Subject: [PATCH] Added global alert timeout to Pandora Server Alerts. --- pandora_server/conf/pandora_server.conf.new | 3 +++ pandora_server/conf/pandora_server.conf.windows | 3 +++ pandora_server/lib/PandoraFMS/Config.pm | 6 ++++++ pandora_server/lib/PandoraFMS/Core.pm | 14 ++++++++++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index df3c9b92ec..ef6933e66c 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -506,3 +506,6 @@ console_pass pandora # Time interval (as a multiple of the module interval) before a module becomes unknown. Twice the module's interval by default. #unknown_interval 2 +# Maximum executing time of an alert (in seconds) +global_alert_timeout 15 + diff --git a/pandora_server/conf/pandora_server.conf.windows b/pandora_server/conf/pandora_server.conf.windows index e2ef591a6e..5c9aa5bbe5 100644 --- a/pandora_server/conf/pandora_server.conf.windows +++ b/pandora_server/conf/pandora_server.conf.windows @@ -313,3 +313,6 @@ console_pass pandora # Time interval (as a multiple of the module interval) before a module becomes unknown. Twice the module's interval by default. #unknown_interval 2 +# Maximum executing time of an alert (in seconds) +global_alert_timeout 15 + diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 1045a85d40..715c419a90 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -382,6 +382,9 @@ sub pandora_load_config { $pa_config->{"snmp_forward_secLevel"}= ''; $pa_config->{"snmp_forward_version"}= 2; $pa_config->{"snmp_forward_ip"}= ''; + + # Global Timeout for Custom Commands Alerts + $pa_config->{"global_alert_timeout"}= 15; # 6.0 # Check for UID0 @@ -851,6 +854,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^unknown_interval\s([0-9]*)/i) { # > 5.1SP2 $pa_config->{'unknown_interval'}= safe_input($1); } + elsif ($parametro =~ m/^global_alert_timeout\s+([0-9]*)/i) { + $pa_config->{'global_alert_timeout'}= clean_blank($1); + } } # end of loop for parameter # # Set to RDBMS' standard port diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 9a98fd9f9a..e8c994ae5d 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -977,8 +977,18 @@ sub pandora_execute_action ($$$$$$$$$;$) { 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 { - 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); + if ($pa_config->{'global_alert_timeout'} == 0){ + 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); + } else { + my $command_timeout = safe_output($pa_config->{'plugin_exec'}) . " " . $pa_config->{'global_alert_timeout'} . " " . $command; + system ($command_timeout); + my $return_code = ($? >> 8) & 0xff; + logger($pa_config, "Command '$command_timeout' for action '" . safe_output($action->{'name'}) . "' alert '". safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "' returned with errorlevel " . $return_code, 8); + if ($return_code != 0) { + logger ($pa_config, "Action '" . safe_output($action->{'name'}) . "' alert '" . safe_output($alert->{'name'}) . "' agent '" . (defined ($agent) ? safe_output($agent->{'nombre'}) : 'N/A') . "' exceeded the global alert timeout " . $pa_config->{'global_alert_timeout'} . " seconds" , 8); + } + } }; if ($@){