Documentation
¶
Overview ¶
Package api expoe a interface HTTP do Brevis.
Usa net/http puro. O roteamento por metodo e path do ServeMux (Go 1.22+) cobre o que precisamos, e a regra 6 do plano pede evitar framework quando a stdlib resolve. O trabalho dificil deste sistema esta na fila, no scheduler e na maquina de estados — nao no HTTP.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Acoes ¶
type Acoes interface {
Alternar(ctx context.Context, slug string) (bool, error)
Disparar(ctx context.Context, slug string, agora time.Time, params map[string]string) (uuid.UUID, error)
}
Acoes sao os dois efeitos que a tela dispara. Interface pequena de proposito: a UI nao deve poder fazer mais nada no sistema do que pausar uma agenda e mandar rodar agora.
type Checker ¶
Checker e uma dependencia que o readiness consulta. Interface pequena de proposito (regra 5): o postgres.Pool ja a satisfaz sem adaptador.
type Definicoes ¶
Definicoes le a definicao publicada de um workflow. Separada de `Leitura` porque devolve o dominio, nao uma projecao de tela.
type Execucoes ¶
type Execucoes interface {
Buscar(ctx context.Context, id uuid.UUID) (run.Run, error)
EstadoDosNos(ctx context.Context, id uuid.UUID) (map[string]postgres.EstadoNo, error)
LogsDaRun(ctx context.Context, id uuid.UUID) ([]postgres.LogDoPasso, error)
}
Execucoes le uma Run e o estado de seus passos.
type Leitura ¶
type Leitura interface {
Indicadores(ctx context.Context, janela time.Duration) (postgres.Indicadores, error)
ExecucoesPorHora(ctx context.Context, horas int) ([]postgres.Balde, error)
EmAndamento(ctx context.Context, limite int) ([]postgres.ResumoRun, error)
UltimasRuns(ctx context.Context, limite int) ([]postgres.ResumoRun, error)
Runs(ctx context.Context, f postgres.FiltroRuns) ([]postgres.ResumoRun, error)
ContarRuns(ctx context.Context, f postgres.FiltroRuns) (int, error)
RunsDoWorkflow(ctx context.Context, slug string, limite int) ([]postgres.ResumoRun, error)
Workflows(ctx context.Context) ([]postgres.ResumoWorkflow, error)
Agendas(ctx context.Context) ([]postgres.AgendaResumo, error)
Projetos(ctx context.Context) ([]postgres.ResumoProjeto, error)
ProfundidadeDaFila(ctx context.Context) (int, int, error)
}
Leitura e o que a UI precisa do banco. Interface declarada aqui, no consumidor.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server carrega o roteador e as dependencias que o readiness consulta.
func NewServer ¶
NewServer monta o roteador. Os checkers sao nomeados para que o /ready diga QUAL dependencia falhou, e nao apenas que algo falhou.
`ui` pode ser nil: um processo que so serve health check nao precisa das paginas, e exigi-las acoplaria o servidor ao banco sem necessidade.
func NewServerAutenticado ¶
func NewServerAutenticado(log *slog.Logger, checkers map[string]Checker, ui *UI, cred auth.Credencial, inseguro bool, ) *Server
NewServerAutenticado e o mesmo, exigindo sessao quando a credencial esta configurada. `inseguro` manda o cookie sem a flag Secure — necessario apenas para http puro em desenvolvimento, porque um cookie Secure nunca chega de volta por http e o login pareceria simplesmente nao funcionar.
func (*Server) HTTPServer ¶
HTTPServer devolve o servidor configurado. Os timeouts existem porque o default do net/http e nenhum: sem eles, uma conexao lenta segura um handler indefinidamente.