routing

package
v0.12.1 Latest Latest
Warning

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

Go to latest
Published: Nov 17, 2023 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	OpniSubRoutingTreeMatcher *labels.Matcher = &labels.Matcher{
		Type:  labels.MatchEqual,
		Name:  alertingv1.RoutingPropertyDatasource,
		Value: "",
	}

	OpniMetricsSubRoutingTreeMatcher *labels.Matcher = &labels.Matcher{
		Type:  labels.MatchEqual,
		Name:  alertingv1.RoutingPropertyDatasource,
		Value: wellknown.CapabilityMetrics,
	}

	OpniSeverityTreeMatcher *labels.Matcher = &labels.Matcher{
		Type:  labels.MatchNotEqual,
		Name:  message.NotificationPropertySeverity,
		Value: "",
	}
)
View Source
var (
	DefaultConfig = Config{
		GlobalConfig: GlobalConfig{
			GroupWait:      lo.ToPtr(model.Duration(60 * time.Second)),
			RepeatInterval: lo.ToPtr(model.Duration(5 * time.Hour)),
		},
		SubtreeConfig: SubtreeConfig{
			GroupWait:      lo.ToPtr(model.Duration(60 * time.Second)),
			RepeatInterval: lo.ToPtr(model.Duration(5 * time.Hour)),
		},
		FinalizerConfig: FinalizerConfig{
			InitialDelay:       time.Second * 10,
			ThrottlingDuration: time.Minute * 1,
			RepeatInterval:     time.Hour * 5,
		},
		NotificationConfg: NotificationConfg{},
	}
)
View Source
var OpniMetricsSubRoutingTreeId config.Matchers = []*labels.Matcher{
	OpniMetricsSubRoutingTreeMatcher,
}

Functions

func FinalizerReceiver added in v0.9.0

func FinalizerReceiver(cfg *config.WebhookConfig) config.Receiver

func NewNamespaceLeaf added in v0.9.0

func NewNamespaceLeaf(
	rl rateLimitingConfig,
	opniConfigs []config.OpniReceiver,
	matchers []*labels.Matcher,
	receiverId string,
) (*config.Route, config.Receiver)

new namespace matcher

func NewNamespaceTree added in v0.9.0

func NewNamespaceTree(namespace string, defaultValues ...RouteValues) (*config.Route, []config.Receiver)

func NewNotificationLeaf added in v0.9.0

func NewNotificationLeaf(namespace string, value RouteValues) (*config.Route, config.Receiver)

func NewOpniMetricsSubtree

func NewOpniMetricsSubtree() *config.Route

this subtree connects to cortex

func NewOpniSubRoutingTree

func NewOpniSubRoutingTree() (*config.Route, []config.Receiver)

returns the subtree & the default receivers contains the setup for broadcasting and conditions

func NewRootNode added in v0.9.0

func NewRootNode(cfg *config.WebhookConfig) *config.Config

This needs to expand all labels, due to assumptions we make about external backends like AiOps pushing messages to the severity tree

func NewRoutingTree added in v0.9.0

func NewRoutingTree(cfg *config.WebhookConfig) *config.Config

func NotificationSubTreeLabel added in v0.9.0

func NotificationSubTreeLabel() string

Types

type Config added in v0.11.0

type Config struct {
	GlobalConfig      `yaml:"global", json:"global"`
	SubtreeConfig     `yaml:"subtree", json:"subtree"`
	FinalizerConfig   `yaml:"finalizer", json:"finalizer"`
	NotificationConfg `yaml:"notification", json:"notification"`
}

type FinalizerConfig added in v0.11.0

type FinalizerConfig struct {
	InitialDelay       time.Duration `yaml:"initialDelay", json:"initialDelay"`
	ThrottlingDuration time.Duration `yaml:"throttlingDuration", json:"throttlingDuration"`
	RepeatInterval     time.Duration `yaml:"repeatInterval", json:"repeatInterval"`
}

type GlobalConfig added in v0.11.0

type GlobalConfig struct {
	GroupWait      *model.Duration `yaml:"groupWait", json:"groupWait"`
	RepeatInterval *model.Duration `yaml:"repeatInterval", json:"repeatInterval"`
}

type NotificationConfg added in v0.11.0

type NotificationConfg struct {
}

type OpniRouterV1

type OpniRouterV1 struct {
	DefaultReceiver config.WebhookConfig `yaml:"defaultReceiver,omitempty" json:"hookEndpoint,omitempty"`
	// Contains an AlertManager config not created and managed by Opni
	SyncedConfig *config.Config `yaml:"embeddedConfig,omitempty" json:"embeddedConfig,omitempty"`

	// defaultNamespaceValue -> endpointId -> OpniConfig
	DefaultNamespaceConfigs defaultNamespaceConfigs `yaml:"defaultNamespaceConfigs,omitempty" json:"defaultNamespaceConfigs,omitempty"`
	// namespace -> routeId -> endpointId -> OpniConfig
	NamespacedSpecs namespacedSpecs `yaml:"namespacedSpecs,omitempty" json:"namespacedSpecs,omitempty"`
	// namespace -> routeId -> 	rateLimitingConfig
	NamespacedRateLimiting namespaceRateLimiting `yaml:"namespacedRateLimiting,omitempty" json:"namespacedRateLimiting,omitempty"`
	// contains filtered or unexported fields
}

