88 lines
3.1 KiB
Go
88 lines
3.1 KiB
Go
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
|
|
}
|