diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index 7581eebd84..1eaee362d7 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,9 @@ +2013-01-11 Sergio Martin + + * lib/PandoraFMS/Config.pm + lib/PandoraFMS/Core.pm: clean up the compound alerts from + server code + 2013-01-11 Juan Manuel Ramon * lib/PandoraFMS/Core.pm: Fixed _id_alert_ macro in events. diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index db34e12b20..aaa984c3e2 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -212,7 +212,6 @@ sub pandora_load_config { $pa_config->{"wmi_threads"} = 2; # Introduced on 2.0 $pa_config->{"wmi_timeout"} = 5; # Introduced on 2.0 $pa_config->{"wmi_client"} = 'wmic'; # 3.0 - $pa_config->{"compound_max_depth"} = 5; # Maximum nested compound alert depth. Not in config file. $pa_config->{"dataserver_threads"} = 2; # Introduced on 2.0 $pa_config->{"inventory_threads"} = 2; # 2.1 $pa_config->{"export_threads"} = 1; # 3.0 diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 39396602f8..21462cc879 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -50,8 +50,6 @@ Exported Functions: =item * C -=item * C - =item * C =item * C @@ -64,8 +62,6 @@ Exported Functions: =item * C -=item * C - =item * C =item * C @@ -146,14 +142,12 @@ our @EXPORT = qw( pandora_delete_all_template_module_actions pandora_delete_module pandora_evaluate_alert - pandora_evaluate_compound_alert pandora_evaluate_snmp_alerts pandora_event pandora_execute_alert pandora_execute_action pandora_exec_forced_alerts pandora_generate_alerts - pandora_generate_compound_alerts pandora_get_config_value pandora_get_module_tags pandora_get_module_url_tags @@ -270,11 +264,6 @@ sub pandora_generate_alerts ($$$$$$$$;$$$) { pandora_process_alert ($pa_config, $data, $agent, $module, $alert, $rc, $dbh, $timestamp, $extra_macros); - - # Evaluate compound alerts even if the alert status did not change in - # case the compound alert does not recover - pandora_generate_compound_alerts ($pa_config, $data, $status, - $agent, $module, $alert, $utimestamp, $dbh, $timestamp); } } @@ -424,11 +413,7 @@ sub pandora_evaluate_alert ($$$$$$$;$$$) { return $status if ($last_status != 2 && $alert->{'type'} eq 'warning'); return $status if ($last_status != 3 && $alert->{'type'} eq 'unknown'); } - # Compound alert - elsif (defined ($alert->{'id_agent'})) { - return $status if (pandora_evaluate_compound_alert($pa_config, $alert->{'id'}, $alert->{'name'}, $dbh) == 0); # Event alert - } else { my $rc = enterprise_hook ('evaluate_event_alert', [$pa_config, $dbh, $alert, $events, $event]); return $status unless (defined ($rc) && $rc == 1); @@ -457,14 +442,11 @@ sub pandora_process_alert ($$$$$$$$;$) { logger ($pa_config, "Processing alert '" . safe_output($alert->{'name'}) . "': " . (defined ($AlertStatus[$rc]) ? $AlertStatus[$rc] : 'Unknown status') . ".", 10); } - # Simple, event or compound alert? + # Simple or event alert? my ($id, $table) = (undef, undef); if (defined ($alert->{'id_template_module'})) { $id = $alert->{'id_template_module'}; $table = 'talert_template_modules'; - } elsif (defined ($alert->{'id_agent'})) { - $id = $alert->{'id'}; - $table = 'talert_compound'; } else { $id = $alert->{'id'}; $table = 'tevent_alert'; @@ -575,96 +557,6 @@ sub pandora_process_alert ($$$$$$$$;$) { } } -########################################################################## -=head2 C<< pandora_evaluate_compound_alert (I<$pa_config>, I<$id>, I<$name>, I<$dbh>) >> - -Evaluate the given compound alert. Returns 1 if the alert should be -fired, 0 if not. - -=cut -########################################################################## -sub pandora_evaluate_compound_alert ($$$$) { - my ($pa_config, $id, $name, $dbh) = @_; - - logger ($pa_config, "Evaluating compound alert '".safe_output($name)."'.", 10); - - # Return value - my $status = 0; - - # Get all the alerts associated with this compound alert - my @compound_alerts = get_db_rows ($dbh, 'SELECT id_alert_template_module, operation FROM talert_compound_elements - WHERE id_alert_compound = ? ORDER BY ' . db_reserved_word ('order'), $id); - - foreach my $compound_alert (@compound_alerts) { - - # Get alert data if enabled - my $times_fired = get_db_value ($dbh, "SELECT times_fired FROM talert_template_modules WHERE id = ? - AND disabled = 0", $compound_alert->{'id_alert_template_module'}); - next unless defined ($times_fired); - - # Check whether the alert was fired - my $fired = ($times_fired > 0) ? 1 : 0; - my $operation = $compound_alert->{'operation'}; - - # Operate... - if ($operation eq "AND") { - $status &= $fired; - } - elsif ($operation eq "OR") { - $status |= $fired; - } - elsif ($operation eq "XOR") { - $status ^= $fired; - } - elsif ($operation eq "NAND") { - $status &= ! $fired; - } - elsif ($operation eq "NOR") { - $status |= ! $fired; - } - elsif ($operation eq "NXOR") { - $status ^= ! $fired; - } - elsif ($operation eq "NOP") { - $status = $fired; - } else { - logger ($pa_config, "Unknown operation: $operation.", 3); - } - } - - return $status; -} - -########################################################################## -=head2 C<< pandora_generate_compound_alerts (I<$pa_config>, I<$data>, I<$status>, I<$agent>, I<$module>, I<$alert>, I<$utimestamp>, I<$dbh>, I<$timestamp>) >> - -Generate compound alerts that depend on a given alert. - -=cut -########################################################################## -sub pandora_generate_compound_alerts ($$$$$$$$$) { - my ($pa_config, $data, $status, $agent, $module, $alert, $utimestamp, $dbh, $timestamp) = @_; - - # Get all compound alerts that depend on this alert - my @elements = get_db_rows ($dbh, 'SELECT id_alert_compound FROM talert_compound_elements - WHERE id_alert_template_module = ?', - $alert->{'id_template_module'}); - - foreach my $element (@elements) { - - # Get compound alert parameters - my $compound_alert = get_db_single_row ($dbh, 'SELECT * FROM talert_compound WHERE id = ?', $element->{'id_alert_compound'}); - next unless defined ($compound_alert); - - # Evaluate the alert - my $rc = pandora_evaluate_alert ($pa_config, $agent, $data, $status, $compound_alert, - $utimestamp, $dbh); - - pandora_process_alert ($pa_config, $data, $agent, $module, - $compound_alert, $rc, $dbh, $timestamp); - } -} - ########################################################################## =head2 C<< pandora_execute_alert (I<$pa_config>, I<$data>, I<$agent>, I<$module>, I<$alert>, I<$alert_mode>, I<$dbh>, I<$timestamp>) >> @@ -714,16 +606,6 @@ sub pandora_execute_alert ($$$$$$$$;$) { $alert->{'id_alert_action'}); } } - # Compound alert - elsif (defined ($alert->{'id_agent'})) { - @actions = get_db_rows ($dbh, 'SELECT * FROM talert_compound_actions, talert_actions, talert_commands - WHERE talert_compound_actions.id_alert_action = talert_actions.id - AND talert_actions.id_alert_command = talert_commands.id - AND talert_compound_actions.id_alert_compound = ? - AND ((fires_min = 0 AND fires_max = 0) - OR (? >= fires_min AND ? <= fires_max))', - $alert->{'id'}, $alert->{'times_fired'}, $alert->{'times_fired'}); - } # Event alert else { @actions = get_db_rows ($dbh, 'SELECT * FROM tevent_alert_action, talert_actions, talert_commands @@ -3153,10 +3035,8 @@ sub pandora_inhibit_alerts { AND talert_template_modules.times_fired > 0 AND talert_templates.priority = 4', $agent->{'id_parent'}); return 1 if ($count > 0); - - # Are any of the parent's critical compound alerts fired? - $count = get_db_value ($dbh, 'SELECT COUNT(*) FROM talert_compound WHERE id_agent = ? AND times_fired > 0 AND priority = 4', $agent->{'id_parent'}); - return 1 if ($count > 0); + + # Check the parent's parent next $agent = get_db_single_row ($dbh, 'SELECT * FROM tagente WHERE id_agente = ?', $agent->{'id_parent'});