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 "";
}