From: PhiTux Date: Tue, 9 Sep 2025 14:17:49 +0000 (+0200) Subject: added available disk space to admin-page X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=8508a464c1459cef2e66c3d4d5e3c782e0bf5bac;p=DailyTxT.git added available disk space to admin-page --- diff --git a/backend/handlers/admin.go b/backend/handlers/admin.go index 0049149..9628d6a 100644 --- a/backend/handlers/admin.go +++ b/backend/handlers/admin.go @@ -8,6 +8,7 @@ import ( "path/filepath" "strconv" "strings" + "syscall" "github.com/phitux/dailytxt/backend/utils" ) @@ -107,9 +108,17 @@ func GetAllUsers(w http.ResponseWriter, r *http.Request) { }) } + // Get free disk space + freeSpace, err := getFreeDiskSpace() + if err != nil { + log.Printf("Error getting free disk space: %v", err) + freeSpace = 0 // Default to 0 if we can't determine free space + } + w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]any{ - "users": adminUsers, + "users": adminUsers, + "free_space": freeSpace, }) } @@ -136,6 +145,19 @@ func calculateUserDiskUsage(userID int) int64 { return totalSize } +// getFreeDiskSpace calculates the free disk space for the data directory +func getFreeDiskSpace() (int64, error) { + var stat syscall.Statfs_t + err := syscall.Statfs(utils.Settings.DataPath, &stat) + if err != nil { + return 0, err + } + + // Available space = block size * available blocks + freeSpace := int64(stat.Bavail) * int64(stat.Bsize) + return freeSpace, nil +} + // DeleteUser deletes a user and all their data func DeleteUser(w http.ResponseWriter, r *http.Request) { var req struct { diff --git a/frontend/src/lib/settings/Admin.svelte b/frontend/src/lib/settings/Admin.svelte index 6bae561..481667c 100644 --- a/frontend/src/lib/settings/Admin.svelte +++ b/frontend/src/lib/settings/Admin.svelte @@ -20,6 +20,7 @@ let adminAuthError = $state(''); // Admin data + let freeSpace = $state(0); let users = $state([]); let isLoadingUsers = $state(false); let deleteUserId = $state(null); @@ -76,6 +77,7 @@ try { const response = await makeAdminApiCall('/admin/users'); users = response.data.users || []; + freeSpace = response.data.free_space; } catch (error) { console.error('Error loading users:', error); if (error.response?.status === 401) { @@ -292,6 +294,13 @@ {formatBytes(users.reduce((sum, user) => sum + (user.disk_usage || 0), 0))} +
+
+
+ {$t('settings.admin.free_disk_space')}: + {formatBytes(freeSpace)} +
+
{/if}