notification

package
v0.28.0 Latest Latest
Warning

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

Go to latest
Published: Aug 30, 2021 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrStatusUnsupported = errors.New("status check unsupported by provider")

ErrStatusUnsupported should be returned when a Status() check is not supported by the provider.

Functions

This section is empty.

Types

type Alert

type Alert struct {
	Dest       Dest
	CallbackID string // CallbackID is the identifier used to communicate a response to the notification
	AlertID    int    // The global alert number
	Summary    string
	Details    string

	// OriginalStatus is the status of the first Alert notification to this Dest for this AlertID.
	OriginalStatus *SendResult
}

Alert represents outgoing notifications for alerts.

func (Alert) Body

func (a Alert) Body() string

func (Alert) Destination

func (a Alert) Destination() Dest

func (Alert) ExtendedBody

func (a Alert) ExtendedBody() string

func (Alert) ID

func (a Alert) ID() string

func (Alert) SubjectID

func (a Alert) SubjectID() int

func (Alert) Type

func (a Alert) Type() MessageType

type AlertBundle added in v0.24.0

type AlertBundle struct {
	Dest        Dest
	CallbackID  string // CallbackID is the identifier used to communicate a response to the notification
	ServiceID   string
	ServiceName string // The service being notified for
	Count       int    // Number of unacked alerts
}

AlertBundle represents a bundle of outgoing alert notifications for a single service.

func (AlertBundle) Destination added in v0.24.0

func (b AlertBundle) Destination() Dest

func (AlertBundle) ID added in v0.24.0

func (b AlertBundle) ID() string

func (AlertBundle) Type added in v0.24.0

func (b AlertBundle) Type() MessageType

type AlertStatus

type AlertStatus struct {
	Dest       Dest
	CallbackID string
	AlertID    int
	LogEntry   string

	// Summary of the alert that this status is in regards to.
	Summary string
	// Details of the alert that this status is in regards to.
	Details string

	// OriginalStatus is the status of the first Alert notification to this Dest for this AlertID.
	OriginalStatus SendResult

	// NewAlertStatus contains the most recent status for the alert.
	NewAlertStatus alert.Status
}

func (AlertStatus) Destination

func (s AlertStatus) Destination() Dest

func (AlertStatus) ID

func (s AlertStatus) ID() string

func (AlertStatus) Type

func (s AlertStatus) Type() MessageType

type DB

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

func NewDB

func NewDB(ctx context.Context, db *sql.DB) (*DB, error)

func (*DB) Code

func (db *DB) Code(ctx context.Context, id string) (int, error)

func (*DB) FindManyMessageStatuses added in v0.25.0

func (db *DB) FindManyMessageStatuses(ctx context.Context, ids ...string) ([]SendResult, error)

func (*DB) LastMessageStatus added in v0.26.0

func (db *DB) LastMessageStatus(ctx context.Context, typ MessageType, cmID string, from time.Time) (*SendResult, time.Time, error)

func (*DB) OriginalMessageStatus added in v0.28.0

func (db *DB) OriginalMessageStatus(ctx context.Context, alertID int, dst Dest) (*SendResult, error)

func (*DB) SendContactMethodTest

func (db *DB) SendContactMethodTest(ctx context.Context, id string) error

func (*DB) SendContactMethodVerification

func (db *DB) SendContactMethodVerification(ctx context.Context, cmID string) error

func (*DB) VerifyContactMethod

func (db *DB) VerifyContactMethod(ctx context.Context, cmID string, code int) error

type Dest

type Dest struct {
	ID    string
	Type  DestType
	Value string
}

func (Dest) String added in v0.28.0

func (d Dest) String() string

type DestType

type DestType int

DestType represents the type of destination, it is a combination of available contact methods and notification channels.

const (
	DestTypeUnknown DestType = iota
	DestTypeVoice
	DestTypeSMS
	DestTypeSlackChannel
	DestTypeUserEmail
	DestTypeUserWebhook
)

