summary

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: 4 Imported by: 0

Documentation

Overview

Package summary resume uma janela em estado, disponibilidade e latência.

Existe no servidor porque painel, tela de detalhe e qualquer script que consulte a API precisam chegar ao mesmo número para a mesma janela. Esse cálculo já viveu na interface, duplicado entre duas telas: cada cópia decidia sozinha o que fazer com ausência de medição, e as duas discordavam sem que nada acusasse.

A regra que organiza o pacote: ausência de medição é ausência, nunca zero. Zero é uma afirmação — "esteve fora o tempo todo", "respondeu instantaneamente" — e afirmá-la sobre o que não se mediu é a forma mais silenciosa de uma ferramenta de vigilância mentir. Por isso os campos numéricos são ponteiros.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Point

type Point struct {
	At     time.Time
	Status domain.Status
	// LatencyMS é nil quando ninguém respondeu no bucket.
	LatencyMS *float64
}

Point é um bucket da série desenhada.

func Series

func Series(from, to time.Time, buckets int, hbs []domain.Heartbeat) []Point

Series divide a janela em buckets de largura igual.

Entregar a série já dividida — em vez das N amostras mais recentes — é o que garante que a faixa e o número descrevam o mesmo período. Pedindo as N mais recentes, um intervalo curto fazia a figura cobrir uma hora enquanto o rótulo dizia vinte e quatro.

type Source

type Source string

Source é a camada de onde o resumo saiu.

const (
	SourceRaw    Source = "raw"
	SourceHourly Source = "hourly"
	SourceDaily  Source = "daily"
)

func SourceFor

func SourceFor(window time.Duration) Source

SourceFor escolhe a camada adequada à janela.

A decisão é do servidor, e não de quem chama: assim um script recebe o mesmo número que a interface mostra, sem precisar saber que existe uma tabela de agregados.

type Summary

type Summary struct {
	MonitorID int64
	Status    domain.Status
	Source    Source

	// UptimePercent é nil quando nada foi observado. Distinguir isso de
	// zero é o ponto: zero afirma indisponibilidade total.
	UptimePercent *float64

	LatencyP50MS *float64
	LatencyP95MS *float64
	LatencyP99MS *float64

	// LastCheckAt é o instante da última verificação, nil se não houve.
	LastCheckAt *time.Time

	Up       int
	Degraded int
	Down     int
	Unknown  int
}

Summary é o resumo de uma janela para um monitor.

func FromHeartbeats

func FromHeartbeats(monitorID int64, hbs []domain.Heartbeat) Summary

FromHeartbeats resume batidas cruas.

func FromRollups

func FromRollups(monitorID int64, src Source, rs []domain.Rollup) Summary

FromRollups resume agregados horários ou diários.

A camada vem por parâmetro, e não inferida das linhas: ela é a decisão que o servidor tomou ao ler, e uma janela sem dado nenhum precisa relatar de onde se tentou ler. Inferindo, uma janela vazia de noventa dias respondia "hourly" — descrevendo uma leitura que não aconteceu.

Jump to

Keyboard shortcuts

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