diff --git a/pandora_console/extras/mr/46.sql b/pandora_console/extras/mr/46.sql index bef40253a2..833e1a7a49 100644 --- a/pandora_console/extras/mr/46.sql +++ b/pandora_console/extras/mr/46.sql @@ -5,6 +5,22 @@ ALTER TABLE `tagent_custom_fields` MODIFY COLUMN `combo_values` TEXT NOT NULL DE ALTER TABLE `treport_content` MODIFY `external_source` MEDIUMTEXT; ALTER TABLE `treport_content_template` MODIFY `external_source` MEDIUMTEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `agent` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_usuario` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_grupo` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `evento` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `event_type` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `module` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `alert` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `criticity` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `user_comment` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_tag` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `name` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `group_recursion` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_content` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_source` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_agent` TEXT; + UPDATE `talert_commands` SET `fields_descriptions` = '[\"Event name\",\"Event type\",\"Source\",\"Agent name or _agent_\",\"Event severity\",\"ID extra\",\"Tags separated by commas\",\"Comments\",\"\",\"\"]' WHERE `name` = "Monitoring Event"; UPDATE `tskin` SET `name` = 'Default theme' , `relative_path` = 'pandora.css' WHERE `id` = 1; diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index 695d92e764..304c48535e 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -628,6 +628,22 @@ ALTER TABLE `tevent_rule` MODIFY COLUMN `event_type` enum('','unknown','alert_fi ALTER TABLE `tevent_rule` MODIFY COLUMN `criticity` int(4) unsigned DEFAULT NULL; ALTER TABLE `tevent_rule` MODIFY COLUMN `id_grupo` mediumint(4) DEFAULT NULL; +ALTER TABLE `tevent_rule` MODIFY COLUMN `agent` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_usuario` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_grupo` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `evento` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `event_type` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `module` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `alert` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `criticity` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `user_comment` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `id_tag` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `name` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `group_recursion` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_content` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_source` TEXT; +ALTER TABLE `tevent_rule` MODIFY COLUMN `log_agent` TEXT; + UPDATE `tevent_rule` SET `operator_agent` = "REGEX" WHERE `agent` != ''; UPDATE `tevent_rule` SET `operator_id_usuario` = "REGEX" WHERE `id_usuario` != ''; UPDATE `tevent_rule` SET `operator_id_grupo` = "REGEX" WHERE `id_grupo` > 0; diff --git a/pandora_console/godmode/reporting/visual_console_builder.editor.php b/pandora_console/godmode/reporting/visual_console_builder.editor.php index 310efdfabc..48ef5cc2f9 100755 --- a/pandora_console/godmode/reporting/visual_console_builder.editor.php +++ b/pandora_console/godmode/reporting/visual_console_builder.editor.php @@ -85,7 +85,7 @@ visual_map_editor_print_item_palette($visualConsole['id'], $background); if (!defined('METACONSOLE')) { echo '
'; } else { - echo '
'; + echo '
'; } echo '
'; + $form_items['preview_row']['html'] = ''.'
'; $form_items['background_color'] = []; $form_items['background_color']['items'] = [ @@ -358,6 +358,18 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) 'white', true, false, + false, + '', + false, + '', + false, + false, + false, + '', + false, + false, + false, + false, false ).''; @@ -510,7 +522,29 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) $form_items['event_max_time_row'] = []; $form_items['event_max_time_row']['items'] = ['auto_sla_graph']; $form_items['event_max_time_row']['html'] = ''.__('Max. Time').' - '.html_print_select($event_times, 'event_max_time_row', '', '', 0, 86400, true, false, false).''; + '.html_print_select( + $event_times, + 'event_max_time_row', + '', + '', + 0, + 86400, + true, + false, + false, + '', + false, + '', + false, + false, + false, + '', + false, + false, + false, + false, + false + ).''; $form_items['type_graph'] = []; $form_items['type_graph']['items'] = [ @@ -530,6 +564,18 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) 'area', true, false, + false, + '', + false, + '', + false, + false, + false, + '', + false, + false, + false, + false, false ).''; @@ -800,7 +846,29 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) $form_items['bars_graph_type'] = []; $form_items['bars_graph_type']['items'] = ['bars_graph']; $form_items['bars_graph_type']['html'] = ''.__('Type').' - '.html_print_select($bars_graph_types, 'bars_graph_type', 'vertical', '', '', '', true).''; + '.html_print_select( + $bars_graph_types, + 'bars_graph_type', + 'vertical', + '', + '', + '', + true, + false, + true, + '', + false, + '', + false, + false, + false, + '', + false, + false, + false, + false, + false + ).''; // Insert and modify before the buttons to create or update. if (enterprise_installed()) { @@ -809,11 +877,11 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) $form_items['button_update_row'] = []; $form_items['button_update_row']['items'] = ['datos']; - $form_items['button_update_row']['html'] = ''.html_print_button(__('Cancel'), 'cancel_button', false, 'cancel_button_palette_callback();', 'class="sub cancel"', true).' '.html_print_button(__('Update'), 'update_button', false, 'update_button_palette_callback();', 'class="sub upd"', true).''; + $form_items['button_update_row']['html'] = ''.html_print_button(__('Cancel'), 'cancel_button', false, 'cancel_button_palette_callback();', 'class="sub cancel"', true).' '.html_print_button(__('Update'), 'update_button', false, 'update_button_palette_callback();', 'class="sub upd"', true).''; $form_items['button_create_row'] = []; $form_items['button_create_row']['items'] = ['datos']; - $form_items['button_create_row']['html'] = ''.html_print_button(__('Cancel'), 'cancel_button', false, 'cancel_button_palette_callback();', 'class="sub cancel"', true).' '.html_print_button(__('Create'), 'create_button', false, 'create_button_palette_callback();', 'class="sub wand"', true).''; + $form_items['button_create_row']['html'] = ''.html_print_button(__('Cancel'), 'cancel_button', false, 'cancel_button_palette_callback();', 'class="sub cancel"', true).' '.html_print_button(__('Create'), 'create_button', false, 'create_button_palette_callback();', 'class="sub wand"', true).''; foreach ($form_items as $item => $item_options) { echo ''; @@ -829,7 +897,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) - + div { margin-left: 10px; } +ul.sample li { + padding-bottom: 1em; +} +ul.sample li:last-child { + padding-bottom: 0; +} + #rule-builder .rule-builder-actions li { display: inline; width: auto; } +li#li-filters_show_action_alerts > label, +li#li-buttons-alert-list > label, +li#li-filters-alert-list > label { + width: initial; +} + +form#advanced_filters_alert ul li label, +form#general_filters_alert ul li label { + width: 150px; +} + +#rules.flex-row label { + flex: 1 1 70px; +} + +li#li-from-to-threshold > label:not(:first-child), +li#li-time-from-to > label:not(:first-child) { + width: initial; + margin-right: 15px; +} + #rule-builder .rule-builder-actions li label { width: 0; } @@ -21,10 +53,6 @@ ul.sample { flex: 1 1 300px; } -#rules.flex-row label { - flex: 1 1 70px; -} - #rules.flex-row div { flex: 10 1 200px; } @@ -39,17 +67,6 @@ span.rule-title { width: 100%; } -li#li-filters_show_action_alerts > label, -li#li-buttons-alert-list > label, -li#li-filters-alert-list > label { - width: initial; -} - -form#advanced_filters_alert ul li label, -form#general_filters_alert ul li label { - width: 150px; -} - form#conditions_filters_alert ul li label:first-child { width: 300px; } @@ -62,17 +79,14 @@ li#li-description textarea { flex: 1 1 auto; } -li#li-from-to-threshold > label:not(:first-child), -li#li-time-from-to > label:not(:first-child) { - width: initial; - margin-right: 15px; -} - li#li-from-to-threshold > input, li#li-time-from-to > input { margin-right: 15px; } - +.mode_table_firing table.info_table thead tr th img { + padding: 10px; + vertical-align: middle; +} form#advanced_filters_alert textarea { flex: 1 1 auto; height: 5em; @@ -106,19 +120,16 @@ ul.sample { max-width: 50%; flex-grow: 1; justify-content: space-between; + min-width: 300px; } -ul.sample li { - padding-bottom: 1em; -} -ul.sample li:last-child { - padding-bottom: 0; -} + div.target { flex-grow: 1; flex-basis: auto; margin-left: 3em; display: flex; flex-direction: column; + width: 100%; } div.target.flex { display: block; @@ -140,28 +151,28 @@ div.target.flex { position: relative; top: 25%; display: block; - left: 37%; + margin: 0 auto; font-size: 3em; color: #aaa; overflow: hidden; - width: 6em; background: #fff; text-align: center; - z-index: 2; } -div#rules.show::after { +div#rules::after { + content: "Drop Here"; position: relative; - top: 25%; display: block; - left: 37%; + margin: 2em auto; font-size: 3em; color: #aaa; overflow: hidden; - width: 6em; background: #fff; text-align: center; - z-index: 2; } +div#rules.cleanup::after { + content: none; +} + div#rules.show { box-shadow: 0 0 15px -5px #424242; border: 1px solid #ddd; @@ -185,7 +196,10 @@ div#rules.show { opacity: 0.2; cursor: not-allowed; } - +.field.disabledElements { + opacity: 0.2; + cursor: not-allowed; +} .log { background-color: #638460; } @@ -209,10 +223,6 @@ div#rules.show { background-color: #424242; } -.rules div { - display: inline-block; -} - .inEdit { background-color: #888; } @@ -253,11 +263,6 @@ div#rules.show { font-weight: bolder; } -.mode_table_firing table.info_table thead tr th img { - padding: 10px; - vertical-align: middle; -} - #rules select.click-list-elements { border-radius: 0px; background-color: #424242; diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 2b5377fd12..740e5c6053 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -8348,7 +8348,7 @@ span, float: right; margin-right: 100px; } -.steps_vsmap { +div.steps_vsmap { display: none; position: absolute; z-index: 99; diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index ce732ff8fd..9207fcc941 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -2913,18 +2913,18 @@ CREATE TABLE IF NOT EXISTS `tevent_rule` ( `order` int(10) unsigned default '0', `window` int(10) NOT NULL default '0', `count` int(4) NOT NULL default '1', - `agent` text default '', - `id_usuario` varchar(100) NOT NULL default '', - `id_grupo` mediumint(4) default NULL, - `evento` text NOT NULL default '', - `event_type` enum('','unknown','alert_fired','alert_recovered','alert_ceased','alert_manual_validation','recon_host_detected','system','error','new_agent','going_up_warning','going_up_critical','going_down_warning','going_down_normal','going_down_critical','going_up_normal') default '', - `module` text default '', - `alert` text default '', - `criticity` int(4) unsigned default NULL, - `user_comment` text NOT NULL, - `id_tag` integer(10) unsigned NOT NULL default '0', - `name` text default '', - `group_recursion` INT(1) unsigned default 0, + `agent` text, + `id_usuario` text, + `id_grupo` text, + `evento` text, + `event_type` text, + `module` text, + `alert` text, + `criticity` text, + `user_comment` text, + `id_tag` text, + `name` text, + `group_recursion` text, `log_content` text, `log_source` text, `log_agent` text, diff --git a/pandora_server/conf/pandora_server.conf.new b/pandora_server/conf/pandora_server.conf.new index ad2ef22e28..53ae7a4604 100644 --- a/pandora_server/conf/pandora_server.conf.new +++ b/pandora_server/conf/pandora_server.conf.new @@ -470,6 +470,9 @@ log_window 3600 # Pre-load windows on start with available information. (PANDORA FMS ENTERPRISE ONLY). #preload_windows 0 +# Correlated Alerts, group cache ttl (in seconds). Set to 0 to disable. (PANDORA FMS ENTERPRISE ONLY). +#event_server_cache_ttl 10 + # If set to 1, an alert will not be fired if the last event it generated is in 'in-process' status. event_inhibit_alerts 0 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 85c73ea84b..4c131bc080 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -302,6 +302,7 @@ sub pandora_load_config { $pa_config->{"eventserver"} = 1; # 4.0 $pa_config->{"event_window"} = 3600; # 4.0 $pa_config->{"log_window"} = 3600; # 7.741 + $pa_config->{"event_server_cache_ttl"} = 10; # 7.754 $pa_config->{"preload_windows"} = 0; # 7.741 $pa_config->{"icmpserver"} = 0; # 4.0 $pa_config->{"icmp_threads"} = 3; # 4.0 @@ -1001,6 +1002,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^preload_windows\s+([0-9]*)/i) { $pa_config->{'preload_windows'}= clean_blank($1); } + elsif ($parametro =~ m/^event_server_cache_ttl\s+([0-9]*)/i) { + $pa_config->{"event_server_cache_ttl"} = clean_blank($1); + } elsif ($parametro =~ m/^snmp_threads\s+([0-9]*)/i) { $pa_config->{'snmp_threads'}= clean_blank($1); } diff --git a/pandora_server/lib/PandoraFMS/DB.pm b/pandora_server/lib/PandoraFMS/DB.pm index 045e84f1e2..1148984d18 100644 --- a/pandora_server/lib/PandoraFMS/DB.pm +++ b/pandora_server/lib/PandoraFMS/DB.pm @@ -92,6 +92,7 @@ our @EXPORT = qw( get_priority_name get_server_id get_tag_id + get_tag_name get_group_name get_template_id get_template_module_id @@ -276,6 +277,20 @@ sub get_tag_id ($$) { return defined ($rc) ? $rc : -1; } +######################################################################## +## Return the name of a tag given its id. +######################################################################## +sub get_tag_name ($$) { + my ($dbh, $id) = @_; + + my $rc = get_db_value( + $dbh, "SELECT name FROM ttag + WHERE id_tag = ?", + safe_input($id) + ); + return $rc; +} + ######################################################################## ## Return the first enabled server name found. ######################################################################## diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 0925ace606..f7d7961f31 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -792,59 +792,64 @@ sub transfer_xml { my $file_name; my $file_path; - if (! (empty ($name))) { - $file_name = $name . "." . sprintf("%d",getCurrentUTimeMilis(). (rand()*10000)) . ".data"; - } - else { - # Inherit file name - ($file_name) = $xml =~ /\s+agent_name='(.*?)'\s+.*$/m; - if (empty($file_name)){ - ($file_name) = $xml =~ /\s+agent_name="(.*?)"\s+.*$/m; + if (! -f $xml) { + if (! (empty ($name))) { + $file_name = $name . "." . sprintf("%d",getCurrentUTimeMilis(). (rand()*10000)) . ".data"; } - if (empty($file_name)){ - $file_name = trim(`hostname`); + else { + # Inherit file name + ($file_name) = $xml =~ /\s+agent_name='(.*?)'\s+.*$/m; + if (empty($file_name)){ + ($file_name) = $xml =~ /\s+agent_name="(.*?)"\s+.*$/m; + } + if (empty($file_name)){ + $file_name = trim(`hostname`); + } + + $file_name .= "." . sprintf("%d",time()) . ".data"; } - $file_name .= "." . sprintf("%d",time()) . ".data"; - } + logger($conf, "transfer_xml", "Failed to generate file name.") if empty($file_name); - logger($conf, "transfer_xml", "Failed to generate file name.") if empty($file_name); + $conf->{temp} = $conf->{tmp} if (empty($conf->{temp}) && defined($conf->{tmp})); + $conf->{temp} = $conf->{temporal} if (empty($conf->{temp}) && defined($conf->{temporal})); + $conf->{temp} = $conf->{__system}->{tmp} if (empty($conf->{temp}) && defined($conf->{__system})) && (ref($conf->{__system}) eq "HASH"); + $conf->{temp} = $ENV{'TMP'} if empty($conf->{temp}) && $^O =~ /win/i; + $conf->{temp} = '/tmp' if empty($conf->{temp}) && $^O =~ /lin/i; - $conf->{temp} = $conf->{tmp} if (empty($conf->{temp}) && defined($conf->{tmp})); - $conf->{temp} = $conf->{temporal} if (empty($conf->{temp}) && defined($conf->{temporal})); - $conf->{temp} = $conf->{__system}->{tmp} if (empty($conf->{temp}) && defined($conf->{__system})) && (ref($conf->{__system}) eq "HASH"); - $conf->{temp} = $ENV{'TMP'} if empty($conf->{temp}) && $^O =~ /win/i; - $conf->{temp} = '/tmp' if empty($conf->{temp}) && $^O =~ /lin/i; - - $file_path = $conf->{temp} . "/" . $file_name; - - #Creating XML file in temp directory - - if ( -e $file_path ) { - sleep (1); - $file_name = $name . "." . sprintf("%d",time()) . ".data"; $file_path = $conf->{temp} . "/" . $file_name; + + #Creating XML file in temp directory + + if ( -e $file_path ) { + sleep (1); + $file_name = $name . "." . sprintf("%d",time()) . ".data"; + $file_path = $conf->{temp} . "/" . $file_name; + } + + my $r = open (my $FD, ">>", $file_path); + + if (empty($r)) { + print_stderror($conf, "Cannot write to [" . $file_path . "]", $conf->{'debug'}); + return undef; + } + + my $bin_opts = ':raw:encoding(UTF8)'; + + if ($^O eq "Windows") { + $bin_opts .= ':crlf'; + } + + binmode($FD, $bin_opts); + + print $FD $xml; + + close ($FD); + + } else { + $file_path = $xml; } - my $r = open (my $FD, ">>", $file_path); - - if (empty($r)) { - print_stderror($conf, "Cannot write to [" . $file_path . "]", $conf->{'debug'}); - return undef; - } - - my $bin_opts = ':raw:encoding(UTF8)'; - - if ($^O eq "Windows") { - $bin_opts .= ':crlf'; - } - - binmode($FD, $bin_opts); - - print $FD $xml; - - close ($FD); - # Reassign default values if not present $conf->{tentacle_client} = "tentacle_client" if empty($conf->{tentacle_client}); $conf->{tentacle_port} = "41121" if empty($conf->{tentacle_port});