diff --git a/pandora_console/extras/pandora_diag.php b/pandora_console/extras/pandora_diag.php index a59d94022e..7a79812d12 100644 --- a/pandora_console/extras/pandora_diag.php +++ b/pandora_console/extras/pandora_diag.php @@ -1,3 +1,14 @@ + + $value) { + db_process_sql_update( + 'tupdate_settings', + array(db_escape_key_identifier('value') => $value), + array(db_escape_key_identifier('key') => $key)); + } + + ui_print_success_message(__('License updated')); +} + +ui_require_javascript_file_enterprise('load_enterprise'); +enterprise_include_once('include/functions_license.php'); +$license = enterprise_hook('license_get_info'); + +$rows = db_get_all_rows_in_table('tupdate_settings'); + +$settings = new StdClass; +foreach ($rows as $row) { + $settings->$row['key'] = $row['value']; +} + +echo ''; + function render_info ($table) { global $console_mode; @@ -45,7 +94,189 @@ function render_row ($data, $label) { echo ""; } } +function render_row_2 ($dataMin, $labelMin, $data, $label) { + global $console_mode; + + if ($console_mode == 1) { + echo $labelMin; + echo "|"; + echo $dataMin; + echo "|"; + echo $label; + echo "|"; + echo $data; + echo "\n"; + } + else { + echo ""; + echo "
" . $labelMin . + "
" . $dataMin . + "
"; + echo ""; + echo ""; + echo "
" . $label . + "
" . $data . + "
"; + echo ""; + } +} +function get_value_sum($arr){ + foreach($arr as $clave){ + foreach($clave as $valor){ + $result += $valor; + } + } + return $result; +} +function execution_time(){ + $tiempo_inicial = microtime(true); + $count_tagente_datos = db_get_sql("SELECT COUNT(*) FROM tagente_datos"); + $tiempo_final = microtime(true); + $tiempo = $tiempo_final - $tiempo_inicial; + $tiempo_inicial2 = microtime(true); + $count_tagente_datos2 = db_get_sql("SELECT COUNT(*) FROM tagente_datos"); + $tiempo_final2 = microtime(true); + $tiempo2 = $tiempo_final2 - $tiempo_inicial2; + $status_exec_time =""; + if($tiempo > $tiempo2 * 1.2) + $status_exec_time ="Warning Status   The execution time could be degrading. For a more extensive information of this data consult the Execution Time graph"; + else + $status_exec_time = "Normal Status   The execution time is correct. For a more extensive information of this data consult the Execution Time graph"; + return $status_exec_time; + +} + +html_debug(execution_time(), true); + +function get_logs_size($file){ + $file_name = '/var'. $file .''; + $size_server_log = filesize($file_name); + return $size_server_log; + +} + +function get_status_logs($path){ + $status_server_log = ""; + $size_server_log = get_logs_size($path); + if ($size_server_log <= 10240){ + $status_server_log = "Normal Status   You have less than 10 MB of logs"; + }else{ + $status_server_log = "Warning Status   You have more than 10 MB of logs"; + } + return $status_server_log; +} +function percentage_modules_per_agent(){ + $status_average_modules = ""; + $total_agents = db_get_value_sql ('SELECT count(*) FROM tagente'); + $total_modules = db_get_value_sql ('SELECT count(*) FROM tagente_modulo'); + $average_modules_per_agent = $total_modules / $total_agents; + if($average_modules_per_agent <= 40){ + $status_average_modules = "Normal Status   The average of modules per agent is less than 40 percent"; + }else{ + $status_average_modules = "Warning Status  The average of modules per agent is more than 40 percent. You can have performance problems"; + } +return $status_average_modules; +} + +function license_capacity(){ + $license = enterprise_hook('license_get_info'); + $license_limit = $license['limit']; + $status_license_capacity = ""; + $current_count = db_get_value_sql ('SELECT count(*) FROM tagente'); + if ($current_count > $license_limit * 90 /100){ + $status_license_capacity = "Warning Status   The license capacity is more than 90 percent"; + }else{ + $status_license_capacity = "Normal Status   The license capacity is less than 90 percent"; + } + return $status_license_capacity; +} + +function status_license_params($license_param){ + $status_license_par =""; + if ($license_param <=0) + $status_license_par = "OFF"; + else + $status_license_par = "ON"; + return $status_license_par; +} +function interval_average_of_network_modules(){ + $total_network_modules = db_get_value_sql ("SELECT count(*) FROM tagente_modulo WHERE id_tipo_modulo BETWEEN 6 AND 18"); + $total_module_interval_time = db_get_value_sql ("SELECT SUM(module_interval) FROM tagente_modulo WHERE id_tipo_modulo BETWEEN 6 AND 18"); + $average_time= (int) $total_module_interval_time / $total_network_modules; + + if($average_time < 180 ){ + $status_average_modules = "Warning Status   The system has a lot of load and a very fine configuration is required"; + }else{ + $status_average_modules = "Normal Status   The system has an acceptable charge"; + } + if ($average_time == 0) + $status_average_modules = "Normal Status   The system has no load"; + return $status_average_modules; +} + +$attachment_total_files = count(glob($config['homedir']."/attachment/{*.*}",GLOB_BRACE)); + +function files_attachment_folder($total_files){ + if($total_files <= 700){ + $status_total_files = "Normal Status   The attachment folder has less than 700 files."; + }else{ + $status_total_files = "Warning Status   The attachment folder has more than 700 files."; + } + return $status_total_files; +} + +$tagente_datos_size = db_get_value_sql('SELECT COUNT(*) FROM tagente_datos'); + +function status_tagente_datos($tagente_datos_size){ + if ($tagente_datos_size <=3000){ + $tagente_datos_size = "Normal Status   The tagente_datos table has less than 3000 data."; + }else{ + $tagente_datos_size = "Warning Status   The tagente_datos table has more than 3000 data. A historical database is recommended."; + } + return $tagente_datos_size; +} + +$tables_fragmentation=db_get_sql ("SELECT (data_free/(index_length+data_length)) +as frag_ratio from information_schema.tables where DATA_FREE > 0 and table_name='tagente_datos' and table_schema='pandora'"); +$db_size=db_get_all_rows_sql("SELECT table_schema, +ROUND(SUM(data_length+index_length)/1024/1024,3) +FROM information_schema.TABLES +GROUP BY table_schema;" +); +$path_server_logs ="/log/pandora/pandora_server.log"; +$path_console_logs ="/www/html/pandora_console/pandora_console.log"; +$total_server_threads = shell_exec("ps -T aux | grep pandora_server | grep -v grep | wc -l"); +$percentage_threads_ram = shell_exec("ps axo pmem,cmd | grep pandora_server | awk '{sum+=$1} END {print sum}'"); +$percentage_threads_cpu = shell_exec("ps axo pcpu,cmd | grep pandora_server | awk '{sum+=$1} END {print sum}'"); +$innodb_log_file_size_min_rec_value = "64M"; +$innodb_log_buffer_size_min_rec_value = "16M"; +$innodb_flush_log_at_trx_commit_min_rec_value = 0; +$query_cache_limit_min_rec_value = "2M"; +$max_allowed_packet_min_rec_value = "32M"; +$innodb_buffer_pool_size_min_rec_value = shell_exec("cat /proc/meminfo | grep -i total | head -1 | awk '{print $(NF-1)*0.4/1024}'"); +$sort_buffer_size_min_rec_value = "32K"; +$join_buffer_size_min_rec_value = "265K"; +$query_cache_type_min_rec_value = "ON"; +$query_cache_size_min_rec_value = "24M"; +$innodb_lock_wait_timeout_max_rec_value = "120 seconds"; +$tables_fragmentation_max_rec_value = 10; +$thread_cache_size_max_rec_value = "8M"; +$thread_stack_min_rec_value = "256K"; +$max_connections_max_rec_value = "150"; +$key_buffer_size_min_rec_value = "256K"; +$read_buffer_size_min_rec_value = "32K"; +$read_rnd_buffer_size_min_rec_value = "32K"; +$query_cache_min_res_unit_min_rec_value = "2K"; + +function status_fragmentation_tables($tables_fragmentation_max_rec_value, $tables_fragmentation){ + $status_tables_frag = ""; + if($tables_fragmentation > $tables_fragmentation_max_rec_value) + $status_tables_frag = "Warning Status   The fragmentation tables is higher than recommended. You should defragment them."; + else + $status_tables_frag = "Normal Status   The fragmentation tables is correct."; + return $status_tables_frag; +} $console_mode = 1; if (!isset($argc)) @@ -78,8 +309,6 @@ else { if (file_exists("../include/config.php")) include "../include/config.php"; - global $config; - // Not from console, this is a web session if ((!isset($config["id_user"])) OR (!check_acl ($config["id_user"], 0, "PM"))) { echo "

You don't have privileges to use diagnostic tool

"; @@ -125,9 +354,9 @@ echo "".__("MySQL Performance metrics").""; + +render_row_2($innodb_log_file_size_min_rec_value,'InnoDB log file size (minimum recommended value)',db_get_value_sql ("SELECT @@innodb_log_file_size")/1048576 . 'M', 'InnoDB log file size (current value)'); +render_row_2($innodb_log_buffer_size_min_rec_value,'InnoDB log buffer size (minimum recommended value)',db_get_value_sql("SELECT @@innodb_log_buffer_size")/1048576 . 'M', 'InnoDB log buffer size (current value)'); +render_row_2($innodb_flush_log_at_trx_commit_min_rec_value,'InnoDB flush log at trx-commit (minimum recommended value)',db_get_value_sql("SELECT @@innodb_flush_log_at_trx_commit"), 'InnoDB flush log at trx-commit (current value)'); +render_row_2($max_allowed_packet_min_rec_value,'Maximun allowed packet',db_get_value_sql("SELECT @@max_allowed_packet")/1048576 . 'M', 'Maximun allowed packet (current value)'); +render_row_2($innodb_buffer_pool_size_min_rec_value . 'M','InnoDB buffer pool size (minimum recommended value)',db_get_value_sql("SELECT @@innodb_buffer_pool_size")/1024 . 'M', 'InnoDB buffer pool size (current value)'); +render_row_2($sort_buffer_size_min_rec_value,'Sort buffer size (minimum recommended value)',number_format(db_get_value_sql("SELECT @@sort_buffer_size")/1024, 2) . 'K', 'Sort buffer size (current value)'); +render_row_2($join_buffer_size_min_rec_value,'Join buffer size (minimum recommended value)',db_get_value_sql("SELECT @@join_buffer_size")/1024 . 'K', 'Join buffer size (current value)'); +render_row_2($query_cache_type_min_rec_value,'Query cache type (recommended value)',db_get_value_sql("SELECT @@query_cache_type"), 'Query cache type (current value)'); +render_row_2($query_cache_size_min_rec_value,'Query cache size (minimum recommended value)',db_get_value_sql("SELECT @@query_cache_size")/1048576 . 'M', 'Query cache size (current value)'); +render_row_2($query_cache_limit_min_rec_value,'Query cache limit (minimum recommended value)',db_get_value_sql("SELECT @@query_cache_limit")/1048576 . 'M', 'Query cache limit (current value)'); +render_row_2($innodb_lock_wait_timeout_max_rec_value ,'InnoDB lock wait timeout (maximum recommended value)',db_get_value_sql("SELECT @@innodb_lock_wait_timeout") . ' seconds', 'InnoDB lock wait timeout (current value)'); +render_row_2($thread_cache_size_max_rec_value ,'Thread cache size (maximum recommended value)',db_get_value_sql("SELECT @@thread_cache_size") . 'M', 'Thread cache size (current value)'); +render_row_2($thread_stack_min_rec_value ,'Thread stack (minimum recommended value)',db_get_value_sql("SELECT @@thread_stack")/1024 . 'K', 'Thread stack (current value)'); +render_row_2($max_connections_max_rec_value ,'Maximun connections (maximum recommended value)',db_get_value_sql("SELECT @@max_connections"), 'Maximum connections (current value)'); +render_row_2($key_buffer_size_min_rec_value ,'Key buffer size (minimum recommended value)',db_get_value_sql("SELECT @@key_buffer_size")/1024 . 'K', 'Key buffer size (current value)'); +render_row_2($read_buffer_size_min_rec_value ,'Read buffer size (minimum recommended value)',db_get_value_sql("SELECT @@read_buffer_size")/1024 . 'K', 'Read buffer size (current value)'); +render_row_2($read_rnd_buffer_size_min_rec_value ,'Read rnd-buffer size (minimum recommended value)',db_get_value_sql("SELECT @@read_rnd_buffer_size")/1024 . 'K', 'Read rnd-buffer size (current value)'); +render_row_2($query_cache_min_res_unit_min_rec_value ,'Query cache min-res-unit (minimum recommended value)',db_get_value_sql("SELECT @@query_cache_min_res_unit")/1024 . 'K', 'Query cache min-res-unit (current value)'); +render_row(db_get_value_sql("SELECT @@innodb_file_per_table"), 'InnoDB file per table'); + +echo "".__("Tables fragmentation in the PandoraFMS database").""; + + + +render_row ($tables_fragmentation_max_rec_value . "%", "Tables fragmentation (maximum recommended value)"); +render_row (number_format($tables_fragmentation, 2) . "%", "Tables fragmentation (current value)"); +render_row (status_fragmentation_tables($tables_fragmentation_max_rec_value, $tables_fragmentation), "Status fragmentation tables"); + +echo "".__(" PandoraFMS logs dates").""; + +render_row_2(number_format(get_logs_size($path_server_logs)/1024, 2) . "M", 'Size server logs (current value)',get_status_logs($path_server_logs),'Status server logs'); +render_row_2(number_format(get_logs_size($path_console_logs)/1024, 2) . "M", 'Size console logs (current value)',get_status_logs($path_console_logs),'Status console logs'); + +echo "".__(" PandoraFMS Licence Information").""; + +render_row( html_print_textarea ('keys[customer_key]', 10, 255, $settings->customer_key, 'style="height:40px; width:450px;"', true),'Customer key'); +render_row( $license['expiry_date'],'Expires'); +render_row( $license['limit'] . ' agents','Platform Limit'); +render_row( $license['count'] . ' agents','Current Platform Count'); +render_row( $license['count_enabled']. ' agents','Current Platform Count (enabled: items)'); +render_row( $license['count_disabled']. ' agents','Current Platform Count (disabled: items)'); +render_row( $license['license_mode'],'License Mode'); +render_row( status_license_params($license['nms']) , 'Network Management System'); +render_row( status_license_params($license['dhpm']) , 'Satellite'); +render_row( $license['licensed_to'], 'Licensed to'); +render_row( license_capacity(), "Status of agents capacity"); +render_row(percentage_modules_per_agent(), "Status of average modules per agent"); +render_row(interval_average_of_network_modules(), "Interval average of the network modules"); + +echo "".__(" Status of the attachment folder").""; + +render_row($attachment_total_files, "Total files in the attachment folder"); +render_row(files_attachment_folder($attachment_total_files), "Status of the attachment folder"); + +echo "".__(" Information from the tagente_datos table").""; + +render_row($tagente_datos_size, "Total data in the tagente_datos table"); +render_row(status_tagente_datos($tagente_datos_size), "Status of the tagente_datos table"); +render_row(execution_time(), "Degradation of the execution time when executing a count"); + +echo "".__(" Pandora FMS server threads").""; + +render_row($total_server_threads, "Total server threads"); +render_row($percentage_threads_ram . "%", "Percentage of threads used by the RAM"); +render_row($percentage_threads_cpu . "%", "Percentage of threads used by the CPU"); + +echo "".__(" Graphs modules that represent the self-monitoring system").""; + +$server_name = db_get_value_sql("SELECT name FROM tserver WHERE master = 1"); +$agent_id= db_get_value_sql ("SELECT id_agente FROM tagente WHERE nombre = '$server_name'"); + + $id_modules = agents_get_modules($agent_id); + + $id_modules = array ( + modules_get_agentmodule_id('Agents_Unknown',$agent_id), + modules_get_agentmodule_id('Database Maintenance',$agent_id), + modules_get_agentmodule_id('FreeDisk_SpoolDir',$agent_id), + modules_get_agentmodule_id('Free_RAM',$agent_id), + modules_get_agentmodule_id('Queued_Modules',$agent_id), + modules_get_agentmodule_id('Status',$agent_id), + modules_get_agentmodule_id('System_Load_AVG',$agent_id), + modules_get_agentmodule_id('Execution_time',$agent_id) + ); + + foreach ($id_modules as $id_module){ + $params =array( + 'agent_module_id' => $id_module['id_agente_modulo'], + 'period' => SECONDS_1MONTH, + 'date' => time() , + 'height' => '200' + ); + render_row(grafico_modulo_sparse ($params),"Graph of the " . $id_module['nombre']." module."); + } if ($console_mode == 0) { echo ""; }