func (DestType) CMType added in v0.28.0

func (t DestType) CMType() contactmethod.Type

CMType returns the contactmethod.Type associated with the DestType.

func (DestType) IsUserCM

func (t DestType) IsUserCM() bool

IsUserCM returns true if the DestType represents a user contact method.

func (DestType) NCType added in v0.28.0

func (t DestType) NCType() notificationchannel.Type

NCType returns the notificationchannel.Type associated with the DestType.

func (DestType) String

func (i DestType) String() string

type FriendlyValuer added in v0.28.0

type FriendlyValuer interface {
	FriendlyValue(context.Context, string) (string, error)
}

A FriendlyValuer is an optional interface a Sender can implement that allows retrieving a friendly name for a destination value.

For example, a formatted phone number or username for a Slack ID.

type Manager

type Manager struct {
	ResultReceiver
	// contains filtered or unexported fields
}

Manager is used as an intermediary between Senders and Receivers. It should be contstructed first (with NewManager()) and passed to Senders and Receivers that require it.

func NewManager

func NewManager() *Manager

NewManager initializes a new Manager.

func (*Manager) FormatDestValue added in v0.28.0

func (mgr *Manager) FormatDestValue(ctx context.Context, destType DestType, value string) string

FormatDestValue will format the destination value if an available FriendlyValuer exists for the destType or return the original.

func (*Manager) MessageStatus added in v0.28.0

func (mgr *Manager) MessageStatus(ctx context.Context, messageID string, providerMsgID ProviderMessageID) (*Status, error)

MessageStatus will return the current status of a message.

func (*Manager) RegisterSender

func (mgr *Manager) RegisterSender(t DestType, name string, s Sender)

RegisterSender will register a sender under a given DestType and name. A sender for the same name and type will replace an existing one, if any.

func (*Manager) SendMessage added in v0.28.0

func (mgr *Manager) SendMessage(ctx context.Context, msg Message) (*SendResult, error)

SendMessage tries all registered senders for the type given in Notification. An error is returned if there are no registered senders for the type or if an error is returned from all of them.

func (*Manager) SetResultReceiver added in v0.28.0

func (mgr *Manager) SetResultReceiver(p ResultReceiver)

SetResultReceiver will set the ResultReceiver as the target for all Receiver calls. It will panic if called multiple times.

func (*Manager) SetStubNotifiers

func (mgr *Manager) SetStubNotifiers()

SetStubNotifiers will cause all notifications senders to be stubbed out.

This causes all notifications to be marked as delivered, but not actually sent.

type Message

type Message interface {
	ID() string
	Type() MessageType
	Destination() Dest
}

A Message contains information that can be provided to a user for notification.

type MessageType

type MessageType int

MessageType indicates the type of notification message.

const (
	MessageTypeUnknown MessageType = iota
	MessageTypeAlert
	MessageTypeAlertStatus
	MessageTypeTest
	MessageTypeVerification
	MessageTypeAlertBundle

	// MessageTypeAlertStatusBundle is used for bundled status messages.
	//
	// Deprecated: Alert status messages are no longer bundled, status bundle
	// messages are now dropped.
	MessageTypeAlertStatusBundle
	MessageTypeScheduleOnCallUsers
)

Allowed types

func (*MessageType) Scan added in v0.26.0

func (s *MessageType) Scan(value interface{}) error

func (MessageType) String

func (i MessageType) String() string

func (MessageType) Value added in v0.26.0

func (s MessageType) Value() (driver.Value, error)

type ProviderMessageID added in v0.28.0

type ProviderMessageID struct {
	// ExternalID is the provider-specific identifier for the message.
	ExternalID   string
	ProviderName string
}

ProviderMessageID is a provider-specific identifier for a message.

func (*ProviderMessageID) Scan added in v0.28.0

func (p *ProviderMessageID) Scan(value interface{}) error

