62 lines
2.9 KiB
Go
62 lines
2.9 KiB
Go
package edge_node
|
|
|
|
import (
|
|
"time"
|
|
|
|
common "git.ilapage.cn/ila/yovision/Sense/server/common/models"
|
|
)
|
|
|
|
const (
|
|
StatusOnline = "online"
|
|
StatusOffline = "offline"
|
|
StatusRecovering = "recovering"
|
|
|
|
ChannelReady = "ready"
|
|
ChannelUnavailable = "unavailable"
|
|
BackfillIdle = "idle"
|
|
BackfillPending = "pending"
|
|
)
|
|
|
|
// Node is the Sense-owned last-known projection of one edge runtime. It is
|
|
// deliberately not a shared identity or a cross-product protocol model.
|
|
type Node struct {
|
|
ID string `gorm:"size:64;primaryKey" json:"id"`
|
|
Name string `gorm:"size:128;not null" json:"name"`
|
|
Location string `gorm:"size:256;not null;default:''" json:"location"`
|
|
RuntimeVersion string `gorm:"size:64;not null;default:''" json:"runtimeVersion"`
|
|
ModelVersion string `gorm:"size:64;not null;default:''" json:"modelVersion"`
|
|
StartedAt time.Time `gorm:"not null" json:"startedAt"`
|
|
LastHeartbeatAt time.Time `gorm:"not null;index" json:"lastHeartbeatAt"`
|
|
LastCollectedAt time.Time `gorm:"not null" json:"lastCollectedAt"`
|
|
LoadUsed int `gorm:"not null;default:0" json:"loadUsed"`
|
|
LoadCapacity int `gorm:"not null;default:0" json:"loadCapacity"`
|
|
ControlTunnelStatus string `gorm:"size:32;not null;default:'unavailable'" json:"controlTunnelStatus"`
|
|
ControlTunnelDetail string `gorm:"size:256;not null;default:''" json:"controlTunnelDetail"`
|
|
ControlLatencyMs int `gorm:"not null;default:0" json:"controlLatencyMs"`
|
|
VideoPlaneStatus string `gorm:"size:32;not null;default:'unavailable'" json:"videoPlaneStatus"`
|
|
VideoPlaneDetail string `gorm:"size:256;not null;default:''" json:"videoPlaneDetail"`
|
|
ActiveStreamCount int `gorm:"not null;default:0" json:"activeStreamCount"`
|
|
BackfillStatus string `gorm:"size:32;not null;default:'idle'" json:"backfillStatus"`
|
|
BackfillQueueDepth int `gorm:"not null;default:0" json:"backfillQueueDepth"`
|
|
RecoveryPhase string `gorm:"size:32;not null;default:''" json:"recoveryPhase"`
|
|
ProjectionVersion int64 `gorm:"not null;default:1" json:"projectionVersion"`
|
|
common.ControlBy
|
|
common.ModelTime
|
|
}
|
|
|
|
func (Node) TableName() string { return "sense_edge_nodes" }
|
|
|
|
// Event records projection state transitions without storing credentials or
|
|
// raw heartbeat payloads.
|
|
type Event struct {
|
|
ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
NodeID string `gorm:"size:64;not null;index" json:"nodeId"`
|
|
EventType string `gorm:"size:32;not null;index" json:"eventType"`
|
|
FromStatus string `gorm:"size:32;not null;default:''" json:"fromStatus"`
|
|
ToStatus string `gorm:"size:32;not null" json:"toStatus"`
|
|
Detail string `gorm:"size:256;not null;default:''" json:"detail"`
|
|
OccurredAt time.Time `gorm:"not null;index" json:"occurredAt"`
|
|
}
|
|
|
|
func (Event) TableName() string { return "sense_edge_node_events" }
|