notifier

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2026 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Overview

Package notifier entrega avisos de mudança de estado.

Um sistema de monitoramento que exige alguém olhando a tela não monitora nada. É aqui que a informação sai da ferramenta e chega em quem pode agir.

Index

Constants

View Source
const (
	// DefaultMaxAttempts é quantas vezes uma entrega é tentada.
	//
	// Falha momentânea é o caso comum, então desistir na primeira
	// perderia avisos por um soluço de rede; retentar para sempre
	// transformaria um destino removido num laço infinito.
	DefaultMaxAttempts = 4

	// DefaultRetryDelay é a espera antes da primeira retentativa. Cresce a
	// cada tentativa.
	DefaultRetryDelay = 2 * time.Second

	// DefaultQueueSize dá folga para uma rajada de incidentes.
	DefaultQueueSize = 256

	// DefaultWorkers entrega em paralelo, para um canal lento não segurar
	// os demais.
	DefaultWorkers = 4
)

Padrões do despachante.

Variables

This section is empty.

Functions

func Marcadores added in v0.2.0

func Marcadores() []string

Marcadores são as variáveis que um mapeamento de corpo pode usar.

Exportado porque a interface precisa mostrar a lista a quem escreve o mapeamento: um recurso cuja única documentação está no README vira um recurso que ninguém usa. Um teste garante que esta lista e os valores realmente produzidos não se separem.

func Render

func Render(n Notification) string

Render descreve o evento em uma frase.

Escrita para ser lida no celular às três da manhã: o que caiu, o que aconteceu e há quanto tempo — nessa ordem, sem preâmbulo.

func Types

func Types() []string

Types lista os canais atendidos, para a interface montar a escolha.

Types

type Dispatcher

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

Dispatcher entrega avisos fora do caminho crítico do monitoramento.

A separação é o ponto do componente: um canal fora do ar não pode atrasar o registro das batidas, e uma tempestade de incidentes não pode travar o agendador.

func NewDispatcher

func NewDispatcher(opts DispatcherOptions) *Dispatcher

NewDispatcher cria o despachante. É preciso chamar Run para ele operar.

func (*Dispatcher) Dropped

func (d *Dispatcher) Dropped() int64

Dropped conta os avisos descartados por fila cheia ou tentativas esgotadas.

func (*Dispatcher) Enqueue

func (d *Dispatcher) Enqueue(n Notification, channels []Notifier)

Enqueue aceita um aviso para entrega.

Nunca bloqueia. Quem chama está no caminho crítico do monitoramento, e prendê-lo atrás de um canal lento faria o agendador parar de verificar alvos — perder um aviso é ruim, parar de monitorar é pior. O descarte é contado para não acontecer em silêncio.

func (*Dispatcher) MaxAttempts

func (d *Dispatcher) MaxAttempts() int

MaxAttempts é o teto de tentativas por entrega.

func (*Dispatcher) Run

func (d *Dispatcher) Run(ctx context.Context)

Run entrega os avisos até o contexto terminar.

type DispatcherOptions

type DispatcherOptions struct {
	MaxAttempts int
	RetryDelay  time.Duration
	QueueSize   int
	Workers     int
	Clock       clock.Clock

	// Counters separa entregue de descartado na exposição de métricas.
	//
	// Opcional: o contador nulo aceita observações sem fazer nada, então
	// quem monta um despachante em teste não precisa saber que ele
	// existe.
	Counters *metrics.Counters
}

DispatcherOptions configura o despachante.

type Notification

type Notification struct {
	Monitor domain.Monitor
	Event   domain.StateChange
	// Message é a causa observada, quando houver. É o que decide se
	// alguém precisa levantar da cadeira.
	Message string
}

Notification é o que se quer contar.

func (Notification) Status

func (n Notification) Status() string

Status é o estado que passou a valer, em texto.

type Notifier

type Notifier interface {
	Send(ctx context.Context, n Notification) error
}

Notifier entrega uma notificação por um canal.

func Build

func Build(kind string, config json.RawMessage) (Notifier, error)

Build monta o notificador do tipo pedido.

func NewDiscord

func NewDiscord(raw json.RawMessage) (Notifier, error)

NewDiscord cria o canal do Discord.

func NewSlack

func NewSlack(raw json.RawMessage) (Notifier, error)

NewSlack cria o canal do Slack.

func NewWebhook

func NewWebhook(raw json.RawMessage) (Notifier, error)

NewWebhook cria o canal genérico.

O corpo é um JSON estável com os campos crus além do texto: quem integra costuma querer o dado, não a frase.

Jump to

Keyboard shortcuts

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