func (ProviderMessageID) Value added in v0.28.0

func (p ProviderMessageID) Value() (driver.Value, error)

type Receiver

type Receiver interface {
	// SetMessageStatus can be used to update the state of a message.
	SetMessageStatus(ctx context.Context, externalID string, status *Status) error

	// Receive records a response to a previously sent message.
	Receive(ctx context.Context, callbackID string, result Result) error

	// Start indicates a user has opted-in for notifications to this contact method.
	Start(context.Context, Dest) error

	// Stop indicates a user has opted-out of notifications from a contact method.
	Stop(context.Context, Dest) error

	// IsKnownDest checks if the given destination is known/not disabled.
	IsKnownDest(ctx context.Context, value string) (bool, error)
}

A Receiver processes incoming messages and responses.

type ReceiverSetter added in v0.27.0

type ReceiverSetter interface {
	SetReceiver(Receiver)
}

ReceiverSetter is an optional interface a Sender can implement for use with two-way interactions.

type Result

type Result int

Result specifies a response to a notification.

const (
	ResultAcknowledge Result = iota
	ResultResolve
)

Possible notification responses.

func (Result) String

func (i Result) String() string

type ResultReceiver added in v0.28.0

type ResultReceiver interface {
	SetSendResult(ctx context.Context, res *SendResult) error

	Receive(ctx context.Context, callbackID string, result Result) error
	Start(context.Context, Dest) error
	Stop(context.Context, Dest) error

	IsKnownDest(ctx context.Context, destType DestType, destValue string) (bool, error)
}

A ResultReceiver processes notification responses.

type ScannableDestType added in v0.28.0

type ScannableDestType struct {
	// CM is the contactmethod.Type and should be scanned from the `type` column from `user_contact_methods`.
	CM contactmethod.Type

	// NC is the notificationchannel.Type and should be scanned from the `type` column from `notification_channels`.
	NC notificationchannel.Type
}

ScannableDestType allows scanning a DestType from separate columns for user contact methods and notification channels.

func (ScannableDestType) DestType added in v0.28.0

func (t ScannableDestType) DestType() DestType

DestType returns a DestType from the scanned values.

type ScheduleOnCallUsers added in v0.28.0

type ScheduleOnCallUsers struct {
	Dest       Dest
	CallbackID string

	ScheduleID   string
	ScheduleName string
	ScheduleURL  string

	Users []User
}

ScheduleOnCallUsers is a Message that indicates which users are currently on-call for a Schedule

func (ScheduleOnCallUsers) Destination added in v0.28.0

func (s ScheduleOnCallUsers) Destination() Dest

func (ScheduleOnCallUsers) ID added in v0.28.0

func (s ScheduleOnCallUsers) ID() string

func (ScheduleOnCallUsers) Type added in v0.28.0

type SendResult added in v0.28.0

type SendResult struct {
	// ID is the GoAlert message ID.
	ID string

	// ProviderMessageID is an identifier that represents the provider-specific ID
	// of the message (e.g. Twilio SID).
	ProviderMessageID ProviderMessageID

	Status

	DestType DestType
	SrcValue string
}

SendResult represents the result of a sent message.

type Sender

type Sender interface {
	// Send should return nil error if the notification was sent successfully. It should be expected
	// that a returned error means that the notification should be attempted again.
	//
	// If the sent message can have its status tracked, a unique externalID should be returned.
	Send(context.Context, Message) (*SentMessage, error)
}

A Sender can send notifications.

type SentMessage added in v0.28.0

type SentMessage struct {
	ExternalID   string
	State        State
	StateDetails string
	SrcValue     string
}

SentMessage contains information about a message that was sent to a remote system.

type State added in v0.28.0

type State int

State represents the current state of an outgoing message.

