// Package notification owns the fan-out of alert events to operator- // configured channels. Three channels in v1: webhook, ntfy, smtp. // Each channel implements Channel.Send for one Payload at a time; // the Hub orchestrates fan-out, persists to notification_log. package notification import "time" // Event identifies the lifecycle hook this notification is for. type Event string const ( // EventRaised occurs when an alert is first raised. EventRaised Event = "alert.raised" // EventAcknowledged occurs when an alert is acknowledged. EventAcknowledged Event = "alert.acknowledged" // EventResolved occurs when an alert is resolved. EventResolved Event = "alert.resolved" // EventTest is used for test notifications. EventTest Event = "alert.test" ) // Payload is the per-event blob every channel renders into its own // shape. Severity maps to channel-specific priority (ntfy) or stays // in the body (webhook/smtp). type Payload struct { Event Event // alert.raised | … | alert.test AlertID string // ULID Severity string // info | warning | critical Kind string // backup_failed | … HostID string HostName string Message string RaisedAt time.Time Link string // Absolute URL to /alerts/; built by Hub }