Files
atlas/internal/models/zfs.go
Othman Hendy Suseo 6202ef8e83
Some checks failed
CI / test-build (push) Has been cancelled
fixing UI and iscsi sync
2025-12-20 19:16:50 +00:00

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
}