interceptor

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Jun 4, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package interceptor implementa um pipeline de comportamento de runtime (Chain of Responsibility) aplicado a cada requisição antes da resposta ser escrita. Cada Interceptor pode introduzir efeitos (ex.: latência) e/ou sobrescrever o Result do scenario (ex.: falha, timeout, corrupção), compondo comportamentos sem acoplar o transport a cada um deles.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SplitTarget added in v0.7.0

func SplitTarget(s string) (method, path string)

SplitTarget separa um alvo "METHOD path" em método (em maiúsculas) e path. Sem espaço, o método fica vazio (qualquer método). Ex.: "POST /pets" → ("POST", "/pets"); "/pets" → ("", "/pets").

Types

type Chain

type Chain []Interceptor

Chain é uma sequência de interceptors aplicada em ordem.

func (Chain) Apply

func (c Chain) Apply(ctx *Context) error

Apply roda cada interceptor em ordem, parando no primeiro erro.

type Context

type Context struct {
	Request  *http.Request
	Endpoint domain.Endpoint
	Result   *scenario.Result
}

Context carrega o estado mutável de uma requisição ao longo do pipeline. Os interceptors leem Request/Endpoint e podem sobrescrever Result.

type CorruptionInterceptor

type CorruptionInterceptor struct {
	Rate float64
	Rand func() float64
}

CorruptionInterceptor sobrescreve o Result com um corpo malformado em uma fração Rate das requisições.

func (CorruptionInterceptor) Apply

func (c CorruptionInterceptor) Apply(ctx *Context) error

Apply, com probabilidade Rate, força um corpo JSON malformado.

type FailureInterceptor

type FailureInterceptor struct {
	Status int
	Rate   float64
	Rand   func() float64
}

FailureInterceptor sobrescreve o Result com um erro de servidor em uma fração Rate (0..1) das requisições.

func (FailureInterceptor) Apply

func (f FailureInterceptor) Apply(ctx *Context) error

Apply, com probabilidade Rate, força um erro de servidor com Status.

type Interceptor

type Interceptor interface {
	Apply(*Context) error
}

Interceptor aplica um comportamento ao Context. Retornar erro aborta o pipeline (ex.: cliente desconectou durante a latência).

type LatencyInterceptor

type LatencyInterceptor struct {
	Delay time.Duration
}

LatencyInterceptor atrasa toda requisição por Delay, simulando um serviço lento. Respeita o cancelamento do cliente: se a conexão cair durante a espera, aborta o pipeline.

func (LatencyInterceptor) Apply

func (l LatencyInterceptor) Apply(ctx *Context) error

Apply dorme por Delay ou retorna o erro do contexto se o cliente desistir.

type Override added in v0.7.0

type Override struct {
	Status    int     `json:"status,omitempty"`
	LatencyMs int     `json:"latencyMs,omitempty"`
	Rate      float64 `json:"rate,omitempty"`
}

Override descreve um comportamento aplicado a um endpoint em runtime, definido pela Admin API. Status (quando > 0) sobrescreve a resposta; LatencyMs (quando > 0) adiciona atraso; Rate (0..1) limita a fração de requisições afetadas pelo Status — 0 ou >= 1 significa sempre.

type OverrideInterceptor added in v0.7.0

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

OverrideInterceptor aplica os overrides ativos do store à requisição. Mantém-se como ponteiro porque o store é mutável em runtime.

func NewOverrideInterceptor added in v0.7.0

func NewOverrideInterceptor(store *Overrides) *OverrideInterceptor

NewOverrideInterceptor cria o interceptor que consulta store a cada requisição.

func (*OverrideInterceptor) Apply added in v0.7.0

func (i *OverrideInterceptor) Apply(ctx *Context) error

Apply consulta o override do endpoint e, se houver, adiciona latência e/ou sobrescreve o status.

type Overrides added in v0.7.0

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

Overrides guarda, de forma segura para concorrência, os overrides ativos por endpoint. A chave é "METHOD path" quando há método, ou só "path" para valer em qualquer método. Leituras vêm do hot path das requisições; escritas, da Admin API.

func NewOverrides added in v0.7.0

func NewOverrides() *Overrides

NewOverrides cria um store vazio.

func (*Overrides) Clear added in v0.7.0

func (o *Overrides) Clear() int

Clear remove todos os overrides e devolve quantos havia.

func (*Overrides) Delete added in v0.7.0

func (o *Overrides) Delete(method, path string) bool

Delete remove o override de uma chave (mesma forma usada em Set), devolvendo se existia.

func (*Overrides) Get added in v0.7.0

func (o *Overrides) Get(method, path string) (Override, bool)

Get devolve o override aplicável a um endpoint: primeiro o específico do método, senão o de qualquer método (path puro).

func (*Overrides) Set added in v0.7.0

func (o *Overrides) Set(method, path string, ov Override)

Set define (ou substitui) o override de um endpoint. Método vazio vale para qualquer método daquele path.

func (*Overrides) Snapshot added in v0.7.0

func (o *Overrides) Snapshot() map[string]Override

Snapshot devolve uma cópia dos overrides ativos.

type ScopedInterceptor

type ScopedInterceptor struct {
	Method string
	Path   string
	Inner  Interceptor
}

ScopedInterceptor aplica Inner apenas às requisições cujo endpoint casa com Method e Path. Path vazio = qualquer path; Method vazio = qualquer método. O casamento de path é exato contra o template OpenAPI (ex.: "/pets/{petId}") e o de método é case-insensitive.

func (ScopedInterceptor) Apply

func (s ScopedInterceptor) Apply(ctx *Context) error

Apply roda Inner se método e path casarem com o endpoint da requisição.

type SequenceInterceptor added in v0.7.0

type SequenceInterceptor struct {
	Statuses []int
	// contains filtered or unexported fields
}

SequenceInterceptor devolve os Statuses em ordem, um por requisição: a 1ª resposta usa Statuses[0], a 2ª Statuses[1], e assim por diante. Esgotada a lista, fixa no último (útil para polling, ex.: 202,202,200). É stateful e seguro para uso concorrente; use sempre como ponteiro para preservar o estado.

func (*SequenceInterceptor) Apply added in v0.7.0

func (s *SequenceInterceptor) Apply(ctx *Context) error

Apply avança a sequência e sobrescreve o Result com o status da vez.

type TimeoutInterceptor

type TimeoutInterceptor struct {
	Delay time.Duration
	Rate  float64
	Rand  func() float64
}

TimeoutInterceptor sobrescreve o Result com um timeout (504 após Delay) em uma fração Rate das requisições.

func (TimeoutInterceptor) Apply

func (t TimeoutInterceptor) Apply(ctx *Context) error

Apply, com probabilidade Rate, força um timeout de duração Delay.

Jump to

Keyboard shortcuts

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