diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control
index ccc4c495a3..b195339553 100644
--- a/pandora_agents/unix/DEBIAN/control
+++ b/pandora_agents/unix/DEBIAN/control
@@ -1,5 +1,5 @@
package: pandorafms-agent-unix
-Version: 7.0NG.733-190405
+Version: 7.0NG.733-190410
Architecture: all
Priority: optional
Section: admin
diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh
index 8780e8a466..4608351263 100644
--- a/pandora_agents/unix/DEBIAN/make_deb_package.sh
+++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh
@@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-pandora_version="7.0NG.733-190405"
+pandora_version="7.0NG.733-190410"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent
index 5674b70177..7e4da86bfd 100755
--- a/pandora_agents/unix/pandora_agent
+++ b/pandora_agents/unix/pandora_agent
@@ -42,7 +42,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.733';
-use constant AGENT_BUILD => '190405';
+use constant AGENT_BUILD => '190410';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;
@@ -662,6 +662,8 @@ sub parse_conf_modules($) {
$module->{'ff_timeout'} = $1;
} elsif ($line =~ /^\s*module_each_ff\s+(\S+)\s*$/) {
$module->{'each_ff'} = $1;
+ } elsif ($line =~ /^\s*module_ff_type\s+(\d+)\s*$/) {
+ $module->{'ff_type'} = $1;
# Macros
} elsif ($line =~ /^\s*module_macro(\S+)\s+(.*)\s*$/) {
$module->{'macros'}{$1} = $2;
@@ -2532,6 +2534,7 @@ sub write_module_xml ($@) {
$Xml .= " " . $module->{'min_ff_event_critical'} . "\n" if (defined ($module->{'min_ff_event_critical'}));
$Xml .= " " . $module->{'ff_timeout'} . "\n" if (defined ($module->{'ff_timeout'}));
$Xml .= " " . $module->{'each_ff'} . "\n" if (defined ($module->{'each_ff'}));
+ $Xml .= " " . $module->{'ff_type'} . "\n" if (defined ($module->{'ff_type'}));
# Data list
if ($#data > 0) {
diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec
index eaf92c3ca5..06214821b2 100644
--- a/pandora_agents/unix/pandora_agent.redhat.spec
+++ b/pandora_agents/unix/pandora_agent.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 7.0NG.733
-%define release 190405
+%define release 190410
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec
index a12a113b92..5c88e01c6b 100644
--- a/pandora_agents/unix/pandora_agent.spec
+++ b/pandora_agents/unix/pandora_agent.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 7.0NG.733
-%define release 190405
+%define release 190410
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer
index 2b6ba8babf..83e1fc3cdd 100755
--- a/pandora_agents/unix/pandora_agent_installer
+++ b/pandora_agents/unix/pandora_agent_installer
@@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.733"
-PI_BUILD="190405"
+PI_BUILD="190410"
OS_NAME=`uname -s`
FORCE=0
diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi
index 9dadbf90fd..fc121aea1e 100644
--- a/pandora_agents/win32/installer/pandora.mpi
+++ b/pandora_agents/win32/installer/pandora.mpi
@@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
-{190405}
+{190410}
ViewReadme
{Yes}
diff --git a/pandora_agents/win32/modules/pandora_module.cc b/pandora_agents/win32/modules/pandora_module.cc
index eac38c8fa1..e7c751d367 100644
--- a/pandora_agents/win32/modules/pandora_module.cc
+++ b/pandora_agents/win32/modules/pandora_module.cc
@@ -78,6 +78,7 @@ Pandora_Module::Pandora_Module (string name) {
this->warning_inverse = "";
this->quiet = "";
this->module_ff_interval = "";
+ this->module_ff_type = "";
this->module_alert_template = "";
this->module_crontab = "";
}
@@ -733,6 +734,13 @@ Pandora_Module::getXml () {
module_xml += this->module_ff_interval;
module_xml += "\n";
}
+
+ /* Module FF type */
+ if (this->module_ff_type != "") {
+ module_xml += "\t";
+ module_xml += this->module_ff_type;
+ module_xml += "\n";
+ }
/* Module Alert template */
if (this->module_alert_template != "") {
@@ -1028,6 +1036,16 @@ Pandora_Module::setModuleFFInterval (string value) {
this->module_ff_interval = value;
}
+/**
+ * Set the module FF type for the module.
+ *
+ * @param value module FF type value to set.
+ */
+void
+Pandora_Module::setModuleFFType (string value) {
+ this->module_ff_type = value;
+}
+
/**
* Set the module Alert template for the module.
*
diff --git a/pandora_agents/win32/modules/pandora_module.h b/pandora_agents/win32/modules/pandora_module.h
index 9fb29e1183..c766766950 100644
--- a/pandora_agents/win32/modules/pandora_module.h
+++ b/pandora_agents/win32/modules/pandora_module.h
@@ -176,6 +176,7 @@ namespace Pandora_Modules {
string unit, custom_id, str_warning, str_critical;
string module_group, warning_inverse, critical_inverse, quiet;
string module_ff_interval, module_alert_template, module_crontab;
+ string module_ff_type;
string critical_instructions, warning_instructions, unknown_instructions, tags;
protected:
@@ -277,6 +278,7 @@ namespace Pandora_Modules {
void setWarningInverse (string value);
void setQuiet (string value);
void setModuleFFInterval (string value);
+ void setModuleFFType (string value);
void setModuleAlertTemplate (string value);
void setModuleCrontab (string value);
diff --git a/pandora_agents/win32/modules/pandora_module_factory.cc b/pandora_agents/win32/modules/pandora_module_factory.cc
index 658ff724fd..b05422f104 100644
--- a/pandora_agents/win32/modules/pandora_module_factory.cc
+++ b/pandora_agents/win32/modules/pandora_module_factory.cc
@@ -119,6 +119,7 @@ using namespace Pandora_Strutils;
#define TOKEN_WARNING_INVERSE ("module_warning_inverse ")
#define TOKEN_QUIET ("module_quiet ")
#define TOKEN_MODULE_FF_INTERVAL ("module_ff_interval ")
+#define TOKEN_MODULE_FF_TYPE ("module_ff_type ")
#define TOKEN_MACRO ("module_macro")
#define TOKEN_NATIVE_ENCODING ("module_native_encoding")
#define TOKEN_ALERT_TEMPLATE ("module_alert_template")
@@ -176,7 +177,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
string module_unit, module_group, module_custom_id, module_str_warning, module_str_critical;
string module_critical_instructions, module_warning_instructions, module_unknown_instructions, module_tags;
string module_critical_inverse, module_warning_inverse, module_quiet, module_ff_interval;
- string module_native_encoding, module_alert_template;
+ string module_native_encoding, module_alert_template, module_ff_type;
string macro;
Pandora_Module *module;
bool numeric;
@@ -254,6 +255,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
module_warning_inverse = "";
module_quiet = "";
module_ff_interval = "";
+ module_ff_type = "";
module_native_encoding = "";
module_alert_template = "";
module_user_session = "";
@@ -507,6 +509,10 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
if (module_ff_interval == "") {
module_ff_interval = parseLine (line, TOKEN_MODULE_FF_INTERVAL);
}
+
+ if (module_ff_type == "") {
+ module_ff_type = parseLine (line, TOKEN_MODULE_FF_TYPE);
+ }
if (module_alert_template == "") {
module_alert_template = parseLine (line, TOKEN_ALERT_TEMPLATE);
@@ -1087,6 +1093,13 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
}
}
+ if (module_ff_type != "") {
+ pos_macro = module_ff_type.find(macro_name);
+ if (pos_macro != string::npos){
+ module_ff_type.replace(pos_macro, macro_name.size(), macro_value);
+ }
+ }
+
if (module_alert_template != "") {
pos_macro = module_alert_template.find(macro_name);
if (pos_macro != string::npos){
@@ -1447,6 +1460,10 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
if (module_ff_interval != "") {
module->setModuleFFInterval (module_ff_interval);
}
+
+ if (module_ff_type != "") {
+ module->setModuleFFType (module_ff_type);
+ }
if (module_alert_template != "") {
module->setModuleAlertTemplate (module_alert_template);
diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc
index f4f3ddac52..a270672ab4 100644
--- a/pandora_agents/win32/pandora.cc
+++ b/pandora_agents/win32/pandora.cc
@@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
-#define PANDORA_VERSION ("7.0NG.733(Build 190405)")
+#define PANDORA_VERSION ("7.0NG.733(Build 190410)")
string pandora_path;
string pandora_dir;
diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc
index 4bdc9a4096..4ad9ae2aec 100644
--- a/pandora_agents/win32/versioninfo.rc
+++ b/pandora_agents/win32/versioninfo.rc
@@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
- VALUE "ProductVersion", "(7.0NG.733(Build 190405))"
+ VALUE "ProductVersion", "(7.0NG.733(Build 190410))"
VALUE "FileVersion", "1.0.0.0"
END
END
diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control
index 9a41b31fe5..f5e1c15e3a 100644
--- a/pandora_console/DEBIAN/control
+++ b/pandora_console/DEBIAN/control
@@ -1,5 +1,5 @@
package: pandorafms-console
-Version: 7.0NG.733-190405
+Version: 7.0NG.733-190410
Architecture: all
Priority: optional
Section: admin
diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh
index 3907e8f72c..95de63e21a 100644
--- a/pandora_console/DEBIAN/make_deb_package.sh
+++ b/pandora_console/DEBIAN/make_deb_package.sh
@@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-pandora_version="7.0NG.733-190405"
+pandora_version="7.0NG.733-190410"
package_pear=0
package_pandora=1
diff --git a/pandora_console/extras/mr/27.sql b/pandora_console/extras/mr/27.sql
index e7d7a92f04..729d63c884 100644
--- a/pandora_console/extras/mr/27.sql
+++ b/pandora_console/extras/mr/27.sql
@@ -1,5 +1,14 @@
START TRANSACTION;
+ALTER TABLE `tagente_modulo` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
+ALTER TABLE `tnetwork_component` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
+ALTER TABLE `tlocal_component` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
+ALTER TABLE `tpolicy_modules` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
+
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_normal` int(4) unsigned default '0';
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_warning` int(4) unsigned default '0';
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_critical` int(4) unsigned default '0';
+
UPDATE tuser_task SET parameters = 'a:5:{i:0;a:6:{s:11:\"description\";s:28:\"Report pending to be created\";s:5:\"table\";s:7:\"treport\";s:8:\"field_id\";s:9:\"id_report\";s:10:\"field_name\";s:4:\"name\";s:4:\"type\";s:3:\"int\";s:9:\"acl_group\";s:8:\"id_group\";}i:1;a:2:{s:11:\"description\";s:46:\"Send to email addresses (separated by a comma)\";s:4:\"type\";s:4:\"text\";}i:2;a:2:{s:11:\"description\";s:7:\"Subject\";s:8:\"optional\";i:1;}i:3;a:3:{s:11:\"description\";s:7:\"Message\";s:4:\"type\";s:4:\"text\";s:8:\"optional\";i:1;}i:4;a:2:{s:11:\"description\";s:11:\"Report Type\";s:4:\"type\";s:11:\"report_type\";}}' where function_name = "cron_task_generate_report";
ALTER TABLE `treport_content` ADD COLUMN `total_time` TINYINT(1) DEFAULT '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 62fb21f817..74f12fcf2f 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
@@ -58,6 +58,7 @@ CREATE TABLE IF NOT EXISTS `tlocal_component` (
ALTER TABLE `tlocal_component` ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
ALTER TABLE `tlocal_component` ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
+ALTER TABLE `tlocal_component` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
-- -----------------------------------------------------
-- Table `tpolicy_modules`
@@ -136,6 +137,7 @@ CREATE TABLE IF NOT EXISTS `tpolicy_modules` (
ALTER TABLE `tpolicy_modules` ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
ALTER TABLE `tpolicy_modules` ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
+ALTER TABLE `tpolicy_modules` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
-- ---------------------------------------------------------------------
-- Table `tpolicies`
@@ -1162,6 +1164,9 @@ ALTER TABLE tagente_estado MODIFY `status_changes` tinyint(4) unsigned default 0
ALTER TABLE tagente_estado CHANGE `last_known_status` `known_status` tinyint(4) default 0;
ALTER TABLE tagente_estado ADD COLUMN `last_known_status` tinyint(4) default 0;
ALTER TABLE tagente_estado ADD COLUMN last_unknown_update bigint(20) NOT NULL default 0;
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_normal` int(4) unsigned default '0';
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_warning` int(4) unsigned default '0';
+ALTER TABLE `tagente_estado` ADD COLUMN `ff_critical` int(4) unsigned default '0';
-- ---------------------------------------------------------------------
-- Table `talert_actions`
@@ -1272,6 +1277,10 @@ ALTER TABLE tagente_modulo ADD COLUMN `dynamic_next` bigint(20) NOT NULL default
ALTER TABLE tagente_modulo ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
ALTER TABLE tagente_modulo ADD COLUMN `parent_module_id` int(10) unsigned NOT NULL default 0;
ALTER TABLE `tagente_modulo` ADD COLUMN `cps` int NOT NULL default 0;
+ALTER TABLE `tagente_modulo` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
+ALTER TABLE `tagente_modulo` ADD COLUMN `ff_normal` int(4) unsigned default '0';
+ALTER TABLE `tagente_modulo` ADD COLUMN `ff_warning` int(4) unsigned default '0';
+ALTER TABLE `tagente_modulo` ADD COLUMN `ff_critical` int(4) unsigned default '0';
-- ---------------------------------------------------------------------
-- Table `tagente_datos`
@@ -1291,6 +1300,7 @@ ALTER TABLE tnetwork_component ADD COLUMN `dynamic_max` int(4) default '0';
ALTER TABLE tnetwork_component ADD COLUMN `dynamic_min` int(4) default '0';
ALTER TABLE tnetwork_component ADD COLUMN `dynamic_next` bigint(20) NOT NULL default '0';
ALTER TABLE tnetwork_component ADD COLUMN `dynamic_two_tailed` tinyint(1) unsigned default '0';
+ALTER TABLE `tnetwork_component` ADD COLUMN `ff_type` tinyint(1) unsigned default '0';
-- ---------------------------------------------------------------------
-- Table `tagente`
diff --git a/pandora_console/godmode/agentes/agent_template.php b/pandora_console/godmode/agentes/agent_template.php
index ef771ebe77..d71249299c 100644
--- a/pandora_console/godmode/agentes/agent_template.php
+++ b/pandora_console/godmode/agentes/agent_template.php
@@ -106,6 +106,7 @@ if (isset($_POST['template_id'])) {
'min_ff_event_normal' => $row2['min_ff_event_normal'],
'min_ff_event_warning' => $row2['min_ff_event_warning'],
'min_ff_event_critical' => $row2['min_ff_event_critical'],
+ 'ff_type' => $row2['ff_type'],
];
$name = $row2['name'];
diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php
index 74a5c3dc9f..dd7fad8fe8 100644
--- a/pandora_console/godmode/agentes/configurar_agente.php
+++ b/pandora_console/godmode/agentes/configurar_agente.php
@@ -1320,6 +1320,7 @@ if ($update_module || $create_module) {
$ff_event_normal = (int) get_parameter('ff_event_normal');
$ff_event_warning = (int) get_parameter('ff_event_warning');
$ff_event_critical = (int) get_parameter('ff_event_critical');
+ $ff_type = (int) get_parameter('ff_type');
$each_ff = (int) get_parameter('each_ff');
$ff_timeout = (int) get_parameter('ff_timeout');
$unit = (string) get_parameter('unit_select');
@@ -1482,6 +1483,7 @@ if ($update_module) {
'min_ff_event_normal' => $ff_event_normal,
'min_ff_event_warning' => $ff_event_warning,
'min_ff_event_critical' => $ff_event_critical,
+ 'ff_type' => $ff_type,
'each_ff' => $each_ff,
'ff_timeout' => $ff_timeout,
'unit' => io_safe_output($unit),
@@ -1677,6 +1679,7 @@ if ($create_module) {
'min_ff_event_normal' => $ff_event_normal,
'min_ff_event_warning' => $ff_event_warning,
'min_ff_event_critical' => $ff_event_critical,
+ 'ff_type' => $ff_type,
'each_ff' => $each_ff,
'ff_timeout' => $ff_timeout,
'unit' => io_safe_output($unit),
diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php
index aaa2078479..9d49bb0a96 100644
--- a/pandora_console/godmode/agentes/module_manager_editor.php
+++ b/pandora_console/godmode/agentes/module_manager_editor.php
@@ -249,6 +249,7 @@ if ($id_agent_module) {
$ff_event_normal = $module['min_ff_event_normal'];
$ff_event_warning = $module['min_ff_event_warning'];
$ff_event_critical = $module['min_ff_event_critical'];
+ $ff_type = $module['ff_type'];
$each_ff = $module['each_ff'];
$ff_timeout = $module['ff_timeout'];
// Select tag info.
@@ -393,6 +394,7 @@ if ($id_agent_module) {
$ff_event_normal = '';
$ff_event_warning = '';
$ff_event_critical = '';
+ $ff_type = 0;
$id_category = 0;
diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php
index 892228042a..1724ee6622 100644
--- a/pandora_console/godmode/agentes/module_manager_editor_common.php
+++ b/pandora_console/godmode/agentes/module_manager_editor_common.php
@@ -496,10 +496,28 @@ if (modules_is_string_type($id_module_type) || $edit) {
$table_simple->data[5][1] .= '
'.__('Inverse interval').'';
$table_simple->data[5][1] .= html_print_checkbox('critical_inverse', 1, $critical_inverse, true, $disabledBecauseInPolicy);
-// FF stands for Flip-flop
-$table_simple->data[6][0] = __('FF threshold').' '.ui_print_help_icon('ff_threshold', true);
+// FF stands for Flip-flop.
+$table_simple->data[6][0] = __('FF threshold').' ';
+$table_simple->data[6][0] .= ui_print_help_icon('ff_threshold', true);
-$table_simple->data[6][1] = html_print_radio_button('each_ff', 0, '', $each_ff, true, $disabledBecauseInPolicy).' '.__('All state changing').' : ';
+$table_simple->data[6][1] .= __('Keep counters');
+$table_simple->data[6][1] .= html_print_checkbox(
+ 'ff_type',
+ 1,
+ $ff_type,
+ true,
+ $disabledBecauseInPolicy
+).'
';
+
+$table_simple->data[6][1] .= html_print_radio_button(
+ 'each_ff',
+ 0,
+ '',
+ $each_ff,
+ true,
+ $disabledBecauseInPolicy
+);
+$table_simple->data[6][1] .= ' '.__('All state changing').' : ';
$table_simple->data[6][1] .= html_print_input_text(
'ff_event',
$ff_event,
@@ -512,7 +530,16 @@ $table_simple->data[6][1] .= html_print_input_text(
'',
$classdisabledBecauseInPolicy
).'
';
-$table_simple->data[6][1] .= html_print_radio_button('each_ff', 1, '', $each_ff, true, $disabledBecauseInPolicy).' '.__('Each state changing').' : ';
+$table_simple->data[6][1] .= html_print_radio_button(
+ 'each_ff',
+ 1,
+ '',
+ $each_ff,
+ true,
+ $disabledBecauseInPolicy
+);
+
+$table_simple->data[6][1] .= ' '.__('Each state changing').' : ';
$table_simple->data[6][1] .= __('To normal');
$table_simple->data[6][1] .= html_print_input_text(
'ff_event_normal',
@@ -526,6 +553,7 @@ $table_simple->data[6][1] .= html_print_input_text(
'',
$classdisabledBecauseInPolicy
).' ';
+
$table_simple->data[6][1] .= __('To warning');
$table_simple->data[6][1] .= html_print_input_text(
'ff_event_warning',
@@ -539,6 +567,7 @@ $table_simple->data[6][1] .= html_print_input_text(
'',
$classdisabledBecauseInPolicy
).' ';
+
$table_simple->data[6][1] .= __('To critical');
$table_simple->data[6][1] .= html_print_input_text(
'ff_event_critical',
@@ -552,16 +581,31 @@ $table_simple->data[6][1] .= html_print_input_text(
'',
$classdisabledBecauseInPolicy
);
+
$table_simple->data[7][0] = __('Historical data');
if ($disabledBecauseInPolicy) {
- // If is disabled, we send a hidden in his place and print a false checkbox because HTML dont send disabled fields and could be disabled by error
- $table_simple->data[7][1] = html_print_checkbox('history_data_fake', 1, $history_data, true, $disabledBecauseInPolicy);
+ // If is disabled, we send a hidden in his place and print a false
+ // checkbox because HTML dont send disabled fields
+ // and could be disabled by error.
+ $table_simple->data[7][1] = html_print_checkbox(
+ 'history_data_fake',
+ 1,
+ $history_data,
+ true,
+ $disabledBecauseInPolicy
+ );
$table_simple->data[7][1] .= '';
} else {
- $table_simple->data[7][1] = html_print_checkbox('history_data', 1, $history_data, true, $disabledBecauseInPolicy);
+ $table_simple->data[7][1] = html_print_checkbox(
+ 'history_data',
+ 1,
+ $history_data,
+ true,
+ $disabledBecauseInPolicy
+ );
}
-// Advanced form part
+// Advanced form part.
$table_advanced = new stdClass();
$table_advanced->id = 'advanced';
$table_advanced->width = '100%';
diff --git a/pandora_console/godmode/massive/massive_edit_modules.php b/pandora_console/godmode/massive/massive_edit_modules.php
index 568e74dbbb..ae6b5b1432 100755
--- a/pandora_console/godmode/massive/massive_edit_modules.php
+++ b/pandora_console/godmode/massive/massive_edit_modules.php
@@ -844,20 +844,122 @@ $table->data['edit1'][1] = '
';
$table->data['edit6'][3] = html_print_extended_select_for_unit('unit', '-1', '', '', '0', '15', true, false, false, false, 1);
- // FF stands for Flip-flop
- $table->data['edit7'][0] = __('FF threshold').' '.ui_print_help_icon('ff_threshold', true);
+ // FF stands for Flip-flop.
+ $table->data['edit7'][0] = __('FF threshold').' ';
+ $table->data['edit7'][0] .= ui_print_help_icon(
+ 'ff_threshold',
+ true
+ );
+
$table->colspan['edit7'][1] = 3;
- $table->data['edit7'][1] = __('Mode').' '.html_print_select(['' => __('No change'), '1' => __('Each state changing'), '0' => __('All state changing')], 'each_ff', '', '', '', '', true).'
';
- $table->data['edit7'][1] .= __('All state changing').' : '.html_print_input_text('min_ff_event', '', '', 5, 15, true).'
';
+ $table->data['edit7'][1] = __('Mode').' ';
+ $table->data['edit7'][1] .= html_print_select(
+ [
+ '' => __('No change'),
+ '1' => __('Each state changing'),
+ '0' => __('All state changing'),
+ ],
+ 'each_ff',
+ '',
+ '',
+ '',
+ '',
+ true,
+ false,
+ true,
+ '',
+ false,
+ 'width: 400px;'
+ ).'
';
+
+ $table->data['edit7'][1] .= __('All state changing').' : ';
+ $table->data['edit7'][1] .= html_print_input_text(
+ 'min_ff_event',
+ '',
+ '',
+ 5,
+ 15,
+ true
+ ).'
';
+
$table->data['edit7'][1] .= __('Each state changing').' : ';
- $table->data['edit7'][1] .= __('To normal').html_print_input_text('min_ff_event_normal', '', '', 5, 15, true).' ';
- $table->data['edit7'][1] .= __('To warning').html_print_input_text('min_ff_event_warning', '', '', 5, 15, true).' ';
- $table->data['edit7'][1] .= __('To critical').html_print_input_text('min_ff_event_critical', '', '', 5, 15, true).' ';
+ $table->data['edit7'][1] .= __('To normal').' ';
+ $table->data['edit7'][1] .= html_print_input_text(
+ 'min_ff_event_normal',
+ '',
+ '',
+ 5,
+ 15,
+ true
+ ).' ';
+
+ $table->data['edit7'][1] .= __('To warning').' ';
+ $table->data['edit7'][1] .= html_print_input_text(
+ 'min_ff_event_warning',
+ '',
+ '',
+ 5,
+ 15,
+ true
+ ).' ';
+
+ $table->data['edit7'][1] .= __('To critical').' ';
+ $table->data['edit7'][1] .= html_print_input_text(
+ 'min_ff_event_critical',
+ '',
+ '',
+ 5,
+ 15,
+ true
+ ).'
';
+
+ $table->data['edit7'][1] .= __('Keep counters').' ';
+ $table->data['edit7'][1] .= html_print_select(
+ [
+ '' => __('No change'),
+ '1' => __('Active Counters'),
+ '0' => __('Inactive Counters'),
+ ],
+ 'ff_type',
+ '',
+ '',
+ '',
+ '',
+ true,
+ false,
+ true,
+ '',
+ false,
+ 'width: 400px;'
+ );
$table->data['edit8'][0] = __('FF interval');
- $table->data['edit8'][1] = html_print_input_text('module_ff_interval', '', '', 5, 10, true).ui_print_help_tip(__('Module execution flip flop time interval (in secs).'), true);
+ $table->data['edit8'][1] = html_print_input_text(
+ 'module_ff_interval',
+ '',
+ '',
+ 5,
+ 10,
+ true
+ );
+ $table->data['edit8'][1] .= ui_print_help_tip(
+ __('Module execution flip flop time interval (in secs).'),
+ true
+ );
+
$table->data['edit8'][2] = __('FF timeout');
- $table->data['edit8'][3] = html_print_input_text('ff_timeout', '', '', 5, 10, true).ui_print_help_tip(__('Timeout in secs from start of flip flop counting. If this value is exceeded, FF counter is reset. Set to 0 for no timeout.'), true);
+ $table->data['edit8'][3] = html_print_input_text(
+ 'ff_timeout',
+ '',
+ '',
+ 5,
+ 10,
+ true
+ );
+ $table->data['edit8'][3] .= ui_print_help_tip(
+ __('Timeout in secs from start of flip flop counting. If this value is exceeded, FF counter is reset. Set to 0 for no timeout.'),
+ true
+ );
$table->data['edit9'][0] = __('Historical data');
$table->data['edit9'][1] = html_print_select(['' => __('No change'), '1' => __('Yes'), '0' => __('No')], 'history_data', '', '', '', '', true);
@@ -1685,7 +1787,7 @@ function process_manage_edit($module_name, $agents_select=null, $module_status='
$agents_select = [$agents_select];
}
- // List of fields which can be updated
+ // List of fields which can be updated.
$fields = [
'dynamic_interval',
'dynamic_max',
@@ -1730,6 +1832,7 @@ function process_manage_edit($module_name, $agents_select=null, $module_status='
'min_ff_event_normal',
'min_ff_event_warning',
'min_ff_event_critical',
+ 'ff_type',
'each_ff',
'module_ff_interval',
'ff_timeout',
diff --git a/pandora_console/godmode/modules/manage_network_components.php b/pandora_console/godmode/modules/manage_network_components.php
index f9d0c65991..341a19cfbb 100644
--- a/pandora_console/godmode/modules/manage_network_components.php
+++ b/pandora_console/godmode/modules/manage_network_components.php
@@ -124,6 +124,7 @@ $pure = get_parameter('pure', 0);
$ff_event_normal = (int) get_parameter('ff_event_normal');
$ff_event_warning = (int) get_parameter('ff_event_warning');
$ff_event_critical = (int) get_parameter('ff_event_critical');
+$ff_type = (int) get_parameter('ff_type');
$each_ff = (int) get_parameter('each_ff');
if (count($id_tag_selected) == 1 && empty($id_tag_selected[0])) {
@@ -261,6 +262,7 @@ if ($create_component) {
'min_ff_event_normal' => $ff_event_normal,
'min_ff_event_warning' => $ff_event_warning,
'min_ff_event_critical' => $ff_event_critical,
+ 'ff_type' => $ff_type,
'each_ff' => $each_ff,
]
);
@@ -355,6 +357,7 @@ if ($update_component) {
'min_ff_event_normal' => $ff_event_normal,
'min_ff_event_warning' => $ff_event_warning,
'min_ff_event_critical' => $ff_event_critical,
+ 'ff_type' => $ff_type,
'each_ff' => $each_ff,
]
);
@@ -496,6 +499,7 @@ $url = ui_get_url_refresh(
'ff_event_warning' => false,
'ff_event_critical' => false,
'each_ff' => false,
+ 'ff_type' => false,
]
);
diff --git a/pandora_console/godmode/modules/manage_network_components_form.php b/pandora_console/godmode/modules/manage_network_components_form.php
index 3f9a33cb8a..fd922046d1 100644
--- a/pandora_console/godmode/modules/manage_network_components_form.php
+++ b/pandora_console/godmode/modules/manage_network_components_form.php
@@ -76,6 +76,7 @@ if ($create_network_from_module) {
$ff_event_normal = $data_module['min_ff_event_normal'];
$ff_event_warning = $data_module['min_ff_event_warning'];
$ff_event_critical = $data_module['min_ff_event_critical'];
+ $ff_type = $data_module['ff_type'];
$each_ff = $data_module['each_ff'];
}
@@ -134,6 +135,7 @@ if (isset($id)) {
$ff_event_normal = $component['min_ff_event_normal'];
$ff_event_warning = $component['min_ff_event_warning'];
$ff_event_critical = $component['min_ff_event_critical'];
+ $ff_type = $component['ff_type'];
$each_ff = $component['each_ff'];
if ($type >= 15 && $type <= 18) {
@@ -192,6 +194,7 @@ if (isset($id)) {
$ff_event_normal = 0;
$ff_event_warning = 0;
$ff_event_critical = 0;
+ $ff_type = 0;
$each_ff = 0;
$snmp_version = 1;
diff --git a/pandora_console/godmode/modules/manage_network_components_form_common.php b/pandora_console/godmode/modules/manage_network_components_form_common.php
index 2e511c6f6f..7b33a0a275 100644
--- a/pandora_console/godmode/modules/manage_network_components_form_common.php
+++ b/pandora_console/godmode/modules/manage_network_components_form_common.php
@@ -233,7 +233,23 @@ $table->data[5][1] .= html_print_checkbox('critical_inverse', 1, $critical_inver
$table->data[6][0] = __('FF threshold').' '.ui_print_help_icon('ff_threshold', true);
$table->colspan[6][1] = 3;
-$table->data[6][1] = html_print_radio_button('each_ff', 0, '', $each_ff, true).' '.__('All state changing').' : ';
+
+$table->data[6][1] = __('Keep counters');
+$table->data[6][1] .= html_print_checkbox(
+ 'ff_type',
+ 1,
+ $ff_type,
+ true
+).'
';
+
+$table->data[6][1] .= html_print_radio_button(
+ 'each_ff',
+ 0,
+ '',
+ $each_ff,
+ true
+).' '.__('All state changing').' : ';
+
$table->data[6][1] .= html_print_input_text(
'ff_event',
$ff_event,
@@ -242,13 +258,40 @@ $table->data[6][1] .= html_print_input_text(
15,
true
).'
';
-$table->data[6][1] .= html_print_radio_button('each_ff', 1, '', $each_ff, true).' '.__('Each state changing').' : ';
+$table->data[6][1] .= html_print_radio_button(
+ 'each_ff',
+ 1,
+ '',
+ $each_ff,
+ true
+).' '.__('Each state changing').' : ';
$table->data[6][1] .= __('To normal');
-$table->data[6][1] .= html_print_input_text('ff_event_normal', $ff_event_normal, '', 5, 15, true).' ';
+$table->data[6][1] .= html_print_input_text(
+ 'ff_event_normal',
+ $ff_event_normal,
+ '',
+ 5,
+ 15,
+ true
+).' ';
$table->data[6][1] .= __('To warning');
-$table->data[6][1] .= html_print_input_text('ff_event_warning', $ff_event_warning, '', 5, 15, true).' ';
+$table->data[6][1] .= html_print_input_text(
+ 'ff_event_warning',
+ $ff_event_warning,
+ '',
+ 5,
+ 15,
+ true
+).' ';
$table->data[6][1] .= __('To critical');
-$table->data[6][1] .= html_print_input_text('ff_event_critical', $ff_event_critical, '', 5, 15, true);
+$table->data[6][1] .= html_print_input_text(
+ 'ff_event_critical',
+ $ff_event_critical,
+ '',
+ 5,
+ 15,
+ true
+);
$table->data[7][0] = __('Historical data');
$table->data[7][1] = html_print_checkbox('history_data', 1, $history_data, true);
diff --git a/pandora_console/include/ajax/snmp_browser.ajax.php b/pandora_console/include/ajax/snmp_browser.ajax.php
index 11d233c676..85f8b3e68a 100644
--- a/pandora_console/include/ajax/snmp_browser.ajax.php
+++ b/pandora_console/include/ajax/snmp_browser.ajax.php
@@ -121,6 +121,7 @@ if (is_ajax()) {
'min_ff_event_normal' => 0,
'min_ff_event_warning' => 0,
'min_ff_event_critical' => 0,
+ 'ff_type' => 0,
'each_ff' => 0,
]
);
diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php
index a72e7ee8ab..f312ae2e7d 100644
--- a/pandora_console/include/config_process.php
+++ b/pandora_console/include/config_process.php
@@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
-$build_version = 'PC190405';
+$build_version = 'PC190410';
$pandora_version = 'v7.0NG.733';
// Do not overwrite default timezone set if defined.
diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php
index b2ac851e8f..7903533d74 100644
--- a/pandora_console/include/functions_api.php
+++ b/pandora_console/include/functions_api.php
@@ -1,19 +1,36 @@
;;;
- * ;;;;;;;;
- * ;;;;;;;
- * ;;;;;;
- * ;;;; in this order
- * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_)
- * example:
- *
- * api.php?op=set&op2=create_network_module&id=pepito&other=prueba|0|7|1|10|15|0|16|18|0|15|0|www.google.es|0||0|180|0|0|0|0|latency%20ping&other_mode=url_encode_separator_|
- *
- * @param $thrash3 Don't use
+ * @param string $id Name of agent to add the module.
+ * @param string $thrash1 Don't use.
+ * @param array $other It's array, $other as param is ;;;
+ * ;;;;;;;;
+ * ;;;;;;;
+ * ;;;;;;
+ * ;;;; in this order
+ * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_).
+ * @param string $thrash3 Don't use.
+ * @example: api.php?op=set&op2=create_network_module&id=pepito&other=prueba|0|7|1|10|15|0|16|18|0|15|0|www.google.es|0||0|180|0|0|0|0|latency%20ping&other_mode=url_encode_separator_|*
+ * @return mixed Return.
*/
function api_set_create_network_module($id, $thrash1, $other, $thrash3)
{
@@ -3090,22 +3106,23 @@ function api_set_create_network_module($id, $thrash1, $other, $thrash3)
'min_ff_event_critical' => $other['data'][27],
'critical_inverse' => $other['data'][28],
'warning_inverse' => $other['data'][29],
+ 'ff_type' => $other['data'][30],
];
if (! $values['descripcion']) {
$values['descripcion'] = '';
- // Column 'descripcion' cannot be null
+ // Column 'descripcion' cannot be null.
}
if (! $values['module_macros']) {
$values['module_macros'] = '';
- // Column 'module_macros' cannot be null
+ // Column 'module_macros' cannot be null.
}
$idModule = modules_create_agent_module($idAgent, $name, $values, true);
if (is_error($idModule)) {
- // TODO: Improve the error returning more info
+ // TODO: Improve the error returning more info.
returnError('error_create_network_module', __('Error in creation network module.'));
} else {
returnData('string', ['type' => 'string', 'data' => $idModule]);
@@ -3222,6 +3239,7 @@ function api_set_update_network_module($id_module, $thrash1, $other, $thrash3)
'critical_inverse',
'warning_inverse',
'policy_linked',
+ 'ff_type',
];
$values = [];
@@ -3326,22 +3344,23 @@ function api_set_create_plugin_module($id, $thrash1, $other, $thrash3)
'min_ff_event_critical' => $other['data'][32],
'critical_inverse' => $other['data'][33],
'warning_inverse' => $other['data'][34],
+ 'ff_type' => $other['data'][35],
];
if (! $values['descripcion']) {
$values['descripcion'] = '';
- // Column 'descripcion' cannot be null
+ // Column 'descripcion' cannot be null.
}
if (! $values['module_macros']) {
$values['module_macros'] = '';
- // Column 'module_macros' cannot be null
+ // Column 'module_macros' cannot be null.
}
$idModule = modules_create_agent_module($idAgent, $name, $values, true);
if (is_error($idModule)) {
- // TODO: Improve the error returning more info
+ // TODO: Improve the error returning more info.
returnError('error_create_plugin_module', __('Error in creation plugin module.'));
} else {
returnData('string', ['type' => 'string', 'data' => $idModule]);
@@ -3387,7 +3406,7 @@ function api_set_update_plugin_module($id_module, $thrash1, $other, $thrash3)
return;
}
- // If we want to change the module to a new agent
+ // If we want to change the module to a new agent.
if ($other['data'][0] != '') {
if (!util_api_check_agent_and_print_error($other['data'][0], 'string', 'AW')) {
return;
@@ -3404,7 +3423,7 @@ function api_set_update_plugin_module($id_module, $thrash1, $other, $thrash3)
}
}
- // Check if agent exists
+ // Check if agent exists.
$check_id_agent = db_get_value('id_agente', 'tagente', 'id_agente', $other['data'][0]);
if (!$check_id_agent) {
returnError('error_update_data_module', __('Error updating plugin module. Id_agent doesn\'t exist.'));
@@ -3448,6 +3467,7 @@ function api_set_update_plugin_module($id_module, $thrash1, $other, $thrash3)
'critical_inverse',
'warning_inverse',
'policy_linked',
+ 'ff_type',
];
$values = [];
@@ -3546,22 +3566,23 @@ function api_set_create_data_module($id, $thrash1, $other, $thrash3)
'ff_timeout' => $other['data'][23],
'critical_inverse' => $other['data'][24],
'warning_inverse' => $other['data'][25],
+ 'ff_type' => $other['data'][26],
];
if (! $values['descripcion']) {
$values['descripcion'] = '';
- // Column 'descripcion' cannot be null
+ // Column 'descripcion' cannot be null.
}
if (! $values['module_macros']) {
$values['module_macros'] = '';
- // Column 'module_macros' cannot be null
+ // Column 'module_macros' cannot be null.
}
$idModule = modules_create_agent_module($idAgent, $name, $values, true);
if (is_error($idModule)) {
- // TODO: Improve the error returning more info
+ // TODO: Improve the error returning more info.
returnError('error_create_data_module', __('Error in creation data module.'));
} else {
returnData('string', ['type' => 'string', 'data' => $idModule]);
@@ -3818,7 +3839,7 @@ function api_set_update_data_module($id_module, $thrash1, $other, $thrash3)
return;
}
- // If we want to change the module to a new agent
+ // If we want to change the module to a new agent.
if ($other['data'][0] != '') {
if (!util_api_check_agent_and_print_error($other['data'][0], 'string', 'AW')) {
return;
@@ -3835,7 +3856,7 @@ function api_set_update_data_module($id_module, $thrash1, $other, $thrash3)
}
}
- // Check if agent exists
+ // Check if agent exists.
$check_id_agent = db_get_value('id_agente', 'tagente', 'id_agente', $other['data'][0]);
if (!$check_id_agent) {
returnError('error_update_data_module', __('Error updating data module. Id_agent doesn\'t exist.'));
@@ -3870,6 +3891,7 @@ function api_set_update_data_module($id_module, $thrash1, $other, $thrash3)
'critical_inverse',
'warning_inverse',
'policy_linked',
+ 'ff_type',
];
$values = [];
@@ -3947,7 +3969,7 @@ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3)
$disabled_types_event[EVENTS_GOING_UNKNOWN] = (int) !$other['data'][27];
$disabled_types_event = json_encode($disabled_types_event);
- // SNMP version 3
+ // SNMP version 3.
if ($other['data'][14] == '3') {
if ($other['data'][23] != 'AES' and $other['data'][23] != 'DES') {
returnError('error_create_snmp_module', __('Error in creation SNMP module. snmp3_priv_method doesn\'t exist. Set it to \'AES\' or \'DES\'. '));
@@ -4000,6 +4022,7 @@ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3)
'min_ff_event_normal' => $other['data'][31],
'min_ff_event_warning' => $other['data'][32],
'min_ff_event_critical' => $other['data'][33],
+ 'ff_type' => $other['data'][34],
];
} else {
$values = [
@@ -4032,18 +4055,19 @@ function api_set_create_snmp_module($id, $thrash1, $other, $thrash3)
'min_ff_event_normal' => $other['data'][25],
'min_ff_event_warning' => $other['data'][26],
'min_ff_event_critical' => $other['data'][27],
+ 'ff_type' => $other['data'][28],
];
}
if (! $values['descripcion']) {
$values['descripcion'] = '';
- // Column 'descripcion' cannot be null
+ // Column 'descripcion' cannot be null.
}
$idModule = modules_create_agent_module($idAgent, $name, $values, true);
if (is_error($idModule)) {
- // TODO: Improve the error returning more info
+ // TODO: Improve the error returning more info.
returnError('error_create_snmp_module', __('Error in creation SNMP module.'));
} else {
returnData('string', ['type' => 'string', 'data' => $idModule]);
@@ -4091,7 +4115,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3)
return;
}
- // If we want to change the module to a new agent
+ // If we want to change the module to a new agent.
if ($other['data'][0] != '') {
if (!util_api_check_agent_and_print_error($other['data'][0], 'string', 'AW')) {
return;
@@ -4108,7 +4132,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3)
}
}
- // Check if agent exists
+ // Check if agent exists.
$check_id_agent = db_get_value('id_agente', 'tagente', 'id_agente', $other['data'][0]);
if (!$check_id_agent) {
returnError('error_update_data_module', __('Error updating snmp module. Id_agent doesn\'t exist.'));
@@ -4116,7 +4140,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3)
}
}
- // SNMP version 3
+ // SNMP version 3.
if ($other['data'][13] == '3') {
if ($other['data'][22] != 'AES' and $other['data'][22] != 'DES') {
returnError(
@@ -4180,6 +4204,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3)
'min_ff_event_warning',
'min_ff_event_critical',
'policy_linked',
+ 'ff_type',
];
} else {
$snmp_module_fields = [
@@ -4211,6 +4236,7 @@ function api_set_update_snmp_module($id_module, $thrash1, $other, $thrash3)
'min_ff_event_warning',
'min_ff_event_critical',
'policy_linked',
+ 'ff_type',
];
}
@@ -4308,6 +4334,7 @@ function api_set_new_network_component($id, $thrash1, $other, $thrash2)
'min_ff_event_normal' => $other['data'][20],
'min_ff_event_warning' => $other['data'][21],
'min_ff_event_critical' => $other['data'][22],
+ 'ff_type' => $other['data'][23],
];
$name_check = db_get_value('name', 'tnetwork_component', 'name', $id);
@@ -4408,6 +4435,7 @@ function api_set_new_plugin_component($id, $thrash1, $other, $thrash2)
'min_ff_event_normal' => $other['data'][24],
'min_ff_event_warning' => $other['data'][25],
'min_ff_event_critical' => $other['data'][26],
+ 'ff_type' => $other['data'][27],
];
$name_check = db_get_value('name', 'tnetwork_component', 'name', $id);
@@ -4543,6 +4571,7 @@ function api_set_new_snmp_component($id, $thrash1, $other, $thrash2)
'min_ff_event_normal' => $other['data'][29],
'min_ff_event_warning' => $other['data'][30],
'min_ff_event_critical' => $other['data'][31],
+ 'ff_type' => $other['data'][32],
];
} else {
$values = [
@@ -4574,6 +4603,7 @@ function api_set_new_snmp_component($id, $thrash1, $other, $thrash2)
'min_ff_event_normal' => $other['data'][25],
'min_ff_event_warning' => $other['data'][26],
'min_ff_event_critical' => $other['data'][27],
+ 'ff_type' => $other['data'][28],
];
}
@@ -4654,6 +4684,7 @@ function api_set_new_local_component($id, $thrash1, $other, $thrash2)
'min_ff_event_warning' => $other['data'][8],
'min_ff_event_critical' => $other['data'][9],
'ff_timeout' => $other['data'][10],
+ 'ff_type' => $other['data'][11],
];
$name_check = enterprise_hook(
@@ -6409,6 +6440,7 @@ function api_set_add_data_module_policy($id, $thrash1, $other, $thrash3)
$values['min_ff_event_warning'] = $other['data'][21];
$values['min_ff_event_critical'] = $other['data'][22];
$values['ff_timeout'] = $other['data'][23];
+ $values['ff_type'] = $other['data'][24];
if ($name_module_policy !== false) {
if ($name_module_policy[0]['name'] == $other['data'][0]) {
@@ -6650,6 +6682,7 @@ function api_set_add_network_module_policy($id, $thrash1, $other, $thrash3)
$values['min_ff_event_normal'] = $other['data'][24];
$values['min_ff_event_warning'] = $other['data'][25];
$values['min_ff_event_critical'] = $other['data'][26];
+ $values['ff_type'] = $other['data'][27];
if ($name_module_policy !== false) {
if ($name_module_policy[0]['name'] == $other['data'][0]) {
@@ -6859,6 +6892,7 @@ function api_set_add_plugin_module_policy($id, $thrash1, $other, $thrash3)
$values['min_ff_event_normal'] = $other['data'][29];
$values['min_ff_event_warning'] = $other['data'][30];
$values['min_ff_event_critical'] = $other['data'][31];
+ $values['ff_type'] = $other['data'][32];
if ($name_module_policy !== false) {
if ($name_module_policy[0]['name'] == $other['data'][0]) {
@@ -7276,6 +7310,7 @@ function api_set_add_snmp_module_policy($id, $thrash1, $other, $thrash3)
'min_ff_event_normal' => $other['data'][30],
'min_ff_event_warning' => $other['data'][31],
'min_ff_event_critical' => $other['data'][32],
+ 'ff_type' => $other['data'][33],
];
} else {
$values = [
@@ -7305,6 +7340,7 @@ function api_set_add_snmp_module_policy($id, $thrash1, $other, $thrash3)
'min_ff_event_normal' => $other['data'][24],
'min_ff_event_warning' => $other['data'][25],
'min_ff_event_critical' => $other['data'][26],
+ 'ff_type' => $other['data'][27],
];
}
@@ -11615,7 +11651,9 @@ function api_set_add_event_comment($id, $thrash2, $other, $thrash3)
global $config;
if (defined('METACONSOLE')) {
- return;
+ $meta = true;
+ } else {
+ $meta = $other['data'][1];
}
if (!check_acl($config['id_user'], 0, 'EW')) {
@@ -11627,8 +11665,7 @@ function api_set_add_event_comment($id, $thrash2, $other, $thrash3)
returnError('error_parameter', 'Error in the parameters.');
return;
} else if ($other['type'] == 'array') {
- $comment = io_safe_input($other['data'][0]);
- $meta = $other['data'][1];
+ $comment = $other['data'][0];
$history = $other['data'][2];
$status = events_comment(
@@ -13275,6 +13312,7 @@ function api_set_apply_module_template($id_template, $id_agent, $thrash3, $thras
'min_ff_event_normal' => $row2['min_ff_event_normal'],
'min_ff_event_warning' => $row2['min_ff_event_warning'],
'min_ff_event_critical' => $row2['min_ff_event_critical'],
+ 'ff_type' => $row2['ff_type'],
];
$name = $row2['name'];
diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php
index 4a24d5a964..30b86478f8 100644
--- a/pandora_console/include/functions_html.php
+++ b/pandora_console/include/functions_html.php
@@ -2744,28 +2744,7 @@ function html_print_autocomplete_modules(
global $config;
if ($id_agents === false) {
- $groups = [];
- if ($ACL) {
- $groups = users_get_groups($config['id_user'], 'AW', false);
- $groups = array_keys($groups);
-
- if (empty($groups)) {
- $id_groups = 0;
- } else {
- $id_groups = implode(',', $groups);
- }
-
- $agents = db_get_all_rows_sql(
- 'SELECT id_agente
- FROM tagente
- WHERE id_grupo IN ('.$id_groups.')'
- );
- } else {
- $agents = db_get_all_rows_sql(
- 'SELECT id_agente
- FROM tagente'
- );
- }
+ $agents = agents_get_agents();
if ($agents === false) {
$agents = [];
@@ -2777,10 +2756,7 @@ function html_print_autocomplete_modules(
}
} else {
if ($ACL) {
- $groups = users_get_groups($config['id_user'], 'AW', false);
- $groups = array_keys($groups);
-
- $agents = db_get_all_rows_sql('SELECT id_agente FROM tagente WHERE id_grupo IN ('.implode(',', $groups).')');
+ $agents = agents_get_agents();
if ($agents === false) {
$agents = [];
diff --git a/pandora_console/include/javascript/pandora_modules.js b/pandora_console/include/javascript/pandora_modules.js
index e835f87c24..d6a8e1bfe0 100644
--- a/pandora_console/include/javascript/pandora_modules.js
+++ b/pandora_console/include/javascript/pandora_modules.js
@@ -1,3 +1,8 @@
+/*
+ global $
+ global jQuery
+*/
+
/* Modules ids to check types */
var id_modules_icmp = Array(6, 7);
var id_modules_tcp = Array(8, 9, 10, 11);
@@ -95,6 +100,7 @@ function configure_modules_form() {
$("#text-unit").attr("value", "");
$("#checkbox-critical_inverse").attr("value", 0);
$("#checkbox-warning_inverse").attr("value", 0);
+ $("#checkbox-ff_type").attr("value", 0);
$("#textarea_critical_instructions").attr("value", "");
$("#textarea_warning_instructions").attr("value", "");
$("#textarea_unknown_instructions").attr("value", "");
@@ -177,6 +183,13 @@ function configure_modules_form() {
"value",
data["min_ff_event"] == 0 ? 0 : data["min_ff_event"]
);
+
+ if (data["ff_type"] != 0) {
+ $("#checkbox-ff_type").prop("checked", 1);
+ } else {
+ $("#checkbox-ff_type").prop("checked", 0);
+ }
+
$("#text-post_process").attr(
"value",
data["post_process"] == 0 ? 0 : data["post_process"]
@@ -413,6 +426,12 @@ function configure_modules_form() {
data["min_ff_event_critical"] == 0 ? 0 : data["min_ff_event_critical"]
);
+ if (data["ff_type"] != 0) {
+ $("#checkbox-ff_type").prop("checked", 1);
+ } else {
+ $("#checkbox-ff_type").prop("checked", 0);
+ }
+
// Shows manual input if post_process field is setted
if (data["post_process"] != 0) {
$("#post_process_manual").show();
diff --git a/pandora_console/install.php b/pandora_console/install.php
index b7d52c5106..454ee879b9 100644
--- a/pandora_console/install.php
+++ b/pandora_console/install.php
@@ -129,7 +129,7 @@
{'module_interval'};
}
- #Update module status
+ # Update module status.
my $min_ff_event = $module->{'min_ff_event'};
my $current_utimestamp = time ();
my $ff_timeout = $module->{'ff_timeout'};
+ # Counters.
+ my $ff_warning = $agent_status->{'ff_warning'};
+ my $ff_critical = $agent_status->{'ff_critical'};
+ my $ff_normal = $agent_status->{'ff_normal'};
+
if ($module->{'each_ff'}) {
$min_ff_event = $module->{'min_ff_event_normal'} if ($new_status == 0);
$min_ff_event = $module->{'min_ff_event_critical'} if ($new_status == 1);
$min_ff_event = $module->{'min_ff_event_warning'} if ($new_status == 2);
}
-
+
if ($last_known_status == $new_status) {
# Avoid overflows
- $status_changes = $min_ff_event if ($status_changes > $min_ff_event);
+ $status_changes = $min_ff_event if ($status_changes > $min_ff_event && $module->{'ff_type'} == 0);
$status_changes++;
if ($module_type =~ m/async/ && $min_ff_event != 0 && $ff_timeout != 0 && ($utimestamp - $ff_start_utimestamp) > $ff_timeout) {
- $status_changes = 0;
+ # Only type ff with counters.
+ $status_changes = 0 if ($module->{'ff_type'} == 0);
+
$ff_start_utimestamp = $utimestamp;
+
+ # Reset counters because expired timeout.
+ $ff_normal = 0;
+ $ff_critical = 0;
+ $ff_warning = 0;
}
}
else {
- $status_changes = 0;
+ # Only type ff with counters.
+ $status_changes = 0 if ($module->{'ff_type'} == 0);
+
$ff_start_utimestamp = $utimestamp if ($module_type =~ m/async/);
}
- # Active ff interval
- if ($module->{'module_ff_interval'} != 0 && $status_changes < $min_ff_event) {
- $current_interval = $module->{'module_ff_interval'};
- }
-
- # Change status
- if ($status_changes >= $min_ff_event && $known_status != $new_status) {
- generate_status_event ($pa_config, $processed_data, $agent, $module, $new_status, $status, $known_status, $dbh);
- $status = $new_status;
+ if ($module->{'ff_type'} == 0) {
+ # Active ff interval.
+ if ($module->{'module_ff_interval'} != 0 && $status_changes < $min_ff_event) {
+ $current_interval = $module->{'module_ff_interval'};
+ }
+
+ # Change status.
+ if ($status_changes >= $min_ff_event && $known_status != $new_status) {
+ generate_status_event ($pa_config, $processed_data, $agent, $module, $new_status, $status, $known_status, $dbh);
+ $status = $new_status;
- # Update module status count.
- $mark_for_update = 1;
+ # Update module status count.
+ $mark_for_update = 1;
- # Safe mode execution.
- if ($agent->{'safe_mode_module'} == $module->{'id_agente_modulo'}) {
- safe_mode($pa_config, $agent, $module, $new_status, $known_status, $dbh);
+ # Safe mode execution.
+ if ($agent->{'safe_mode_module'} == $module->{'id_agente_modulo'}) {
+ safe_mode($pa_config, $agent, $module, $new_status, $known_status, $dbh);
+ }
+ }
+ } else {
+ if ($status == $new_status) {
+ # If the status is equal to the previous status reset the counters.
+ $ff_normal = 0;
+ $ff_critical = 0;
+ $ff_warning = 0;
+ } else {
+ # Sequential critical and normal status are needed
+ # if don't, reset counters.
+ if ($last_known_status == 1 && $new_status != 1) {
+ $ff_critical = 0;
+ } elsif ($last_known_status == 0 && $new_status != 0) {
+ $ff_normal = 0;
+ }
+
+ # Increase counters.
+ $ff_critical++ if ($new_status == 1);
+ $ff_warning++ if ($new_status == 2);
+ $ff_normal++ if ($new_status == 0);
+ }
+
+ if ( ($new_status == 0 && $ff_normal >= $min_ff_event)
+ || ($new_status == 1 && $ff_critical >= $min_ff_event)
+ || ($new_status == 2 && $ff_warning >= $min_ff_event)) {
+ # Change status generate event.
+ generate_status_event ($pa_config, $processed_data, $agent, $module, $new_status, $status, $known_status, $dbh);
+ $status = $new_status;
+
+ # Update module status count.
+ $mark_for_update = 1;
+
+ # Safe mode execution.
+ if ($agent->{'safe_mode_module'} == $module->{'id_agente_modulo'}) {
+ safe_mode($pa_config, $agent, $module, $new_status, $known_status, $dbh);
+ }
+
+ # Reset counters because change status.
+ $ff_normal = 0;
+ $ff_critical = 0;
+ $ff_warning = 0;
+ } else {
+ # Active ff interval
+ if ($module->{'module_ff_interval'} != 0) {
+ $current_interval = $module->{'module_ff_interval'};
+ }
}
}
+
# Set not-init modules to normal status even if min_ff_event is not matched the first time they receive data.
# if critical or warning status, just pass through here and wait the time min_ff_event will be matched.
- elsif ($status == 4) {
+ if ($status == 4) {
generate_status_event ($pa_config, $processed_data, $agent, $module, 0, $status, $known_status, $dbh);
$status = 0;
@@ -1663,6 +1726,11 @@ sub pandora_process_module ($$$$$$$$$;$) {
generate_status_event ($pa_config, $processed_data, $agent, $module, $known_status, $status, $known_status, $dbh);
$status = $known_status;
+ # reset counters because change status.
+ $ff_normal = 0;
+ $ff_critical = 0;
+ $ff_warning = 0;
+
# Update module status count.
$mark_for_update = 1;
}
@@ -1692,10 +1760,11 @@ sub pandora_process_module ($$$$$$$$$;$) {
status_changes = ?, utimestamp = ?, timestamp = ?,
id_agente = ?, current_interval = ?, running_by = ?,
last_execution_try = ?, last_try = ?, last_error = ?,
- ff_start_utimestamp = ?
+ ff_start_utimestamp = ?, ff_normal = ?, ff_warning = ?, ff_critical = ?
WHERE id_agente_modulo = ?', $processed_data, $status, $status, $new_status, $new_status, $status_changes,
$current_utimestamp, $timestamp, $module->{'id_agente'}, $current_interval, $server_id,
- $utimestamp, ($save == 1) ? $timestamp : $agent_status->{'last_try'}, $last_error, $ff_start_utimestamp, $module->{'id_agente_modulo'});
+ $utimestamp, ($save == 1) ? $timestamp : $agent_status->{'last_try'}, $last_error, $ff_start_utimestamp,
+ $ff_normal, $ff_warning, $ff_critical, $module->{'id_agente_modulo'});
}
# Save module data. Async and log4x modules are not compressed.
diff --git a/pandora_server/lib/PandoraFMS/DataServer.pm b/pandora_server/lib/PandoraFMS/DataServer.pm
index bc66eb2d72..8e08a7d482 100644
--- a/pandora_server/lib/PandoraFMS/DataServer.pm
+++ b/pandora_server/lib/PandoraFMS/DataServer.pm
@@ -641,7 +641,7 @@ sub process_module_data ($$$$$$$$$$) {
'unknown_instructions' => '', 'tags' => '', 'critical_inverse' => 0, 'warning_inverse' => 0, 'quiet' => 0,
'module_ff_interval' => 0, 'alert_template' => '', 'crontab' => '', 'min_ff_event_normal' => 0,
'min_ff_event_warning' => 0, 'min_ff_event_critical' => 0, 'ff_timeout' => 0, 'each_ff' => 0, 'module_parent' => 0,
- 'module_parent_unlink' => 0, 'cron_interval' => 0};
+ 'module_parent_unlink' => 0, 'cron_interval' => 0, 'ff_type' => 0};
# Other tags will be saved here
$module_conf->{'extended_info'} = '';
diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm
index cfedeced72..6615be65a7 100644
--- a/pandora_server/lib/PandoraFMS/PluginTools.pm
+++ b/pandora_server/lib/PandoraFMS/PluginTools.pm
@@ -32,7 +32,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.733";
-my $pandora_build = "190405";
+my $pandora_build = "190410";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
@@ -721,6 +721,9 @@ sub print_module {
if (! (empty ($data->{min_ff_event_critical}))) {
$xml_module .= "\t{min_ff_event_critical} . "]]>\n";
}
+ if (! (empty ($data->{ff_type}))) {
+ $xml_module .= "\t{ff_type} . "]]>\n";
+ }
if (! (empty ($data->{ff_timeout}))) {
$xml_module .= "\t{ff_timeout} . "]]>\n";
}
diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec
index 4176856dfe..2fa2a2ccfc 100644
--- a/pandora_server/pandora_server.redhat.spec
+++ b/pandora_server/pandora_server.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.733
-%define release 190405
+%define release 190410
Summary: Pandora FMS Server
Name: %{name}
diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec
index 6b55058a13..02befd3046 100644
--- a/pandora_server/pandora_server.spec
+++ b/pandora_server/pandora_server.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.733
-%define release 190405
+%define release 190410
Summary: Pandora FMS Server
Name: %{name}
diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer
index 961e2132c0..f4def92b06 100755
--- a/pandora_server/pandora_server_installer
+++ b/pandora_server/pandora_server_installer
@@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.733"
-PI_BUILD="190405"
+PI_BUILD="190410"
MODE=$1
if [ $# -gt 1 ]; then
diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl
index 0fadb363c7..56dad39390 100644
--- a/pandora_server/util/pandora_db.pl
+++ b/pandora_server/util/pandora_db.pl
@@ -34,7 +34,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
-my $version = "7.0NG.733 PS190405";
+my $version = "7.0NG.733 PS190410";
# Pandora server configuration
my %conf;
diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl
index 9c2a3f5047..b0715d5029 100644
--- a/pandora_server/util/pandora_manage.pl
+++ b/pandora_server/util/pandora_manage.pl
@@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
-my $version = "7.0NG.733 PS190405";
+my $version = "7.0NG.733 PS190410";
# save program name for logging
my $progname = basename($0);