package ops_alert import "time" const ( StateUnacknowledged = "unacknowledged" StateAcknowledged = "acknowledged" StateRecovering = "recovering" StateRecovered = "recovered" TypeDeviceOffline = "device_offline" TypeAuthentication = "authentication_failed" TypeClockDrift = "clock_drift" TypeReconciliation = "reconciliation_failed" TypeMediaShard = "media_shard_failed" TypeControlTunnel = "control_tunnel_failed" ) type Alert struct { ID string `gorm:"size:36;primaryKey" json:"id"` Fingerprint string `gorm:"size:255;not null;uniqueIndex" json:"fingerprint"` AlertType string `gorm:"size:32;not null;index" json:"alertType"` Severity string `gorm:"size:16;not null;index" json:"severity"` ObjectType string `gorm:"size:32;not null;index" json:"objectType"` ObjectID string `gorm:"size:96;not null;index" json:"objectId"` ObjectName string `gorm:"size:128;not null" json:"objectName"` Location string `gorm:"size:255;not null;default:''" json:"location"` State string `gorm:"size:24;not null;index" json:"state"` Title string `gorm:"size:160;not null" json:"title"` Detail string `gorm:"size:512;not null" json:"detail"` NextAction string `gorm:"size:255;not null" json:"nextAction"` LastSourceVersion string `gorm:"size:128;not null;default:''" json:"-"` OccurrenceCount int `gorm:"not null;default:1" json:"occurrenceCount"` Cycle int `gorm:"not null;default:1" json:"cycle"` FirstSeenAt time.Time `gorm:"not null;index" json:"firstSeenAt"` LastSeenAt time.Time `gorm:"not null;index" json:"lastSeenAt"` HealthySince *time.Time `json:"healthySince,omitempty"` AcknowledgedAt *time.Time `json:"acknowledgedAt,omitempty"` AcknowledgedBy int `gorm:"not null;default:0" json:"acknowledgedBy,omitempty"` RecoveredAt *time.Time `json:"recoveredAt,omitempty"` RecoveredBy int `gorm:"not null;default:0" json:"recoveredBy,omitempty"` OperationalOnly bool `gorm:"not null;default:true" json:"operationalOnly"` Version int64 `gorm:"not null;default:1" json:"version"` CreatedAt time.Time `gorm:"not null" json:"createdAt"` UpdatedAt time.Time `gorm:"not null" json:"updatedAt"` } func (Alert) TableName() string { return "sense_ops_alerts" } type Transition struct { ID string `gorm:"size:36;primaryKey" json:"id"` AlertID string `gorm:"size:36;not null;index" json:"alertId"` Cycle int `gorm:"not null" json:"cycle"` Action string `gorm:"size:32;not null;index" json:"action"` FromState string `gorm:"size:24;not null;default:''" json:"fromState"` ToState string `gorm:"size:24;not null" json:"toState"` Reason string `gorm:"size:512;not null;default:''" json:"reason"` ActorUserID int `gorm:"not null;default:0" json:"actorUserId"` CreatedAt time.Time `gorm:"not null;index" json:"createdAt"` } func (Transition) TableName() string { return "sense_ops_alert_transitions" }