added available disk space to admin-page
authorPhiTux <redacted>
Tue, 9 Sep 2025 14:17:49 +0000 (16:17 +0200)
committerPhiTux <redacted>
Tue, 9 Sep 2025 14:17:49 +0000 (16:17 +0200)
backend/handlers/admin.go
frontend/src/lib/settings/Admin.svelte

index 004914976e74d44dd3333465cf13e67720786a0b..9628d6a5600241061c8a69065de53c8f7037592c 100644 (file)
@@ -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 {
index 6bae5612ac4c35cba961643e95ee5766eb2af7d9..481667c8406436fc91356c26902e7de88534297b 100644 (file)
@@ -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) {
                                                                        {formatBytes(users.reduce((sum, user) => sum + (user.disk_usage || 0), 0))}
                                                                </div>
                                                        </div>
+                                                       <div class="row">
+                                                               <div class="col-md-6"></div>
+                                                               <div class="col-md-6">
+                                                                       <strong>{$t('settings.admin.free_disk_space')}: </strong>
+                                                                       {formatBytes(freeSpace)}
+                                                               </div>
+                                                       </div>
                                                </div>
                                        {/if}
 
git clone https://git.99rst.org/PROJECT