const (
	// StateUnknown is returned when the message has not yet been sent.
	StateUnknown State = iota

	// StateSending should be specified when a message is sending but has not been sent.
	// This includes things like remotely queued, ringing, or in-progress calls.
	StateSending

	// StatePending idicates a message waiting to be sent.
	StatePending

	// StateSent means the message has been sent completely, but may not
	// have been delivered (or delivery confirmation is not supported.). For
	// example, an SMS on the carrier network (but not device) or a voice call
	// that rang but got `no-answer`.
	StateSent

	// StateDelivered means the message is completed and was received
	// by the end device. SMS delivery confirmation, or a voice call was
	// completed (including if it was voice mail).
	StateDelivered

	// StateFailedTemp should be set when a message was not sent (no SMS or ringing phone)
	// but a subsequent try later may succeed. (e.g. voice call with busy signal).
	StateFailedTemp

	// StateFailedPerm should be set when a message was not sent (no SMS or ringing phone)
	// but a subsequent attempt will not be expected to succeed. For messages that fail due to
	// invalid config, they should set this state, as without manual intervention, a retry
	// will also fail.
	StateFailedPerm
)

func (State) IsOK added in v0.28.0

func (s State) IsOK() bool

IsOK returns true if the message has passed sucessfuly to a remote system (StateSending, StateSent, or StateDelivered).

type Status added in v0.28.0

type Status struct {

	// State is the current state.
	State State

	// Details can contain any additional information about the State (e.g. "ringing", "no-answer" etc..).
	Details string

	// Sequence can be used when the provider sends updates out-of order (e.g. Twilio).
	// The Sequence number defaults to 0, and a status update is ignored unless its
	// Sequence number is >= the current one.
	Sequence int
}

Status describes the current state of an outgoing message.

type StatusChecker added in v0.27.0

type StatusChecker interface {
	Status(ctx context.Context, externalID string) (*Status, error)
}

A StatusChecker is an optional interface a Sender can implement that allows checking the status of a previously sent message by it's externalID.

type Store

type Store interface {
	SendContactMethodTest(ctx context.Context, cmID string) error
	SendContactMethodVerification(ctx context.Context, cmID string) error
	VerifyContactMethod(ctx context.Context, cmID string, code int) error
	Code(ctx context.Context, id string) (int, error)
	FindManyMessageStatuses(ctx context.Context, ids ...string) ([]SendResult, error)

	// LastMessageStatus will return the MessageStatus and creation time of the most recent message of the requested type for the provided contact method ID, if one was created from the provided from time.
	LastMessageStatus(ctx context.Context, typ MessageType, cmID string, from time.Time) (*SendResult, time.Time, error)

	// OriginalMessageStatus will return the status of the first alert notification sent to `dest` for the given `alertID`.
	OriginalMessageStatus(ctx context.Context, alertID int, dest Dest) (*SendResult, error)
}

type Test

type Test struct {
	Dest       Dest
	CallbackID string // CallbackID is the identifier used to communicate a response to the notification
}

Test represents outgoing test notification.

func (Test) Body

func (t Test) Body() string

func (Test) Destination

func (t Test) Destination() Dest

func (Test) ExtendedBody

func (t Test) ExtendedBody() string

func (Test) ID

func (t Test) ID() string

func (Test) SubjectID

func (t Test) SubjectID() int

func (Test) Type

func (t Test) Type() MessageType

type User added in v0.28.0

type User struct {
	ID   string
	Name string
	URL  string
}

User provides information about a user for notifications.

type Verification

type Verification struct {
	Dest       Dest
	CallbackID string // CallbackID is the identifier used to communicate a response to the notification
	Code       int
}

Verification represents outgoing verification code.

func (Verification) Body

func (v Verification) Body() string

func (Verification) Destination

func (v Verification) Destination() Dest

func (Verification) ExtendedBody

func (v Verification) ExtendedBody() string

func (Verification) ID

func (v Verification) ID() string

func (Verification) SubjectID

func (v Verification) SubjectID() int

func (Verification) Type

func (v Verification) Type() MessageType

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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