From 1344dee2c4e8e5100695b8cc9752f23ea32669d0 Mon Sep 17 00:00:00 2001 From: Ramon Novoa Date: Mon, 13 Sep 2021 13:13:46 +0200 Subject: [PATCH 1/2] Add action information to alert events. --- pandora_server/lib/PandoraFMS/Core.pm | 29 +++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 1dbc67e46f..6c70fde7c4 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -4225,7 +4225,13 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { my $trap_rcv_full = $trap_oid . " " . $trap_value. " ". $trap_type. " " . $trap_custom_oid; + # Additional execution information for the console. + my $custom_data = { + 'actions' => [], + }; + pandora_execute_action ($pa_config, $trap_rcv_full, \%agent, \%alert, 1, $action, undef, $dbh, $timestamp, \%macros) if (defined ($action)); + push(@{$custom_data->{'actions'}}, safe_output($action->{'name'})); # Generate an event, ONLY if our alert action is different from generate an event. if ($action->{'id_alert_command'} != 3 && $alert->{'disable_event'} == 0){ @@ -4287,11 +4293,30 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { ); pandora_execute_action ($pa_config, $trap_rcv_full, \%agent, \%alert_action, 1, $other_action, undef, $dbh, $timestamp, \%macros) if (defined ($other_action)); + push(@{$custom_data->{'actions'}}, safe_output($other_action->{'name'})); # Generate an event, ONLY if our alert action is different from generate an event. if ($other_action->{'id_alert_command'} != 3 && $alert->{'disable_event'} == 0){ - pandora_event ($pa_config, "SNMP alert fired (" . safe_output($alert->{'description'}) . ")", - 0, 0, $alert->{'priority'}, 0, 0, 'alert_fired', 0, $dbh); + pandora_event ( + $pa_config, + "SNMP alert fired (" . safe_output($alert->{'description'}) . ")", + 0, + 0, + $alert->{'priority'}, + 0, + 0, + 'alert_fired', + 0, + $dbh, + undef, + undef, + undef, + undef, + undef, + undef, + undef,, + undef, + p_encode_json($pa_config, $custom_data)); } # Update alert status From 118b0c3ff01b88e95ec0beca93f1d75e9aee7370 Mon Sep 17 00:00:00 2001 From: Ramon Novoa Date: Thu, 14 Oct 2021 11:02:48 +0200 Subject: [PATCH 2/2] Alias the action name when executing an alert. When executing an alert, the name of the action retrieved by the Pandora FMS Server was overwritten by the name of the command, since the names of the columns are the same. Now the name of the action is aliased to preserve it. --- pandora_server/lib/PandoraFMS/Core.pm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 6c70fde7c4..ca6be12607 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -840,7 +840,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { if ($alert_mode == RECOVERED_ALERT) { # Avoid the use of alias bigger than 30 characters. @actions = get_db_rows ($dbh, - 'SELECT taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, + 'SELECT taa.name as action_name, taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, tatma.id_alert_template_module, tatma.id_alert_action, tatma.fires_min, tatma.fires_max, tatma.module_action_threshold, tatma.last_execution FROM talert_template_module_actions tatma, talert_actions taa, talert_commands tac @@ -854,7 +854,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { # Avoid the use of alias bigger than 30 characters. if ($forced_alert){ @actions = get_db_rows ($dbh, - 'SELECT taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, + 'SELECT taa.name as action_name, taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, tatma.id_alert_template_module, tatma.id_alert_action, tatma.fires_min, tatma.fires_max, tatma.module_action_threshold, tatma.last_execution FROM talert_template_module_actions tatma, talert_actions taa, talert_commands tac @@ -865,7 +865,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { } else { @actions = get_db_rows ($dbh, - 'SELECT taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, + 'SELECT taa.name as action_name, taa.*, tac.*, tatma.id AS id_alert_templ_module_actions, tatma.id_alert_template_module, tatma.id_alert_action, tatma.fires_min, tatma.fires_max, tatma.module_action_threshold, tatma.last_execution FROM talert_template_module_actions tatma, talert_actions taa, talert_commands tac @@ -881,7 +881,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { # Get default action if ($#actions < 0) { - @actions = get_db_rows ($dbh, 'SELECT * FROM talert_actions, talert_commands + @actions = get_db_rows ($dbh, 'SELECT talert_actions.name as action_name, * FROM talert_actions, talert_commands WHERE talert_actions.id = ? AND talert_actions.id_alert_command = talert_commands.id', $alert->{'id_alert_action'}); @@ -890,7 +890,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { # Event alert else { if ($alert_mode == RECOVERED_ALERT) { - @actions = get_db_rows ($dbh, 'SELECT * FROM tevent_alert_action, talert_actions, talert_commands + @actions = get_db_rows ($dbh, 'SELECT talert_actions.name as action_name, * FROM tevent_alert_action, talert_actions, talert_commands WHERE tevent_alert_action.id_alert_action = talert_actions.id AND talert_actions.id_alert_command = talert_commands.id AND tevent_alert_action.id_event_alert = ? @@ -898,7 +898,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { OR ? >= fires_min)', $alert->{'id'}, $alert->{'times_fired'}); } else { - @actions = get_db_rows ($dbh, 'SELECT * FROM tevent_alert_action, talert_actions, talert_commands + @actions = get_db_rows ($dbh, 'SELECT talert_actions.name as action_name, * FROM tevent_alert_action, talert_actions, talert_commands WHERE tevent_alert_action.id_alert_action = talert_actions.id AND talert_actions.id_alert_command = talert_commands.id AND tevent_alert_action.id_event_alert = ? @@ -910,7 +910,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { # Get default action if ($#actions < 0) { - @actions = get_db_rows ($dbh, 'SELECT * FROM talert_actions, talert_commands + @actions = get_db_rows ($dbh, 'SELECT talert_actions.name as action_name, * FROM talert_actions, talert_commands WHERE talert_actions.id = ? AND talert_actions.id_alert_command = talert_commands.id', $alert->{'id_alert_action'}); @@ -960,7 +960,7 @@ sub pandora_execute_alert ($$$$$$$$$;$$) { } pandora_execute_action ($pa_config, $data, $agent, $alert, $alert_mode, $action, $module, $dbh, $timestamp, $extra_macros); - push(@{$custom_data->{'actions'}}, safe_output($action->{'name'})); + push(@{$custom_data->{'actions'}}, safe_output($action->{'action_name'})); } else { if (defined ($module)) { logger ($pa_config, "Skipping action " . safe_output($action->{'name'}) . " for alert '" . safe_output($alert->{'name'}) . "' module '" . safe_output($module->{'nombre'}) . "'.", 10); @@ -4218,7 +4218,7 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { } # Execute alert - my $action = get_db_single_row ($dbh, 'SELECT * + my $action = get_db_single_row ($dbh, 'SELECT talert_actions.name as action_name, * FROM talert_actions, talert_commands WHERE talert_actions.id_alert_command = talert_commands.id AND talert_actions.id = ?', $alert->{'id_alert'}); @@ -4231,7 +4231,7 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { }; pandora_execute_action ($pa_config, $trap_rcv_full, \%agent, \%alert, 1, $action, undef, $dbh, $timestamp, \%macros) if (defined ($action)); - push(@{$custom_data->{'actions'}}, safe_output($action->{'name'})); + push(@{$custom_data->{'actions'}}, safe_output($action->{'action_name'})); # Generate an event, ONLY if our alert action is different from generate an event. if ($action->{'id_alert_command'} != 3 && $alert->{'disable_event'} == 0){ @@ -4252,7 +4252,7 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { $alert->{'id_as'}); foreach my $other_alert (@more_actions_snmp) { - my $other_action = get_db_single_row ($dbh, 'SELECT * + my $other_action = get_db_single_row ($dbh, 'SELECT talert_actions.name as action_name, * FROM talert_actions, talert_commands WHERE talert_actions.id_alert_command = talert_commands.id AND talert_actions.id = ?', $other_alert->{'alert_type'}); @@ -4293,7 +4293,7 @@ sub pandora_evaluate_snmp_alerts ($$$$$$$$$) { ); pandora_execute_action ($pa_config, $trap_rcv_full, \%agent, \%alert_action, 1, $other_action, undef, $dbh, $timestamp, \%macros) if (defined ($other_action)); - push(@{$custom_data->{'actions'}}, safe_output($other_action->{'name'})); + push(@{$custom_data->{'actions'}}, safe_output($other_action->{'action_name'})); # Generate an event, ONLY if our alert action is different from generate an event. if ($other_action->{'id_alert_command'} != 3 && $alert->{'disable_event'} == 0){