diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 7f7ac39596..a235816032 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,11 @@ +2010-10-11 Miguel de Dios + + * include/functions_db.php: cleaned source code style. + + * extensions/system_info.php: first version of extension for extract system + info of Pandora System, at the moment run as PHP script shell, the source + code for console is commented because I will change for new source code. + 2010-10-11 Ramon Novoa * include/fgraph.php: Search history DB if necessary for module charts. diff --git a/pandora_console/extensions/system_info.php b/pandora_console/extensions/system_info.php new file mode 100644 index 0000000000..9ee2bf3994 --- /dev/null +++ b/pandora_console/extensions/system_info.php @@ -0,0 +1,490 @@ + $temp2[0], + 'Size' => $temp2[1], + 'Used' => $temp2[2], + 'Use%' => $temp2[3], + 'Avail' => $temp2[4], + 'Mounted_on' => $temp2[5] + ); + $disk[] = $info; + } + + $systemInfo['disk'] = $disk; + + $result = shell_exec('uptime'); + preg_match('/.* load average: (.*)/', $result, $matches); + + $systemInfo['load_average'] = $matches[1]; + + $result = shell_exec('ps -Ao cmd | tail --lines=+2'); + $temp = explode("\n", $result); + foreach ($temp as $line) { + if ($line != '') { + $process[] = $line; + } + } + $systemInfo['process'] = $process; + + $result = shell_exec('du -h /var/log/pandora | cut -d"/" -f1'); + $systemInfo['size_var_log_pandora'] = $result; + + $result = shell_exec('date'); + $systemInfo['date'] = $result; +} + +function getLastLinesLog($file, $numLines = 2000) { + $result = shell_exec('tail -n ' . $numLines . ' ' . $file); + + return $result; +} + +function show_logfile($file_name, $numLines) { + global $config; + + if (!file_exists($file_name)){ + echo "

".__("Cannot find file"). "(".$file_name; + echo ")

"; + } + else { + echo "

" . $file_name . "

"; + echo ""; + } +} + +function getLinesLog($file, $numLines = 2000) { + +} + +function getLastLog($show = true, $numLines = 2000) { + global $config; + + show_logfile($config["homedir"]."/pandora_console.log", $numLines); + show_logfile("/var/log/pandora/pandora_server.log", $numLines); + show_logfile("/var/log/pandora/pandora_server.error", $numLines); +} + +function mainSystemInfo() { + global $config; + + if (! give_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) { + audit_db ($config['id_user'], $_SERVER['REMOTE_ADDR'], "ACL Violation", "Trying to access Setup Management"); + require ("general/noaccess.php"); + return; + } + + debugPrint($_POST); + + $show = (bool) get_parameter('show'); + $save = (bool) get_parameter('save'); + $pandora_diag = (bool) get_parameter('pandora_diag', 0); + $system_info = (bool) get_parameter('system_info', 0); + $log_info = (bool) get_parameter('log_info', 0); + $log_num_lines = (int) get_parameter('log_num_lines', 2000); + + print_page_header (__("System Info"), "images/extensions.png", false, "", true, "" ); + + echo '
'; + echo __("This extension can run as PHP script in a shell for extract more information, but it must be run as root or across sudo. For example: sudo php /var/www/pandora_console/extensions/system_info.php -d -s -c"); + echo '
'; + + echo "
"; + $table = null; + $table->width = '80%'; + $table->align = array(); + $table->align[1] = 'right'; + $table->data[0][0] = __('Pandora Diagnostic info'); + $table->data[0][1] = print_checkbox('pandora_diag', 1, $pandora_diag, true); + $table->data[1][0] = __('System info'); + $table->data[1][1] = print_checkbox('system_info', 1, $system_info, true); + $table->data[2][0] = __('Log Info'); + $table->data[2][1] = print_checkbox('log_info', 1, $log_info, true); + $table->data[3][0] = __('Number lines of log'); + $table->data[3][1] = print_input_text('log_num_lines', $log_num_lines, __('Number lines of log'), 5, 10, true); + print_table($table); + echo "
"; + print_submit_button(__('Show'), 'show', false, 'class="sub next"'); + echo " "; + print_submit_button(__('Save'), 'save', false, 'class="sub wand"'); + echo "
"; + echo "
"; + + echo "

" . __('This tool is used just to view your Pandora FMS system logfiles directly from console') . "

"; + +// $systemInfo = array(); + +// if ($pandora_diag) { +// getPandoraDiagnostic($systemInfo); +// } +// if ($system_info) { +// getSystemInfo(&$systemInfo); +// } +// +// if ($show) { +// $table = null; +// $table->width = '90%'; +// $table->head = array(); +// $table->head[0] = __('Info'); +// $table->head[1] = __('Value'); +// +// $table->valign = array(); +// $table->valign[0] = 'top'; +// +// $table->data = array(); +// foreach ($systemInfo as $name => $info) { +// $row = array(); +// +// switch ($name) { +// case 'apache_modules': +// foreach ($info as $name => $module) { +// $row = array(); +// +// $row[] = 'apache_module'; +// $row[] = $module; +// +// $table->data[] = $row; +// } +// break; +// case 'php_ini': +// foreach ($info as $name => $ini) { +// $row = array(); +// +// $row[] = $name; +// $row[] = __('Global value: ') . $ini['global_value'] . __(' Local value: ') . $ini['local_value']; +// +// $table->data[] = $row; +// } +// break; +// case 'php_load_extensions': +// foreach ($info as $name => $extension) { +// $row = array(); +// +// $row[] = $name; +// $row[] = $extension; +// +// $table->data[] = $row; +// } +// break; +// case 'disk': +// foreach ($info as $entry) { +// $row = array(); +// +// $row[] = 'system_disk'; +// $row[] = 'Filesystem: ' . $entry['Filesystem'] . '
' . +// 'Size: ' . $entry['Size'] . '
' . +// 'Used: ' . $entry['Used'] . '
' . +// 'Use%: ' . $entry['Use%'] . '
' . +// 'Avail: ' . $entry['Avail'] . '
' . +// 'Mounted on: ' . $entry['Mounted_on'] . '
'; +// $table->data[] = $row; +// } +// break; +// default: +// $row[] = $name; +// $row[] = $info; +// $table->data[] = $row; +// break; +// } +// } +// +// print_table($table); +// +// if ($log_info) { +// getLastLog($show, $log_num_lines); +// } +// } +} + +function consoleMode() { + //Execution across the shell + $dir = dirname($_SERVER['PHP_SELF']); + if (file_exists($dir . "/../include/config.php")) + include $dir . "/../include/config.php"; + + global $config; + + $tempDirSystem = sys_get_temp_dir(); + $nameDir = 'dir_' . uniqid(); + $tempDir = $tempDirSystem . '/' . $nameDir . '/'; + + $result = mkdir($tempDir); + + if ($result == false) { + echo "Error in creation of temp dir."; + return; + } + + $pandoraDiag = false; + $pandoraSystemInfo = false; + $pandoraConfFiles = false; + + if ((array_search('-h', $argv) !== false) + || (array_search('--help', $argv) !== false)) { + echo "Usage is:\n" . + "\t-h --help : show this help\n" . + "\t-d --pandora_diagnostic : generate pandora diagnostic data\n" . + "\t-s --system_info : generate system info data\n" . + "\t-c --conf_files : generate conf\n"; + } + else { + $index = array_search('-d', $argv); + if ($index === false) { + $index = array_search('--pandora_diagnostic', $argv); + } + if ($index !== false) { + $pandoraDiag = true; + } + + $index = array_search('-s', $argv); + if ($index === false) { + $index = array_search('--system_info', $argv); + } + if ($index !== false) { + $pandoraSystemInfo = true; + } + + $index = array_search('-c', $argv); + if ($index === false) { + $index = array_search('--conf_files', $argv); + } + if ($index !== false) { + $pandoraConfFiles = true; + } + + if ($pandoraDiag) { + $systemInfo = array(); + getPandoraDiagnostic($systemInfo); + + $file = fopen($tempDir . 'pandora_diagnostic.txt', 'w'); + + if ($file !== false) { + ob_start(); + foreach ($systemInfo as $index => $item) { + if (is_array($item)) { + foreach ($item as $secondIndex => $secondItem) { + echo $index. ";" . $secondIndex . ";" . $secondItem . "\n"; + } + } + else { + echo $index . ";" . $item . "\n"; + } + } + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + } + + if ($pandoraSystemInfo) { + $systemInfo = array(); + getSystemInfo($systemInfo, true); + + $file = fopen($tempDir . 'system_info.txt', 'w'); + + if ($file !== false) { + ob_start(); + foreach ($systemInfo as $index => $item) { + if (is_array($item)) { + foreach ($item as $secondIndex => $secondItem) { + if (is_array($secondItem)) { + foreach ($secondItem as $thirdIndex => $thirdItem) { + echo $index. ";" . $secondIndex . ";" . $thirdIndex . ";" . $thirdItem . "\n"; + } + } + else { + echo $index. ";" . $secondIndex . ";" . $secondItem . "\n"; + } + } + } + else { + echo $index . ";" . $item . "\n"; + } + } + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + } + + if ($pandoraConfFiles) { + $lines = 2000; + + $file = fopen($tempDir . 'pandora_console.log' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog($config["homedir"]."/pandora_console.log", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'pandora_server.log' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog("/var/log/pandora/pandora_server.log", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'pandora_server.error' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog("/var/log/pandora/pandora_server.error", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'my.cnf', 'w'); + if ($file !== false) { + ob_start(); + echo file_get_contents('/etc/mysql/my.cnf'); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'my.cnf', 'w'); + if ($file !== false) { + ob_start(); + echo file_get_contents($config["homedir"]."/include/config.php"); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'pandora_server.conf', 'w'); + if ($file !== false) { + ob_start(); + echo file_get_contents("/etc/pandora/pandora_server.conf"); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'syslog' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog("/var/log/syslog", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'pandora_server.error' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog("/var/log/pandora/pandora_server.error", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + + $file = fopen($tempDir . 'pandora_server.log' . $lines, 'w'); + if ($file !== false) { + ob_start(); + echo getLastLinesLog("/var/log/pandora/pandora_server.log", $lines); + $output = ob_get_clean(); + fwrite($file, $output); + fclose($file); + } + } + echo 'tar zcvf ' . $tempDirSystem . '/' . $nameDir . '.tar.gz ' . $tempDir . '*' . "\n"; + $result = shell_exec('tar zcvf ' . $tempDirSystem . '/' . $nameDir . '.tar.gz ' . $tempDir . '*'); + + echo "You find the result file in " . $tempDirSystem . '/' . $nameDir . ".tar.gz\n"; + } +} + +if (!isset($argv)) { + //Execution across the browser + add_extension_godmode_function('mainSystemInfo'); + add_godmode_menu_option(__('System Info'), 'PM', 'glog'); +} +else { + consoleMode(); +} +?> \ No newline at end of file diff --git a/pandora_console/include/functions_db.php b/pandora_console/include/functions_db.php index 692e75f14a..76ac257c46 100644 --- a/pandora_console/include/functions_db.php +++ b/pandora_console/include/functions_db.php @@ -2169,9 +2169,11 @@ function get_db_all_rows_filter ($table, $filter = array(), $fields = false, $wh //TODO: Validate and clean fields if (empty ($fields)) { $fields = '*'; - } elseif (is_array ($fields)) { + } + elseif (is_array ($fields)) { $fields = implode (',', $fields); - } elseif (! is_string ($fields)) { + } + elseif (! is_string ($fields)) { return false; }