Files
Provisioning/internal/model/model.go
T
josh a6603b463f
build-and-push / test (push) Failing after 32s
build-and-push / build-and-push (push) Has been skipped
Add activity log system for provisioning lifecycle visibility
Hosts stuck in states like pxe_ready had zero visibility into why.
This adds a persistent activity log that records every meaningful
step (state transitions, PXE events, cluster join stages, failures)
and surfaces it on the host detail page with live SSE updates.
Includes a stuck-detection warning banner when a host sits in
pxe_ready for >10 minutes with no iPXE request.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 23:30:21 -04:00

101 lines
2.0 KiB
Go

package model
import "time"
type HostState string
const (
StateRegistered HostState = "registered"
StatePXEReady HostState = "pxe_ready"
StatePXEBooted HostState = "pxe_booted"
StateInstalling HostState = "installing"
StateInstalled HostState = "installed"
StateFirstBoot HostState = "first_boot"
StateJoining HostState = "joining"
StateReady HostState = "ready"
StateFailed HostState = "failed"
)
type Host struct {
ID int64
Hostname string
MAC string
ServerType string
State HostState
IPAddress string
HardwareID string
InfraHostID int64
Notes string
CreatedAt time.Time
UpdatedAt time.Time
}
type OperationKind string
const (
OpRebuildProxmox OperationKind = "rebuild_proxmox"
)
type OperationState string
const (
OpActive OperationState = "active"
OpCompleted OperationState = "completed"
OpFailed OperationState = "failed"
)
type Operation struct {
ID int64
HostID int64
Kind OperationKind
State OperationState
ImageID int64
StartedAt time.Time
CompletedAt *time.Time
ErrorMessage string
}
type Image struct {
ID int64
Name string
Kind string
Version string
KernelPath string
InitrdPath string
IsDefault bool
CreatedAt time.Time
}
type LogLevel string
const (
LogInfo LogLevel = "info"
LogWarn LogLevel = "warn"
LogError LogLevel = "error"
)
type ActivityEntry struct {
ID int64
HostID int64
OperationID int64
Level LogLevel
Message string
Source string
CreatedAt time.Time
}
type ServerType struct {
Key string
DisplayName string `yaml:"display_name"`
BootDisk string `yaml:"boot_disk"`
ManagementNIC string `yaml:"management_nic"`
GPU bool `yaml:"gpu"`
HostnamePrefix string `yaml:"hostname_prefix"`
ExpectedNICs []NICDef `yaml:"expected_nics"`
}
type NICDef struct {
Name string `yaml:"name"`
Speed string `yaml:"speed"`
}