diff --git a/pandora_console/godmode/setup/performance.php b/pandora_console/godmode/setup/performance.php index b8d211c4ca..b26290093c 100644 --- a/pandora_console/godmode/setup/performance.php +++ b/pandora_console/godmode/setup/performance.php @@ -151,6 +151,8 @@ if ($update_config == 1 && $config['history_db_enabled'] == 1) { } } +$performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control'])); + $total_agents = db_get_value('count(*)', 'tagente'); $disable_agentaccess = ($total_agents >= 200 && $config['agentaccess'] == 0) ? true : false; @@ -264,104 +266,140 @@ $table->data[1][1] = html_print_input( [ 'type' => 'number', 'size' => 5, - 'max' => 99999, + 'max' => $performance_variables_control['event_purge']->max, 'name' => 'event_purge', 'value' => $config['event_purge'], 'return' => true, - 'min' => ((((bool) $config['history_event_enabled'] === true) && $config['history_event_days'] > 0) ? $config['history_event_days'] + 1 : null), + 'min' => $performance_variables_control['event_purge']->min, 'style' => 'width:43px', ] ); $table->data[2][0] = __('Max. days before delete traps'); -$table->data[2][1] = html_print_input_text( - 'trap_purge', - $config['trap_purge'], - '', - 5, - 5, - true +$table->data[2][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['trap_purge']->max, + 'name' => 'trap_purge', + 'value' => $config['trap_purge'], + 'return' => true, + 'min' => $performance_variables_control['trap_purge']->min, + 'style' => 'width:43px', + ] ); $table->data[3][0] = __('Max. days before delete audit events'); -$table->data[3][1] = html_print_input_text( - 'audit_purge', - $config['audit_purge'], - '', - 5, - 5, - true +$table->data[3][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['audit_purge']->max, + 'name' => 'audit_purge', + 'value' => $config['audit_purge'], + 'return' => true, + 'min' => $performance_variables_control['audit_purge']->min, + 'style' => 'width:43px', + ] ); $table->data[4][0] = __('Max. days before delete string data'); -$table->data[4][1] = html_print_input_text( - 'string_purge', - $config['string_purge'], - '', - 5, - 5, - true +$table->data[4][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['string_purge']->max, + 'name' => 'string_purge', + 'value' => $config['string_purge'], + 'return' => true, + 'min' => $performance_variables_control['string_purge']->min, + 'style' => 'width:43px', + ] ); $table->data[5][0] = __('Max. days before delete GIS data'); -$table->data[5][1] = html_print_input_text( - 'gis_purge', - $config['gis_purge'], - '', - 5, - 5, - true +$table->data[5][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['gis_purge']->max, + 'name' => 'gis_purge', + 'value' => $config['gis_purge'], + 'return' => true, + 'min' => $performance_variables_control['gis_purge']->min, + 'style' => 'width:43px', + ] ); $table->data[6][0] = __('Max. days before purge'); -$table->data[6][1] = html_print_input_text( - 'days_purge', - $config['days_purge'], - '', - 5, - 5, - true +$table->data[6][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['days_purge']->max, + 'name' => 'days_purge', + 'value' => $config['days_purge'], + 'return' => true, + 'min' => $performance_variables_control['days_purge']->min, + 'style' => 'width:43px', + ] ); $table->data[7][0] = __('Max. days before compact data'); -$table->data[7][1] = html_print_input_text( - 'days_compact', - $config['days_compact'], - '', - 5, - 5, - true +$table->data[7][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['days_compact']->max, + 'name' => 'days_compact', + 'value' => $config['days_compact'], + 'return' => true, + 'min' => $performance_variables_control['days_compact']->min, + 'style' => 'width:43px', + ] ); $table->data[8][0] = __('Max. days before delete unknown modules'); -$table->data[8][1] = html_print_input_text( - 'days_delete_unknown', - $config['days_delete_unknown'], - '', - 5, - 5, - true +$table->data[8][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['days_delete_unknown']->max, + 'name' => 'days_delete_unknown', + 'value' => $config['days_delete_unknown'], + 'return' => true, + 'min' => $performance_variables_control['days_delete_unknown']->min, + 'style' => 'width:43px', + ] ); $table->data[9][0] = __('Max. days before delete not initialized modules'); -$table->data[9][1] = html_print_input_text( - 'days_delete_not_initialized', - $config['days_delete_not_initialized'], - '', - 5, - 5, - true +$table->data[9][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['days_delete_not_initialized']->max, + 'name' => 'days_delete_not_initialized', + 'value' => $config['days_delete_not_initialized'], + 'return' => true, + 'min' => $performance_variables_control['days_delete_not_initialized']->min, + 'style' => 'width:43px', + ] ); $table->data[10][0] = __('Max. days before delete autodisabled agents'); -$table->data[10][1] = html_print_input_text( - 'days_autodisable_deletion', - $config['days_autodisable_deletion'], - '', - 5, - 5, - true +$table->data[10][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['days_autodisable_deletion']->max, + 'name' => 'days_autodisable_deletion', + 'value' => $config['days_autodisable_deletion'], + 'return' => true, + 'min' => $performance_variables_control['days_autodisable_deletion']->min, + 'style' => 'width:43px', + ] ); $table->data[11][0] = __('Retention period of past special days'); @@ -502,13 +540,17 @@ $table->data[] = [ $table->data[] = [ __('Max. days before delete old network matrix data'), - html_print_input_text( - 'delete_old_network_matrix', - $config['delete_old_network_matrix'], - '', - 5, - 5, - true + html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['delete_old_network_matrix']->max, + 'name' => 'delete_old_network_matrix', + 'value' => $config['delete_old_network_matrix'], + 'return' => true, + 'min' => $performance_variables_control['delete_old_network_matrix']->min, + 'style' => 'width:43px', + ] ), ]; @@ -522,13 +564,17 @@ $table_other->size[0] = '70%'; $table_other->size[1] = '30%'; $i = 0; $table_other->data[$i][0] = __('Item limit for realtime reports'); -$table_other->data[$i++][1] = html_print_input_text( - 'report_limit', - $config['report_limit'], - '', - 5, - 5, - true +$table_other->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['report_limit']->max, + 'name' => 'report_limit', + 'value' => $config['report_limit'], + 'return' => true, + 'min' => $performance_variables_control['report_limit']->min, + 'style' => 'width:43px', + ] ); $table_other->data[$i][0] = __('Limit of events per query'); @@ -565,13 +611,17 @@ $intervals[SECONDS_2WEEK] = __('2 weeks'); $intervals[SECONDS_1MONTH] = __('Last month'); $table_other->data[$i][0] = __('Default hours for event view'); -$table_other->data[$i++][1] = html_print_input_text( - 'event_view_hr', - $config['event_view_hr'], - '', - 5, - 5, - true +$table_other->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['event_view_hr']->max, + 'name' => 'event_view_hr', + 'value' => $config['event_view_hr'], + 'return' => true, + 'min' => $performance_variables_control['event_view_hr']->min, + 'style' => 'width:43px', + ] ); $table_other->data[$i][0] = __('Use realtime statistics'); @@ -609,23 +659,33 @@ $table_other->data[$i][0] = __('Delete not init modules'); $table_other->data[$i++][1] = html_print_checkbox_switch('delete_notinit', 1, $config['delete_notinit'], true); $table_other->data[$i][0] = __('Big Operation Step to purge old data'); -$table_other->data[$i++][1] = html_print_input_text( - 'big_operation_step_datos_purge', - $config['big_operation_step_datos_purge'], - '', - 5, - 5, - true +$table_other->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['big_operation_step_datos_purge']->max, + 'name' => 'big_operation_step_datos_purge', + 'value' => $config['big_operation_step_datos_purge'], + 'return' => true, + 'min' => $performance_variables_control['big_operation_step_datos_purge']->min, + 'style' => 'width:50px', + ] ); + + $table_other->data[$i][0] = __('Small Operation Step to purge old data'); -$table_other->data[$i++][1] = html_print_input_text( - 'small_operation_step_datos_purge', - $config['small_operation_step_datos_purge'], - '', - 5, - 5, - true +$table_other->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['small_operation_step_datos_purge']->max, + 'name' => 'small_operation_step_datos_purge', + 'value' => $config['small_operation_step_datos_purge'], + 'return' => true, + 'min' => $performance_variables_control['small_operation_step_datos_purge']->min, + 'style' => 'width:50px', + ] ); $table_other->data[$i][0] = __('Graph container - Max. Items'); @@ -649,13 +709,17 @@ $table_other->data[$i++][1] = html_print_input_text( ); $table_other->data[$i][0] = __('Row limit in csv log'); -$table_other->data[$i++][1] = html_print_input_text( - 'row_limit_csv', - $config['row_limit_csv'], - '', - 5, - 10, - true +$table_other->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['row_limit_csv']->max, + 'name' => 'row_limit_csv', + 'value' => $config['row_limit_csv'], + 'return' => true, + 'min' => $performance_variables_control['row_limit_csv']->min, + 'style' => 'width:63px', + ] ); $table_other->data[$i][0] = __('SNMP walk binary'); diff --git a/pandora_console/godmode/setup/setup_general.php b/pandora_console/godmode/setup/setup_general.php index fa889f3071..987294185d 100644 --- a/pandora_console/godmode/setup/setup_general.php +++ b/pandora_console/godmode/setup/setup_general.php @@ -47,6 +47,8 @@ if (is_ajax()) { exit(); } +$performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control'])); + $table = new StdClass(); $table->class = 'databox filters'; $table->id = 'setup_general'; @@ -512,13 +514,17 @@ $table->data[$i++][1] = html_print_checkbox_switch( ); $table->data[$i][0] = __('Limit for bulk operations'); -$table->data[$i++][1] = html_print_input_text( - 'limit_parameters_massive', - $config['limit_parameters_massive'], - '', - 10, - 10, - true +$table->data[$i++][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['limit_parameters_massive']->max, + 'name' => 'limit_parameters_massive', + 'value' => $config['limit_parameters_massive'], + 'return' => true, + 'min' => $performance_variables_control['limit_parameters_massive']->min, + 'style' => 'width:50px', + ] ); $table->data[$i][0] = __('Include agents manually disabled'); diff --git a/pandora_console/godmode/setup/setup_visuals.php b/pandora_console/godmode/setup/setup_visuals.php index afc79e3f01..e27e7b858d 100755 --- a/pandora_console/godmode/setup/setup_visuals.php +++ b/pandora_console/godmode/setup/setup_visuals.php @@ -53,6 +53,8 @@ $row = 0; echo '
'; html_print_input_hidden('update_config', 1); +$performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control'])); + // ---------------------------------------------------------------------- // BEHAVIOUR CONFIGURATION // ---------------------------------------------------------------------- @@ -64,7 +66,18 @@ $table_behaviour->size[0] = '50%'; $table_behaviour->data = []; $table_behaviour->data[$row][0] = __('Block size for pagination'); -$table_behaviour->data[$row][1] = html_print_input_text('block_size', $config['global_block_size'], '', 5, 5, true); +$table_behaviour->data[$row][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['block_size']->max, + 'name' => 'block_size', + 'value' => $config['global_block_size'], + 'return' => true, + 'min' => $performance_variables_control['block_size']->min, + 'style' => 'width:50px', + ] +); $row++; $values = []; @@ -823,16 +836,19 @@ if (enterprise_installed() === false) { } $table_chars->data[$row][0] = __('Data precision'); -$table_chars->data[$row][1] = html_print_input_text( - 'graph_precision', - $config['graph_precision'], - '', - 5, - 5, - true, - $disabled_graph_precision, - false, - 'onChange="change_precision()"' +$table_chars->data[$row][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['graph_precision']->max, + 'name' => 'graph_precision', + 'value' => $config['graph_precision'], + 'return' => true, + 'min' => $performance_variables_control['graph_precision']->min, + 'style' => 'width:50px', + ($disabled_graph_precision) ? 'readonly' : '' => 'readonly', + 'onchange' => 'change_precision()', + ] ); $row++; @@ -841,17 +857,21 @@ if (isset($config['short_module_graph_data']) === false) { } $table_chars->data[$row][0] = __('Data precision in graphs'); -$table_chars->data[$row][1] = html_print_input_text( - 'short_module_graph_data', - $config['short_module_graph_data'], - '', - 5, - 5, - true, - $disabled_graph_precision, - false, - 'onChange="change_precision()"' +$table_chars->data[$row][1] = html_print_input( + [ + 'type' => 'number', + 'size' => 5, + 'max' => $performance_variables_control['short_module_graph_data']->max, + 'name' => 'short_module_graph_data', + 'value' => $config['short_module_graph_data'], + 'return' => true, + 'min' => $performance_variables_control['short_module_graph_data']->min, + 'style' => 'width:50px', + ($disabled_graph_precision) ? 'readonly' : '' => 'readonly', + 'onchange' => 'change_precision()', + ] ); + $row++; $table_chars->data[$row][0] = __( diff --git a/pandora_console/include/class/ConsoleSupervisor.php b/pandora_console/include/class/ConsoleSupervisor.php index 837be70906..4e14a73048 100644 --- a/pandora_console/include/class/ConsoleSupervisor.php +++ b/pandora_console/include/class/ConsoleSupervisor.php @@ -248,6 +248,11 @@ class ConsoleSupervisor $this->checkAuditLogOldLocation(); + /* + * Check if performance variables are corrects + */ + $this->checkPerformanceVariables(); + /* * Checks if sync queue is longer than limits. * NOTIF.SYNCQUEUE.LENGTH @@ -524,6 +529,11 @@ class ConsoleSupervisor $this->checkAuditLogOldLocation(); + /* + * Check if performance variables are corrects + */ + $this->checkPerformanceVariables(); + /* * Checks if sync queue is longer than limits. * NOTIF.SYNCQUEUE.LENGTH @@ -553,6 +563,91 @@ class ConsoleSupervisor } + /** + * Check if performance variables are corrects + * + * @return void + */ + public function checkPerformanceVariables() + { + global $config; + + $names = [ + 'event_purge' => 'Max. days before events are deleted', + 'trap_purge' => 'Max. days before traps are deleted', + 'audit_purge' => 'Max. days before audited events are deleted', + 'string_purge' => 'Max. days before string data is deleted', + 'gis_purge' => 'Max. days before GIS data is deleted', + 'days_purge' => 'Max. days before purge', + 'days_compact' => 'Max. days before data is compacted', + 'days_delete_unknown' => 'Max. days before unknown modules are deleted', + 'days_delete_not_initialized' => 'Max. days before delete not initialized modules', + 'days_autodisable_deletion' => 'Max. days before autodisabled agents are deleted', + 'delete_old_network_matrix' => 'Max. days before delete old network matrix data', + 'report_limit' => 'Item limit for real-time reports', + 'event_view_hr' => 'Default hours for event view', + 'big_operation_step_datos_purge' => 'Big Operation Step to purge old data', + 'small_operation_step_datos_purge' => 'Small Operation Step to purge old data', + 'row_limit_csv' => 'Row limit in csv log', + 'limit_parameters_massive' => 'Limit for bulk operations', + 'block_size' => 'Block size for pagination', + 'short_module_graph_data' => 'Data precision', + 'graph_precision' => 'Data precision in graphs', + ]; + + $variables = (array) json_decode(io_safe_output($config['performance_variables_control'])); + + foreach ($variables as $variable => $values) { + if (empty($config[$variable]) === true || $config[$variable] === '') { + continue; + } + + $message = ''; + $limit_value = ''; + if ($config[$variable] > $values->max) { + $message = 'Check the setting of %s, a value greater than %s is not recommended'; + $limit_value = $values->max; + } + + if ($config[$variable] < $values->min) { + $message = 'Check the setting of %s, a value less than %s is not recommended'; + $limit_value = $values->min; + } + + if ($limit_value !== '' && $message !== '') { + if (is_metaconsole() === true) { + $this->notify( + [ + 'type' => 'NOTIF.VARIABLES.PERFORMANCE.'.$variable, + 'title' => __('Incorrect config value'), + 'message' => __( + $message, + $names[$variable], + $limit_value + ), + 'url' => '__url__index.php?sec=advanced&sec2=advanced/metasetup', + ] + ); + } else { + $this->notify( + [ + 'type' => 'NOTIF.VARIABLES.PERFORMANCE.'.$variable, + 'title' => __('Incorrect config value'), + 'message' => __( + $message, + $names[$variable], + $limit_value + ), + 'url' => '__url__/index.php?sec=general&sec2=godmode/setup/setup', + ] + ); + } + } + } + + } + + /** * Executes console maintenance operations. Executed ALWAYS through CRON. * diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index 396f1ae4d0..7b6e133f22 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -2297,6 +2297,96 @@ function config_process_config() config_update_value('2Fa_auth', ''); } + if (isset($config['performance_variables_control']) === false) { + config_update_value( + 'performance_variables_control', + json_encode( + [ + 'event_purge' => [ + 'max' => 45, + 'min' => 1, + ], + 'trap_purge' => [ + 'max' => 45, + 'min' => 1, + ], + 'audit_purge' => [ + 'max' => 365, + 'min' => 7, + ], + 'string_purge' => [ + 'max' => 365, + 'min' => 7, + ], + 'gis_purge' => [ + 'max' => 365, + 'min' => 7, + ], + 'days_purge' => [ + 'max' => 365, + 'min' => 7, + ], + 'days_compact' => [ + 'max' => 365, + 'min' => 0, + ], + 'days_delete_unknown' => [ + 'max' => 90, + 'min' => 0, + ], + 'days_delete_not_initialized' => [ + 'max' => 90, + 'min' => 0, + ], + 'days_autodisable_deletion' => [ + 'max' => 90, + 'min' => 0, + ], + 'delete_old_network_matrix' => [ + 'max' => 30, + 'min' => 1, + ], + 'report_limit' => [ + 'max' => 500, + 'min' => 1, + ], + 'event_view_hr' => [ + 'max' => 360, + 'min' => 1, + ], + 'big_operation_step_datos_purge' => [ + 'max' => 10000, + 'min' => 100, + ], + 'small_operation_step_datos_purge' => [ + 'max' => 10000, + 'min' => 100, + ], + 'row_limit_csv' => [ + 'max' => 1000000, + 'min' => 1, + ], + 'limit_parameters_massive' => [ + 'max' => 2000, + 'min' => 100, + ], + 'block_size' => [ + 'max' => 200, + 'min' => 10, + ], + 'short_module_graph_data' => [ + 'max' => 20, + 'min' => 1, + ], + 'graph_precision' => [ + 'max' => 5, + 'min' => 1, + ], + ] + ) + ); + } + if (isset($config['agent_wizard_defaults']) === false) { config_update_value( 'agent_wizard_defaults', diff --git a/pandora_console/include/functions_notifications.php b/pandora_console/include/functions_notifications.php index 8ed023ddde..657ce1ff35 100644 --- a/pandora_console/include/functions_notifications.php +++ b/pandora_console/include/functions_notifications.php @@ -160,6 +160,7 @@ function notifications_get_subtypes(?string $source=null) 'NOTIF.SERVER.QUEUE', 'NOTIF.SERVER.MASTER', 'NOTIF.ACCESSSTASTICS.PERFORMANCE', + 'NOTIF.VARIABLES.PERFORMANCE', ], ];