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);