feat: show disk usage of mover source with configurable warning threshold
GET /api/storage/disk-usage returns source path stats (total/used/free bytes, %).
Polls every 30s while Storage page is open.
Backend:
- migration 0009: adds mover_warning_threshold (1-99, default 80) to storage_config
- StatPath moved to internal/storage package for testability
- handleStorageDiskUsage returns {source: PathStat}
Frontend:
- DiskUsageBar component in Mergerfs Mover card: usage bar with color
green < threshold, amber >= threshold, red >= 95%
- Warning message when threshold reached or exceeded
- New input in config form: Umbral de aviso (%)
- storageDiskUsage() API method
Tests: StatPath unit tests (empty/nonexistent/valid paths)
Version: 0.7.3
This commit is contained in:
@@ -169,6 +169,7 @@ export interface StorageConfig {
|
||||
mover_remove_source: boolean;
|
||||
mover_inplace: boolean;
|
||||
mover_rsync_options: string;
|
||||
mover_warning_threshold: number;
|
||||
snapraid_content: string;
|
||||
snapraid_data_dirs: string;
|
||||
snapraid_parity_dir: string;
|
||||
@@ -176,6 +177,20 @@ export interface StorageConfig {
|
||||
updated_at: string;
|
||||
}
|
||||
|
||||
export interface PathStat {
|
||||
path: string;
|
||||
available: boolean;
|
||||
total_bytes: number;
|
||||
used_bytes: number;
|
||||
free_bytes: number;
|
||||
used_percent: number;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface StorageDiskUsage {
|
||||
source: PathStat;
|
||||
}
|
||||
|
||||
export interface StorageJob {
|
||||
id: number;
|
||||
kind: JobKind;
|
||||
@@ -300,6 +315,7 @@ export const api = {
|
||||
storageCapabilities: () => request<StorageCapabilities>("GET", "/storage/capabilities"),
|
||||
getStorageConfig: () => request<StorageConfig>("GET", "/storage/config"),
|
||||
updateStorageConfig: (c: Partial<StorageConfig>) => request<StorageConfig>("PUT", "/storage/config", c),
|
||||
storageDiskUsage: () => request<StorageDiskUsage>("GET", "/storage/disk-usage"),
|
||||
listStorageJobs: (limit = 50) => request<{ jobs: StorageJob[] }>("GET", `/storage/jobs?limit=${limit}`),
|
||||
getStorageJob: (id: number) => request<StorageJob>("GET", `/storage/jobs/${id}`),
|
||||
startStorageJob: (kind: JobKind, args?: Record<string, unknown>) =>
|
||||
|
||||
Reference in New Issue
Block a user