models

package
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CommandActionTerminateIssue         = CommandAction("terminate_issue")
	CommandActionResolveIssue           = CommandAction("resolve_issue")
	CommandActionUnresolveIssue         = CommandAction("unresolve_issue")
	CommandActionInvestigateIssue       = CommandAction("investigate_issue")
	CommandActionUninvestigateIssue     = CommandAction("uninvestigate_issue")
	CommandActionMuteIssue              = CommandAction("mute_issue")
	CommandActionUnmuteIssue            = CommandAction("unmute_issue")
	CommandActionMoveIssue              = CommandAction("move_issue")
	CommandActionCreateIssue            = CommandAction("create_issue")
	CommandActionShowIssueOptionButtons = CommandAction("show_issue_option_buttons")
	CommandActionHideIssueOptionButtons = CommandAction("hide_issue_option_buttons")
	CommandActionWebhook                = CommandAction("webhook")
)
View Source
const (
	// MoveIssueReasonEscalation indicates the issue was moved due to escalation rules.
	MoveIssueReasonEscalation = MoveIssueReason("ESCALATION")

	// MoveIssueReasonUserCommand indicates the issue was moved manually by a Slack user.
	MoveIssueReasonUserCommand = MoveIssueReason("USER_COMMAND")
)
View Source
const (
	ActionNone    = SlackAction("NONE")
	ActionAlert   = SlackAction("ALERT")
	ActionResolve = SlackAction("RESOLVE")
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Alert

type Alert struct {
	types.Alert

	SlackChannelName       string `json:"slackChannelName"`
	OriginalSlackChannelID string `json:"originalSlackChannelId"`
	OriginalText           string `json:"originalText"`
	// contains filtered or unexported fields
}

Alert represents an alert message to be sent to a Slack channel. It extends the types.Alert struct with additional fields needed in this package.

func (*Alert) Ack

func (a *Alert) Ack()

Ack acknowledges the alert message, indicating successful processing. Any subsequent calls to Ack or Nack will have no effect.

func (*Alert) LogFields

func (a *Alert) LogFields() map[string]any

LogFields returns a map of key-value pairs representing the Alert's important fields for logging purposes.

func (*Alert) Nack

func (a *Alert) Nack()

Nack negatively acknowledges the alert message, indicating processing failure and requesting re-delivery. Any subsequent calls to Ack or Nack will have no effect.

func (*Alert) SetDefaultValues

func (a *Alert) SetDefaultValues(settings *config.ManagerSettings)

SetDefaultValues sets default values for the Alert fields based on the provided ManagerSettings.

type Command

type Command struct {
	Timestamp               time.Time             `json:"timestamp"`
	SlackChannelID          string                `json:"slackChannelId,omitempty"`
	SlackPostID             string                `json:"ts,omitempty"`
	Reaction                string                `json:"reaction,omitempty"`
	UserID                  string                `json:"userId,omitempty"`
	UserRealName            string                `json:"userRealName,omitempty"`
	Action                  CommandAction         `json:"action,omitempty"`
	Parameters              map[string]any        `json:"parameters,omitempty"`
	WebhookParameters       *WebhookCommandParams `json:"webhookParameters,omitempty"`
	IncludeArchivedIssues   bool                  `json:"includeArchivedIssues"`
	ExecuteWhenNoIssueFound bool                  `json:"executeWhenNoIssueFound"`
	// contains filtered or unexported fields
}

Command represents a user-initiated action within Slack that the system needs to process.

func NewCommand

func NewCommand(slackChannelID, ts, reaction, userID, userRealName string, action CommandAction, parameters map[string]any) *Command

NewCommand creates a new Command instance with the provided parameters.

func (*Command) Ack

func (c *Command) Ack()

Ack acknowledges the command message, indicating successful processing. Any subsequent calls to Ack or Nack will have no effect.

func (*Command) DedupID

func (c *Command) DedupID() string

DedupID generates a deduplication ID for the command based on its key attributes.

func (*Command) LogFields

func (c *Command) LogFields() map[string]any

LogFields returns a map of key-value pairs representing the Command's important fields for logging purposes.

func (*Command) Nack

func (c *Command) Nack()

Nack negatively acknowledges the command message, indicating processing failure and requesting re-delivery. Any subsequent calls to Ack or Nack will have no effect.

func (*Command) ParamAsBool

func (c *Command) ParamAsBool(key string) bool

ParamAsBool retrieves a boolean parameter by key from the Command's Parameters map.

func (*Command) ParamAsInt

func (c *Command) ParamAsInt(key string) int

ParamAsInt retrieves an integer parameter by key from the Command's Parameters map.

func (*Command) ParamAsString

func (c *Command) ParamAsString(key string) string

ParamAsString retrieves a string parameter by key from the Command's Parameters map.

type CommandAction

type CommandAction string

CommandAction represents the type of action a user has initiated within Slack.

type EscalationResult

type EscalationResult struct {
	Issue         *Issue
	Escalated     bool
	MoveToChannel string
}

EscalationResult represents the outcome of an escalation attempt for an issue.

type InFlightMessage

type InFlightMessage interface {
	Ack()
	Nack()
}

InFlightMessage represents a message that is currently being processed. It should be acknowledged (Ack) or negatively acknowledged (Nack) once processing is complete.

Ack and Nack do not accept a context parameter because acknowledgment is a commitment that must complete regardless of the caller's context state. Each queue implementation is responsible for managing its own timeouts and retry logic internally.

func NewAlertFromQueueItem

func NewAlertFromQueueItem(queueItem *types.FifoQueueItem) (InFlightMessage, error)

NewAlertFromQueueItem creates a new Alert instance from a FifoQueueItem. It unmarshals the JSON body of the queue item into an Alert struct.

func NewCommandFromQueueItem

func NewCommandFromQueueItem(queueItem *types.FifoQueueItem) (InFlightMessage, error)

NewCommandFromQueueItem creates a Command instance from a FIFO queue item. It unmarshals the JSON body of the queue item into a Command struct.

type InFlightMsgConstructor

type InFlightMsgConstructor func(queueItem *types.FifoQueueItem) (InFlightMessage, error)

InFlightMsgConstructor is a function type that constructs an InFlightMessage from a FifoQueueItem. The actual implementation may vary based on the message type (e.g., Alert, Command).

type Issue

type Issue struct {
	ID            string    `json:"id"`
	CorrelationID string    `json:"correlationId"`
	Created       time.Time `json:"created"`

	// FirstAlert is the first alert that created this issue. This field is retained for debugging
	// purposes only and is not used in any business logic.
	FirstAlert *Alert `json:"firstAlert"`

	// LastAlert is the most recent alert for this issue. All issue state is derived from this alert.
	// This field must never be nil after issue creation or deserialization.
	LastAlert                 *Alert        `json:"lastAlert"`
	AlertCount                int           `json:"alertCount"`
	LastAlertReceived         time.Time     `json:"lastAlertReceived"`
	LastSlackMention          string        `json:"lastSlackMention"`
	LastSlackMentionTime      time.Time     `json:"lastSlackMentionTime"`
	AutoResolvePeriod         time.Duration `json:"autoResolvePeriod"`
	ArchiveDelay              time.Duration `json:"archiveDelay"`
	ArchiveTime               time.Time     `json:"archiveTime"`
	Archived                  bool          `json:"archived"`
	ResolveTime               time.Time     `json:"resolveTime"`
	SlackPostID               string        `json:"slackPostId"`
	SlackPostCreated          time.Time     `json:"slackPostCreated"`
	SlackPostUpdated          time.Time     `json:"slackPostUpdated"`
	SlackPostHeader           string        `json:"slackPostHeader"`
	SlackPostText             string        `json:"slackPostText"`
	SlackPostLastAction       SlackAction   `json:"slackPostLastAction"`
	SlackPostNeedsUpdate      bool          `json:"slackPostNeedsUpdate"`
	SlackPostNeedsDelete      bool          `json:"slackPostNeedsDelete"`
	SlackAlertSentAtLeastOnce bool          `json:"slackAlertSentAtLeastOnce"`
	SlackPostDelayedUntil     time.Time     `json:"slackPostDelayedUntil"`

	// The following IsEmoji* fields use "slackPostEmoji*" JSON tags for backward compatibility
	// with existing serialized data and external API consumers.
	IsEmojiTerminated       bool            `json:"slackPostEmojiTerminated"`
	IsEmojiResolved         bool            `json:"slackPostEmojiResolved"`
	IsEmojiInvestigated     bool            `json:"slackPostEmojiInvestigated"`
	IsEmojiMuted            bool            `json:"slackPostEmojiMuted"`
	IsEmojiButtonsActivated bool            `json:"slackPostEmojiButtonsActivated"`
	IsMoved                 bool            `json:"isMoved"`
	TerminatedByUser        string          `json:"terminatedByUser"`
	ResolvedByUser          string          `json:"resolvedByUser"`
	InvestigatedByUser      string          `json:"investigatedByUser"`
	InvestigatedSince       time.Time       `json:"investigatedSince"`
	MutedByUser             string          `json:"mutedByUser"`
	MutedSince              time.Time       `json:"mutedSince"`
	MoveReason              MoveIssueReason `json:"moveReason"`
	MovedByUser             string          `json:"movedByUser"`
	IsEscalated             bool            `json:"isEscalated"`
	// contains filtered or unexported fields
}

Issue represents one or more alerts with the same correlation ID (in the same Slack channel). Issues are created when the first alert with a given correlation ID is received, and updated when new alerts arrive with the same correlation ID. Issues can be resolved, archived, and have a connected Slack post.

func NewIssue

func NewIssue(alert *Alert, logger types.Logger) *Issue

NewIssue creates a new Issue from an Alert. Returns nil if the provided alert is nil.

func (*Issue) AddAlert

func (issue *Issue) AddAlert(alert *Alert, logger types.Logger) bool

AddAlert adds a new alert to an existing issue. Alerts that are older than the previous alert are ignored. Alerts with status Resolved are ignored if the issue is already resolved. This method is only relevant for issues that have follow-up enabled. For issues without follow-up, all new alerts are ignored.

Note: This method may mutate the provided alert's Severity field when escalation is active and the current severity is higher than the incoming alert's severity.

The SlackPostDelayedUntil is calculated from issue.Created (not current time) by design, ensuring the issue doesn't appear until the original delay period has elapsed, regardless of how many alerts are added to the issue.

func (*Issue) ApplyEscalationRules

func (issue *Issue) ApplyEscalationRules() *EscalationResult

func (*Issue) ChannelID

func (issue *Issue) ChannelID() string

ChannelID returns the Slack channel ID that this issue belongs to

func (*Issue) CurrentPostID

func (issue *Issue) CurrentPostID() string

func (*Issue) FindWebhook

func (issue *Issue) FindWebhook(id string) *types.Webhook

func (*Issue) FollowUpEnabled

func (issue *Issue) FollowUpEnabled() bool

func (*Issue) GetCorrelationID

func (issue *Issue) GetCorrelationID() string

func (*Issue) GetSlackAction

func (issue *Issue) GetSlackAction() SlackAction

GetSlackAction returns the Slack action needed for this issue

func (*Issue) HasSlackPost

func (issue *Issue) HasSlackPost() bool

HasSlackPost returns true if this issue has a connected Slack post at this moment

func (*Issue) IsInfoOrResolved

func (issue *Issue) IsInfoOrResolved() bool

func (*Issue) IsLowerPriorityThan

func (issue *Issue) IsLowerPriorityThan(other *Issue) bool

IsLowerPriorityThan returns true if this issue has lower priority than the other issue

func (*Issue) IsOpen

func (issue *Issue) IsOpen() bool

func (*Issue) IsReadyForArchiving

func (issue *Issue) IsReadyForArchiving() bool

IsReadyForArchiving returns true if the issue is ready to be archived

func (*Issue) IsResolved

func (issue *Issue) IsResolved() bool

func (*Issue) IsResolvedAsInconclusive

func (issue *Issue) IsResolvedAsInconclusive() bool

func (*Issue) LastAlertHasActiveMentions

func (issue *Issue) LastAlertHasActiveMentions() bool

LastAlertHasActiveMentions returns true if the last alert has active Slack mentions, that are not muted

func (*Issue) LogFields

func (issue *Issue) LogFields() map[string]any

func (*Issue) MarshalJSON

func (issue *Issue) MarshalJSON() ([]byte, error)

func (*Issue) MarshalJSONAndCache

func (issue *Issue) MarshalJSONAndCache() ([]byte, error)

func (*Issue) RegisterArchiving

func (issue *Issue) RegisterArchiving()

RegisterArchiving registers that the issue has been archived

func (*Issue) RegisterHideOptionButtonsRequest

func (issue *Issue) RegisterHideOptionButtonsRequest()

func (*Issue) RegisterInvestigateRequest

func (issue *Issue) RegisterInvestigateRequest(user string)

func (*Issue) RegisterMoveRequest

func (issue *Issue) RegisterMoveRequest(reason MoveIssueReason, user, newChannelID, newChannelName string)

func (*Issue) RegisterMuteRequest

func (issue *Issue) RegisterMuteRequest(user string)

func (*Issue) RegisterResolveRequest

func (issue *Issue) RegisterResolveRequest(user string)

func (*Issue) RegisterShowOptionButtonsRequest

func (issue *Issue) RegisterShowOptionButtonsRequest()

func (*Issue) RegisterSlackPostCreatedOrUpdated

func (issue *Issue) RegisterSlackPostCreatedOrUpdated(slackPostID string, action SlackAction)

RegisterSlackPostCreatedOrUpdated registers that a Slack post has been created or updated for this issue

func (*Issue) RegisterSlackPostDeleted

func (issue *Issue) RegisterSlackPostDeleted()

RegisterSlackPostDeleted registers that the Slack post connected to this issue has been deleted

func (*Issue) RegisterSlackPostInvalidBlocks

func (issue *Issue) RegisterSlackPostInvalidBlocks()

RegisterSlackPostInvalidBlocks registers that a Slack post could not be created due to invalid blocks (i.e. bad message formatting). It zeros out the Slack post information, but sets the SlackPostNeedsUpdate flag to false, to avoid trying again until the next alert.

func (*Issue) RegisterTerminationRequest

func (issue *Issue) RegisterTerminationRequest(user string)

RegisterTerminationRequest registers that the Slack post connected to this issue has been marked for termination via Slack reaction/emoji

func (*Issue) RegisterUninvestigateRequest

func (issue *Issue) RegisterUninvestigateRequest()

func (*Issue) RegisterUnmuteRequest

func (issue *Issue) RegisterUnmuteRequest()

func (*Issue) RegisterUnresolveRequest

func (issue *Issue) RegisterUnresolveRequest()

func (*Issue) ResetCachedJSONBody

func (issue *Issue) ResetCachedJSONBody()

func (*Issue) UniqueID

func (issue *Issue) UniqueID() string

UniqueID returns the ID of the Issue (for database/storage purposes)

type ManagerSettingsWrapper

type ManagerSettingsWrapper struct {
	// contains filtered or unexported fields
}

ManagerSettingsWrapper wraps the ManagerSettings configuration with thread-safe access. The wrapper allows hot-reloading of settings without passing them around directly. All access to the settings should go through GetSettings() and SetSettings() methods to ensure thread safety during hot-reloading.

func NewManagerSettingsWrapper

func NewManagerSettingsWrapper(settings *config.ManagerSettings) *ManagerSettingsWrapper

NewManagerSettingsWrapper creates a new ManagerSettingsWrapper with the given settings.

func (*ManagerSettingsWrapper) GetSettings

func (w *ManagerSettingsWrapper) GetSettings() *config.ManagerSettings

GetSettings returns the current settings in a thread-safe manner.

func (*ManagerSettingsWrapper) SetSettings

func (w *ManagerSettingsWrapper) SetSettings(settings *config.ManagerSettings)

SetSettings updates the settings in a thread-safe manner.

type MoveIssueReason

type MoveIssueReason string

MoveIssueReason represents the reason for moving an issue between Slack channels.

type MoveMapping

type MoveMapping struct {
	ID                string          `json:"id"`
	Timestamp         time.Time       `json:"timestamp"`
	CorrelationID     string          `json:"correlationId"`
	OriginalChannelID string          `json:"originalChannelId"`
	TargetChannelID   string          `json:"targetChannelId"`
	Reason            MoveIssueReason `json:"reason"`
}

MoveMapping represents information about an issue moved between Slack channels.

func NewMoveMapping

func NewMoveMapping(correlationID, originalChannelID, targetChannelID string, reason MoveIssueReason) *MoveMapping

NewMoveMapping creates a new MoveMapping instance.

func (*MoveMapping) ChannelID

func (m *MoveMapping) ChannelID() string

ChannelID returns the original channel ID of the move mapping, i.e., where the issue was moved from.

func (*MoveMapping) GetCorrelationID

func (m *MoveMapping) GetCorrelationID() string

GetCorrelationID returns the issue correlation ID associated with the move mapping.

func (*MoveMapping) MarshalJSON

func (m *MoveMapping) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface, which is required by the types.MoveMapping interface.

func (*MoveMapping) UniqueID

func (m *MoveMapping) UniqueID() string

UniqueID returns the unique identifier of the move mapping.

type SlackAction

type SlackAction string

type WebhookCommandParams

type WebhookCommandParams struct {
	WebhookID     string              `json:"webhookId"`
	Input         map[string]string   `json:"input,omitempty"`
	CheckboxInput map[string][]string `json:"checkboxInput,omitempty"`
}

WebhookCommandParams holds parameters specific to webhook commands.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL