Documentation
¶
Index ¶
- Constants
- Variables
- type AESCipher
- type Cipher
- type Config
- type Credentials
- type Data
- type Delivery
- type DeliveryEvent
- type DeliveryEventTelemetry
- type Destination
- type DestinationFilter
- type DestinationSummary
- type EntityStore
- type EntityStoreOption
- type Event
- type EventTelemetry
- type ListDestinationByTenantOpts
- type MapStringString
- type Metadata
- type Tenant
- type Topics
Constants ¶
View Source
const ( DeliveryStatusSuccess = "success" DeliveryStatusFailed = "failed" )
Variables ¶
View Source
var ( ErrInvalidTopics = errors.New("validation failed: invalid topics") ErrInvalidTopicsFormat = errors.New("validation failed: invalid topics format") )
View Source
var ( ErrTenantNotFound = errors.New("tenant does not exist") ErrTenantDeleted = errors.New("tenant has been deleted") ErrDuplicateDestination = errors.New("destination already exists") ErrDestinationNotFound = errors.New("destination does not exist") ErrDestinationDeleted = errors.New("destination has been deleted") ErrMaxDestinationsPerTenantReached = errors.New("maximum number of destinations per tenant reached") )
Functions ¶
This section is empty.
Types ¶
type Cipher ¶
func NewAESCipher ¶
type Config ¶
type Config = MapStringString
type Credentials ¶
type Credentials = MapStringString
type Delivery ¶
type Delivery struct { ID string `json:"id"` DeliveryEventID string `json:"delivery_event_id"` EventID string `json:"event_id"` DestinationID string `json:"destination_id"` Status string `json:"status"` Time time.Time `json:"time"` Code string `json:"code"` ResponseData map[string]interface{} `json:"response_data"` }
type DeliveryEvent ¶
type DeliveryEvent struct { ID string Attempt int DestinationID string Event Event Delivery *Delivery Telemetry *DeliveryEventTelemetry Manual bool // Indicates if this is a manual retry }
func NewDeliveryEvent ¶
func NewDeliveryEvent(event Event, destinationID string) DeliveryEvent
func NewManualDeliveryEvent ¶
func NewManualDeliveryEvent(event Event, destinationID string) DeliveryEvent
func (*DeliveryEvent) FromMessage ¶
func (e *DeliveryEvent) FromMessage(msg *mqs.Message) error
func (*DeliveryEvent) GetRetryID ¶
func (e *DeliveryEvent) GetRetryID() string
GetRetryID returns the ID used for scheduling retries. We use Event.ID instead of DeliveryEvent.ID because: 1. Each event should only have one scheduled retry at a time 2. Event.ID is always accessible, while DeliveryEvent.ID may require additional queries in retry scenarios
type DeliveryEventTelemetry ¶
type Destination ¶
type Destination struct { ID string `json:"id" redis:"id"` TenantID string `json:"tenant_id" redis:"-"` Type string `json:"type" redis:"type"` Topics Topics `json:"topics" redis:"-"` Config Config `json:"config" redis:"-"` Credentials Credentials `json:"credentials" redis:"-"` CreatedAt time.Time `json:"created_at" redis:"created_at"` DisabledAt *time.Time `json:"disabled_at" redis:"disabled_at"` }
func (*Destination) ToSummary ¶
func (d *Destination) ToSummary() *DestinationSummary
func (*Destination) Validate ¶
func (d *Destination) Validate(topics []string) error
type DestinationFilter ¶
type DestinationSummary ¶
type DestinationSummary struct { ID string `json:"id"` Type string `json:"type"` Topics Topics `json:"topics"` Disabled bool `json:"disabled"` }
func (*DestinationSummary) MarshalBinary ¶
func (ds *DestinationSummary) MarshalBinary() ([]byte, error)
func (*DestinationSummary) UnmarshalBinary ¶
func (ds *DestinationSummary) UnmarshalBinary(data []byte) error
type EntityStore ¶
type EntityStore interface { RetrieveTenant(ctx context.Context, tenantID string) (*Tenant, error) UpsertTenant(ctx context.Context, tenant Tenant) error DeleteTenant(ctx context.Context, tenantID string) error ListDestinationByTenant(ctx context.Context, tenantID string, options ...ListDestinationByTenantOpts) ([]Destination, error) RetrieveDestination(ctx context.Context, tenantID, destinationID string) (*Destination, error) CreateDestination(ctx context.Context, destination Destination) error UpsertDestination(ctx context.Context, destination Destination) error DeleteDestination(ctx context.Context, tenantID, destinationID string) error MatchEvent(ctx context.Context, event Event) ([]DestinationSummary, error) }
func NewEntityStore ¶
func NewEntityStore(redisClient *redis.Client, opts ...EntityStoreOption) EntityStore
type EntityStoreOption ¶
type EntityStoreOption func(*entityStoreImpl)
func WithAvailableTopics ¶
func WithAvailableTopics(topics []string) EntityStoreOption
func WithCipher ¶
func WithCipher(cipher Cipher) EntityStoreOption
func WithMaxDestinationsPerTenant ¶
func WithMaxDestinationsPerTenant(maxDestinationsPerTenant int) EntityStoreOption
type Event ¶
type Event struct { ID string `json:"id"` TenantID string `json:"tenant_id"` DestinationID string `json:"destination_id"` Topic string `json:"topic"` EligibleForRetry bool `json:"eligible_for_retry"` Time time.Time `json:"time"` Metadata Metadata `json:"metadata"` Data Data `json:"data"` Status string `json:"status,omitempty"` // Telemetry data, must exist to properly trace events between publish receiver & delivery handler Telemetry *EventTelemetry `json:"telemetry,omitempty"` }
type EventTelemetry ¶
type ListDestinationByTenantOpts ¶
type ListDestinationByTenantOpts struct {
Filter *DestinationFilter
}
func WithDestinationFilter ¶
func WithDestinationFilter(filter DestinationFilter) ListDestinationByTenantOpts
type MapStringString ¶
func (*MapStringString) MarshalBinary ¶
func (m *MapStringString) MarshalBinary() ([]byte, error)
func (*MapStringString) UnmarshalBinary ¶
func (m *MapStringString) UnmarshalBinary(data []byte) error
func (*MapStringString) UnmarshalJSON ¶
func (m *MapStringString) UnmarshalJSON(data []byte) error
type Metadata ¶
func (*Metadata) UnmarshalBinary ¶
type Topics ¶
type Topics []string
func TopicsFromString ¶
func (*Topics) MarshalBinary ¶
func (*Topics) MarshalJSON ¶
func (*Topics) MatchesAll ¶
func (*Topics) UnmarshalBinary ¶
func (*Topics) UnmarshalJSON ¶
Click to show internal directories.
Click to hide internal directories.