indexes using endpointId for scalability

func NewOpniRouterV1

func NewOpniRouterV1(defaultRevc config.WebhookConfig) *OpniRouterV1

func (*OpniRouterV1) BuildConfig

func (o *OpniRouterV1) BuildConfig() (*config.Config, error)

func (*OpniRouterV1) Clone

func (o *OpniRouterV1) Clone() OpniRouting

func (*OpniRouterV1) DeleteEndpoint

func (o *OpniRouterV1) DeleteEndpoint(id string) error

func (*OpniRouterV1) HasLabels

func (o *OpniRouterV1) HasLabels(routingId string) []*labels.Matcher

func (*OpniRouterV1) HasReceivers

func (o *OpniRouterV1) HasReceivers(routingId string) []string

func (*OpniRouterV1) Merge

func (o *OpniRouterV1) Merge(_ OpniRouting) (OpniRouting, error)

func (*OpniRouterV1) Search

func (o *OpniRouterV1) Search(map[string]string) []*config.Route

func (*OpniRouterV1) SetDefaultNamespaceConfig

func (o *OpniRouterV1) SetDefaultNamespaceConfig(endpoints []*alertingv1.AlertEndpoint) error

func (*OpniRouterV1) SetDefaultReceiver added in v0.9.0

func (o *OpniRouterV1) SetDefaultReceiver(cfg config.WebhookConfig)

func (*OpniRouterV1) SetNamespaceSpec

func (o *OpniRouterV1) SetNamespaceSpec(namespace, routeId string, specs *alertingv1.FullAttachedEndpoints) error

func (*OpniRouterV1) SyncExternalConfig

func (o *OpniRouterV1) SyncExternalConfig(content []byte) error

func (*OpniRouterV1) UpdateEndpoint

func (o *OpniRouterV1) UpdateEndpoint(id string, spec *alertingv1.AlertEndpoint) error

func (*OpniRouterV1) Walk

func (o *OpniRouterV1) Walk(map[string]string, func(int, *config.Route) error) error

type OpniRouting

type OpniRouting interface {
	ProductionConfigSyncer
	RoutingIdentifer

	SetDefaultNamespaceConfig(endps []*alertingv1.AlertEndpoint) error
	SetNamespaceSpec(namespace string, routeId string, specs *alertingv1.FullAttachedEndpoints) error
	// When an already attached endpoint is updated, propagate updates to the routing tree
	UpdateEndpoint(id string, spec *alertingv1.AlertEndpoint) error
	// When an already attached endpoint is delete, propagate all deletions to the routing tree
	DeleteEndpoint(endpointId string) error

	// Converts OpniRouting to a valid AlertManager config
	// Returns a NotFound error if the a route to update or delete is not found
	// Returns a Conflict error if we try to insert a duplicate config, unique up to its keys
	BuildConfig() (*config.Config, error)
	Clone() OpniRouting
}

OpniRouting Responsible for handling the mapping of ids to configured endpoints, including indexing external configs

func NewDefaultOpniRouting

func NewDefaultOpniRouting() OpniRouting

type ProductionConfigSyncer

type ProductionConfigSyncer interface {
	// Walks the tree of routes in the config, calling the given function
	Walk(map[string]string, func(depth int, r *config.Route) error) error
	// Returns the routes that match the given labels
	Search(labels map[string]string) []*config.Route
	// Merges two OpniRouting objects (also includes merging plain AlertManager configs for users)
	Merge(other OpniRouting) (OpniRouting, error)
	// Converts a valid AlertManager config to OpniRouting
	// Returns an FailedPrecondition error if the config cannot be unmarshalled,
	// Returns an InternalServerError if the config is invalid
	SyncExternalConfig(content []byte) error
}

type RouteValues added in v0.9.0

type RouteValues lo.Tuple2[string, rateLimitingConfig]

RouteValues (receiver name, rate limiting config)

func NotificationSubTreeValues added in v0.9.0

func NotificationSubTreeValues() []RouteValues

! values must be returned sorted in a deterministic order

these are used by the router to catch eveyrthing that is not an explicit alarm that is also part of opni, i.e. plain text notifications

type RoutingIdentifer

type RoutingIdentifer interface {
	HasLabels(routingId string) []*labels.Matcher
	HasReceivers(routingId string) []string
	// SetDefaultReceiver(endpoint url.URL)
	SetDefaultReceiver(config.WebhookConfig)
}

type SubtreeConfig added in v0.11.0

type SubtreeConfig struct {
	GroupWait      *model.Duration `yaml:"groupWait", json:"groupWait"`
	RepeatInterval *model.Duration `yaml:"repeatInterval", json:"repeatInterval"`
}

Jump to

Keyboard shortcuts

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