From 9a4d30c6daadf3d413239b1cf0c06373e174b672 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Wed, 20 Aug 2025 11:04:02 +0300 Subject: [PATCH] feat: Add system information dashboard to admin panel (#2092) * feat: Add system information dashboard to admin panel * Update index.php * Update index.php * Update index.php * Update index.tpl * Updated * Update index.php --- admin/index.php | 61 ++++++++++++++++++++++++++++++++ library/language/source/main.php | 10 ++++++ styles/templates/admin/index.tpl | 25 +++++++++++++ 3 files changed, 96 insertions(+) diff --git a/admin/index.php b/admin/index.php index 1f7bbd491..ad0f00f3e 100644 --- a/admin/index.php +++ b/admin/index.php @@ -132,6 +132,18 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') { $users_per_day = $total_users; } + // Get database version info + $database_version = $lang['NOT_AVAILABLE']; + $sql = 'SELECT VERSION() as version'; + $result = DB()->sql_query($sql); + $row = DB()->sql_fetchrow($result); + if (isset($row['version'])) { + $database_version = $row['version']; + } + + // Get disk space information + $getDiskSpaceInfo = getDiskSpaceInfo(); + $template->assign_vars([ 'NUMBER_OF_POSTS' => commify($total_posts), 'NUMBER_OF_TOPICS' => commify($total_topics), @@ -141,6 +153,13 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') { 'TOPICS_PER_DAY' => $topics_per_day, 'USERS_PER_DAY' => $users_per_day, 'AVATAR_DIR_SIZE' => $avatar_dir_size, + // System info + 'SERVER_OS' => htmlCHR(php_uname('s') . ' ' . php_uname('r') . ' ' . php_uname('m')), + 'SERVER_PHP_VER' => htmlCHR(phpversion()), + 'SERVER_PHP_MEM_LIMIT' => htmlCHR(ini_get('memory_limit')), + 'SERVER_PHP_MAX_EXECUTION_TIME' => htmlCHR(ini_get('max_execution_time')), + 'SERVER_DATABASE_VER' => htmlCHR($database_version), + 'SERVER_DISK_SPACE_INFO' => htmlCHR(sprintf($lang['ADMIN_SYSTEM_DISK_SPACE_INFO'], $getDiskSpaceInfo['total'], $getDiskSpaceInfo['used'], $getDiskSpaceInfo['free'])), ]); if (isset($_GET['users_online'])) { @@ -225,4 +244,46 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') { print_page('index.tpl', 'admin', 'no_header'); } +/** + * Get disk space information + * + * @param string $path + * @return array|string[] + */ +function getDiskSpaceInfo(string $path = BB_ROOT): array +{ + global $lang; + + $default_values = [ + 'total' => $lang['NOT_AVAILABLE'], + 'free' => $lang['NOT_AVAILABLE'], + 'used' => $lang['NOT_AVAILABLE'], + 'percent_used' => $lang['NOT_AVAILABLE'] + ]; + + try { + $bytes_total = disk_total_space($path); + $bytes_free = disk_free_space($path); + + if ($bytes_total === false || $bytes_free === false) { + return $default_values; + } + + $bytes_used = $bytes_total - $bytes_free; + $percent_used = ($bytes_total > 0) ? round(($bytes_used / $bytes_total) * 100, 2) : 0; + + return [ + 'total' => humn_size($bytes_total), + 'free' => humn_size($bytes_free), + 'used' => humn_size($bytes_used), + 'percent_used' => $percent_used, + 'path' => realpath($path) + ]; + + } catch (Exception $e) { + bb_log("[getDiskSpaceInfo] " . $e->getMessage() . LOG_LF); + return $default_values; + } +} + print_page('index.tpl', 'admin'); diff --git a/library/language/source/main.php b/library/language/source/main.php index ffc0e2091..1a4b56a5c 100644 --- a/library/language/source/main.php +++ b/library/language/source/main.php @@ -1970,6 +1970,16 @@ $lang['DATABASE_SIZE'] = 'Database size'; $lang['GZIP_COMPRESSION'] = 'Gzip compression'; $lang['NOT_AVAILABLE'] = 'Not available'; +// System information +$lang['ADMIN_SYSTEM_INFORMATION'] = 'System information'; +$lang['ADMIN_SYSTEM_OS'] = 'OS:'; +$lang['ADMIN_SYSTEM_PHP_VER'] = 'PHP:'; +$lang['ADMIN_SYSTEM_DATABASE_VER'] = 'Database:'; +$lang['ADMIN_SYSTEM_PHP_MEM_LIMIT'] = 'Memory limit:'; +$lang['ADMIN_SYSTEM_DISK_SPACE_INFO_TITLE'] = 'Disk space info:'; +$lang['ADMIN_SYSTEM_DISK_SPACE_INFO'] = '%s (used: %s | free: %s)'; +$lang['ADMIN_SYSTEM_PHP_MAX_EXECUTION_TIME'] = 'Max execution time:'; + // Clear Cache $lang['DATASTORE'] = 'Datastore'; $lang['CLEAR_CACHE'] = 'Cache'; diff --git a/styles/templates/admin/index.tpl b/styles/templates/admin/index.tpl index ccef53861..da2a19640 100644 --- a/styles/templates/admin/index.tpl +++ b/styles/templates/admin/index.tpl @@ -167,6 +167,31 @@
+ + + + + + + + + + + + + + + + + + + + + + +
{L_ADMIN_SYSTEM_INFORMATION}
{L_ADMIN_SYSTEM_OS}{SERVER_OS}{L_ADMIN_SYSTEM_PHP_VER}{SERVER_PHP_VER}
{L_ADMIN_SYSTEM_DATABASE_VER}{SERVER_DATABASE_VER}{L_ADMIN_SYSTEM_PHP_MEM_LIMIT}{SERVER_PHP_MEM_LIMIT}
{L_ADMIN_SYSTEM_DISK_SPACE_INFO_TITLE}{SERVER_DISK_SPACE_INFO}{L_ADMIN_SYSTEM_PHP_MAX_EXECUTION_TIME}{SERVER_PHP_MAX_EXECUTION_TIME}
+
+
{L_FORUM_STATS}