$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; $logs_directory = (!empty($config["server_log_dir"])) ? io_safe_output($config["server_log_dir"]) : "/var/log/pandora"; $result = shell_exec('du -h ' . $logs_directory . ' | 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 = 2000) { global $config; if (!file_exists($file_name)) { echo "

" . __("Cannot find file") . "(" . $file_name . ")

"; } else { if (!is_readable($file_name)) { echo "

" . __("Cannot read file") . "(" . $file_name . ")

"; } else { echo "

" . $file_name . "

"; echo ""; } } } function logFilesLines($file_name, $numLines) { global $config; if (!file_exists($file_name)) { return ''; } else { if (!is_readable($file_name)) { return ''; } else { return shell_exec('tail -n ' . $numLines . ' ' . $file_name); } } } function getLastLog($numLines = 2000) { global $config; $logs_directory = (!empty($config["server_log_dir"])) ? io_safe_output($config["server_log_dir"]) : "/var/log/pandora"; show_logfile($config["homedir"]."/pandora_console.log", $numLines); show_logfile($logs_directory."/pandora_server.log", $numLines); show_logfile($logs_directory."/pandora_server.error", $numLines); show_logfile("/etc/mysql/my.cnf", $numLines); show_logfile($config["homedir"]."/include/config.php", $numLines); show_logfile("/etc/pandora/pandora_server.conf", $numLines); show_logfile("/var/log/syslog", $numLines); } function show_array($title, $anchor, $array = array()) { $table = new StdClass(); $table->width = '98%'; $table->class = "databox"; $table->head = array(); $table->head[0] = $title; $table->data = array(); foreach ($array as $index => $item) { if (!is_array($item)) { $row = array(); $row[] = $index; $row[] = $item; $table->data[] = $row; } else { foreach ($item as $index2 => $item2) { if (!is_array($item2)) { $row = array(); $row[] = $index; $row[] = $index2; $row[] = $item2; $table->data[] = $row; } else { foreach ($item2 as $index3 => $item3) { $row = array(); $row[] = $index; $row[] = $index2; $row[] = $index3; $row[] = $item3; $table->data[] = $row; } } } } } echo "

" . $title . "

"; html_print_table($table); } function generate_info($checks, $log_num_lines = 2000) { global $config; $pandora_diag = isset($checks['pandora_diagnostic']) ? $checks['pandora_diagnostic'] : false; $system_info = isset($checks['system_info']) ? $checks['system_info'] : false; $log_info = isset($checks['log_info']) ? $checks['log_info'] : false; $tempDirSystem = sys_get_temp_dir(); $nameDir = 'dir_' . uniqid(); $tempDir = $tempDirSystem . '/' . $nameDir . '/'; mkdir($tempDir); $zipArchive = $config['attachment_store'] . '/last_info.zip'; @unlink($zipArchive); $url_zip = ui_get_full_url(false); $url = $url_zip . 'attachment/last_info.zip'; $result = array(); $result['success'] = false; $result['url'] = $url; $result['location'] = $zipArchive; $some_check = $log_info || $system_info || $pandora_diag; $zip = new ZipArchive; $zip_openned = $zip->open($zipArchive, ZIPARCHIVE::CREATE) === true; if ($some_check && $zip_openned) { if ($pandora_diag) { $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); } $zip->addFile($tempDir . 'pandora_diagnostic.txt', 'pandora_diagnostic.txt'); } if ($system_info) { $info = array(); getSystemInfo($info); $file = fopen($tempDir . 'system_info.txt', 'w'); if ($file !== false) { ob_start(); $string = ""; foreach ($info as $index => $item) { if (is_array($item)) { foreach ($item as $secondIndex => $secondItem) { if (is_array($secondItem)) { foreach ($secondItem as $thirdIndex => $thirdItem) { if (is_array($thirdItem)) { echo $index. ";" . $secondIndex . ";" . $thirdIndex . "\n"; } else { 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); } $zip->addFile($tempDir . 'system_info.txt', 'system_info.txt'); } $server_logs_directory = (!empty($config["server_log_dir"])) ? io_safe_output($config["server_log_dir"]) : "/var/log/pandora"; if ($log_info) { file_put_contents($tempDir . 'pandora_console.log.lines_' . $log_num_lines, getLastLinesLog($config["homedir"]."/pandora_console.log", $log_num_lines)); $zip->addFile($tempDir . 'pandora_console.log.lines_' . $log_num_lines, 'pandora_console.log.lines_' . $log_num_lines); file_put_contents($tempDir . 'pandora_server.log.lines_' . $log_num_lines, getLastLinesLog($server_logs_directory."/pandora_server.log", $log_num_lines)); $zip->addFile($tempDir . 'pandora_server.log.lines_' . $log_num_lines, 'pandora_server.log.lines_' . $log_num_lines); file_put_contents($tempDir . 'pandora_server.error.lines_' . $log_num_lines, getLastLinesLog($server_logs_directory."/pandora_server.error", $log_num_lines)); $zip->addFile($tempDir . 'pandora_server.error.lines_' . $log_num_lines, 'pandora_server.error.lines_' . $log_num_lines); file_put_contents($tempDir . 'my.cnf.lines_' . $log_num_lines, getLastLinesLog("/etc/mysql/my.cnf", $log_num_lines)); $zip->addFile($tempDir . 'my.cnf.lines_' . $log_num_lines, 'my.cnf.lines_' . $log_num_lines); file_put_contents($tempDir . 'config.php.lines_' . $log_num_lines, getLastLinesLog($config["homedir"]."/include/config.php", $log_num_lines)); $zip->addFile($tempDir . 'config.php.lines_' . $log_num_lines, 'config.php.lines_' . $log_num_lines); file_put_contents($tempDir . 'pandora_server.conf.lines_' . $log_num_lines, getLastLinesLog("/etc/pandora/pandora_server.conf", $log_num_lines)); $zip->addFile($tempDir . 'pandora_server.conf.lines_' . $log_num_lines, 'pandora_server.conf.lines_' . $log_num_lines); file_put_contents($tempDir . 'syslog.lines_' . $log_num_lines, getLastLinesLog("/var/log/syslog", $log_num_lines)); $zip->addFile($tempDir . 'syslog.lines_' . $log_num_lines, 'syslog.lines_' . $log_num_lines); } $zip->close(); $result['date'] = ui_print_timestamp(filectime($zipArchive), true); $result['success'] = true; } elseif (!$some_check) { $result['message'] = __('No options selected'); } elseif (!$zip_openned) { $result['message'] = __('There was an error with the zip file'); } return $result; } function mainSystemInfo() { global $config; if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) { db_pandora_audit("ACL Violation", "Trying to access Setup Management"); require ("general/noaccess.php"); return; } $show = (bool) get_parameter('show'); $generate = (bool) get_parameter('generate'); $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); ui_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 '
'; $table = null; $table->width = '99%'; $table->align = array(); $table->align[1] = 'right'; if ($pandora_diag) { $table->data[0][0] = '' . __('Pandora Diagnostic info') . ""; } else { $table->data[0][0] = __('Pandora Diagnostic info'); } $table->data[0][1] = html_print_checkbox('pandora_diag', 1, $pandora_diag, true); if ($system_info) { $table->data[1][0] = '' . __('System info') . ''; } else { $table->data[1][0] = __('System info'); } $table->data[1][1] = html_print_checkbox('system_info', 1, $system_info, true); if ($log_info) { $table->data[2][0] = '' . __('Log Info') . ''; } else { $table->data[2][0] = __('Log Info'); } $table->data[2][1] = html_print_checkbox('log_info', 1, $log_info, true); $table->data[3][0] = __('Number lines of log'); $table->data[3][1] = html_print_input_text('log_num_lines', $log_num_lines, __('Number lines of log'), 5, 10, true); $default_location = $config['attachment_store'] . '/last_info.zip'; $file_exists = file_exists($default_location) && is_readable($default_location); $table_file = new StdClass(); $table_file->id = "table_file"; $table_file->width = '99%'; $table_file->style = array(); $table_file->style[0] = "font-weight: bold"; $table_file->data = array(); $display_file_link = $file_exists ? "" : "style=\"display: none;\""; $url = ui_get_full_url(false) . "attachment/last_info.zip"; $file_link = ""; $file_link .= html_print_image('images/file.png', true, array('title' => __('Download'))); // Download image $file_link .= ""; $data = array(); $data[0] = __('File'); $data['cell-link'] = $file_link; $table_file->data['row_link'] = $data; $data = array(); $data[0] = __('Created'); $data['cell-date'] = $file_exists ? ui_print_timestamp(filectime($default_location), true) : ''; $table_file->data['row_date'] = $data; $data = array(); $data[0] = __('Location'); $data['cell-location'] = $file_exists ? $default_location : ''; $table_file->data['row_location'] = $data; echo "
"; html_print_table($table); $display_table_file = $file_exists ? "" : "style=\"display: none;\""; echo "
"; html_print_table($table_file); echo "
"; echo "
"; echo "
"; html_print_submit_button(__('Generate file'), 'generate', false, 'class="sub next"'); html_print_image('images/spinner.gif', false, array('id' => 'spinner_img', 'title' => __('Loading'), 'style' => 'display: none;')); echo "
"; echo "
"; if ($show) { if ($pandora_diag) { $info = array(); getPandoraDiagnostic($info); show_array(__('Pandora Diagnostic info'), 'diag_info', $info); } if ($system_info) { $info = array(); getSystemInfo($info); show_array(__('System info'), 'system_info', $info); } if ($log_info) { echo "

" . __('Log Info') . "

"; getLastLog($log_num_lines); } } elseif ($generate) { $checks = array(); $checks['pandora_diagnostic'] = $pandora_diag; $checks['system_info'] = $system_info; $checks['log_info'] = $log_info; $result = generate_info($checks, $log_num_lines); if ($result['success']) { echo '' . __('File') . ': ' . $result['url'] . '
'; echo '' . __('Location') . ': ' . $result['location']; } elseif (isset($result['message'])) { echo $result['message']; } else { echo __('Error'); } } ?> $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; $system_logs_directory = (!empty($config["server_log_dir"])) ? io_safe_output($config["server_log_dir"]) : "/var/log/pandora"; $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($system_logs_directory."/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($system_logs_directory."/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($system_logs_directory."/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($system_logs_directory."/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 . '*'); //TODO Delete the temp directory echo "You find the result file in " . $tempDirSystem . '/' . $nameDir . ".tar.gz\n"; } } if (!isset($argv)) { //Execution across the browser extensions_add_godmode_function('mainSystemInfo'); extensions_add_godmode_menu_option(__('System Info'), 'PM', 'gsetup', null, "v1r1"); } else { $dir = dirname($_SERVER['PHP_SELF']); $dir = str_replace("\\", "/", $dir); // Windows compatibility if (file_exists($dir . "/../include/config.php")) include $dir . "/../include/config.php"; consoleMode(); } ?>