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
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 Context ¶
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 ¶
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 ¶
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 ¶
Interceptor aplica um comportamento ao Context. Retornar erro aborta o pipeline (ex.: cliente desconectou durante a latência).
type LatencyInterceptor ¶
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) Delete ¶ added in v0.7.0
Delete remove o override de uma chave (mesma forma usada em Set), devolvendo se existia.
func (*Overrides) Get ¶ added in v0.7.0
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).
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 ¶
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.