'.'
';
+ $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});