package models import "time" // Pool represents a ZFS pool type Pool struct { Name string `json:"name"` Status string `json:"status"` // ONLINE, DEGRADED, FAULTED, etc. Size uint64 `json:"size"` // bytes Allocated uint64 `json:"allocated"` Free uint64 `json:"free"` Health string `json:"health"` CreatedAt time.Time `json:"created_at"` } // PoolDetail represents detailed pool information from zpool status type PoolDetail struct { Name string `json:"name"` State string `json:"state"` // ONLINE, DEGRADED, FAULTED Status string `json:"status"` // Full status message VDEVs []VDEV `json:"vdevs"` // Virtual devices Spares []string `json:"spares"` // Spare disks Errors string `json:"errors"` // Error summary ScrubInfo string `json:"scrub_info"` // Scrub information } // VDEV represents a virtual device in a pool type VDEV struct { Name string `json:"name"` // VDEV name or type Type string `json:"type"` // mirror, raidz, raidz2, etc. State string `json:"state"` // ONLINE, DEGRADED, etc. Disks []Disk `json:"disks"` // Disks in this VDEV Read int `json:"read"` // Read errors Write int `json:"write"` // Write errors Checksum int `json:"checksum"` // Checksum errors } // Disk represents a disk in a VDEV type Disk struct { Name string `json:"name"` // Disk name (e.g., sdb) State string `json:"state"` // ONLINE, DEGRADED, FAULTED, etc. Read int `json:"read"` // Read errors Write int `json:"write"` // Write errors Checksum int `json:"checksum"` // Checksum errors } // Dataset represents a ZFS filesystem type Dataset struct { Name string `json:"name"` Pool string `json:"pool"` Type string `json:"type"` // filesystem, volume Size uint64 `json:"size"` Used uint64 `json:"used"` Available uint64 `json:"available"` Mountpoint string `json:"mountpoint"` CreatedAt time.Time `json:"created_at"` } // ZVOL represents a ZFS block device type ZVOL struct { Name string `json:"name"` Pool string `json:"pool"` Size uint64 `json:"size"` // bytes Used uint64 `json:"used"` CreatedAt time.Time `json:"created_at"` } // Snapshot represents a ZFS snapshot type Snapshot struct { Name string `json:"name"` Dataset string `json:"dataset"` Size uint64 `json:"size"` CreatedAt time.Time `json:"created_at"` } // SnapshotPolicy defines automated snapshot rules type SnapshotPolicy struct { Dataset string `json:"dataset"` Frequent int `json:"frequent"` // keep N frequent snapshots Hourly int `json:"hourly"` // keep N hourly snapshots Daily int `json:"daily"` // keep N daily snapshots Weekly int `json:"weekly"` // keep N weekly snapshots Monthly int `json:"monthly"` // keep N monthly snapshots Yearly int `json:"yearly"` // keep N yearly snapshots Autosnap bool `json:"autosnap"` // enable/disable Autoprune bool `json:"autoprune"` // enable/disable }