"path/filepath"
"strconv"
"strings"
+ "syscall"
"github.com/phitux/dailytxt/backend/utils"
)
})
}
+ // 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,
})
}
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 {
let adminAuthError = $state('');
// Admin data
+ let freeSpace = $state(0);
let users = $state([]);
let isLoadingUsers = $state(false);
let deleteUserId = $state(null);
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}