Documentation
¶
Index ¶
- Constants
- func GenerateRandomLimitKey(limitType LimitType) (string, error)
- type CompositeResolver
- type Config
- type ConfigCheckSums
- type DefaultResolver
- type FixedWindowOption
- type KeyInfo
- type KeyLoader
- type KeysetFilter
- type LimitAlgoType
- type LimitRule
- type LimitType
- type ProvisionedResolver
- type Registry
- func (r Registry) Allow(ctx acl.Context) error
- func (m *Registry) AutoReload(interval time.Duration, reloader func() (*Config, error))
- func (r *Registry) Create(ctx context.Context, resource, group string) (rate.Limiter, error)
- func (r *Registry) GetGroupAndKey(ctx context.Context, resource string) (group, key string, err error)
- func (r *Registry) Resolve(ctx context.Context) (*StrategyDecision, error)
- func (r *Registry) Strategies() []*Strategy
- type SVipStatus
- type Strategy
- type StrategyDecision
- type StrategyResolver
- type StrategyResolverType
- type TokenBucketOption
- type UserMetaData
- type Web3payResolver
Constants ¶
View Source
const ( LimitKeyCacheSize = 5000 LimitKeyExpirationTTL = 60 * time.Second )
View Source
const ( UserTypeGuest = "guest" UserTypeWeb3Pay = "web3pay_user" UserTypeProvisioned = "provisioned_user" )
View Source
const (
// pre-defined default strategy name
DefaultStrategy = "default"
)
View Source
const (
GCScheduleInterval = 5 * time.Minute
)
View Source
const (
LimitKeyLength = 32
)
Variables ¶
This section is empty.
Functions ¶
func GenerateRandomLimitKey ¶
Types ¶
type CompositeResolver ¶
type CompositeResolver struct {
// contains filtered or unexported fields
}
CompositeResolver tries multiple resolvers in order until one matches.
func NewCompositeResolver ¶
func NewCompositeResolver(resolvers ...StrategyResolver) *CompositeResolver
func (*CompositeResolver) Resolve ¶
func (r *CompositeResolver) Resolve(ctx context.Context, reg *Registry) (*StrategyDecision, error)
type ConfigCheckSums ¶
type ConfigCheckSums struct {
Strategies map[uint32][md5.Size]byte
AllowLists map[uint32][md5.Size]byte
}
ConfigCheckSums config md5 checksum
type DefaultResolver ¶
type DefaultResolver struct{}
func (*DefaultResolver) Resolve ¶
func (r *DefaultResolver) Resolve(ctx context.Context, reg *Registry) (*StrategyDecision, error)
type FixedWindowOption ¶
FixedWindowOption limit option for fixed window
func (*FixedWindowOption) UnmarshalJSON ¶
func (fwo *FixedWindowOption) UnmarshalJSON(data []byte) error
UnmarshalJSON implements `json.Unmarshaler`
type KeyLoader ¶
type KeyLoader struct {
// contains filtered or unexported fields
}
func NewKeyLoader ¶
func NewKeyLoader(ksload ksLoadFunc) *KeyLoader
type KeysetFilter ¶
type LimitAlgoType ¶
type LimitAlgoType string
const ( // rate limit algorithms, only `fixed_window` and `token bucket` are supported for now. LimitAlgoFixedWindow LimitAlgoType = "fixed_window" LimitAlgoTokenBucket LimitAlgoType = "token_bucket" )
type LimitRule ¶
type LimitRule struct {
Algo LimitAlgoType
Option interface{}
}
LimitRule resource limit rule
func (*LimitRule) UnmarshalJSON ¶
type ProvisionedResolver ¶
type ProvisionedResolver struct{}
func (*ProvisionedResolver) Resolve ¶
func (r *ProvisionedResolver) Resolve(ctx context.Context, reg *Registry) (*StrategyDecision, error)
type Registry ¶
func NewRegistry ¶
func NewRegistry(kloader *KeyLoader, valFactory acl.ValidatorFactory) *Registry
func (*Registry) AutoReload ¶
func (*Registry) GetGroupAndKey ¶
func (*Registry) Resolve ¶
func (r *Registry) Resolve(ctx context.Context) (*StrategyDecision, error)
func (*Registry) Strategies ¶
type SVipStatus ¶
type SVipStatus = KeyInfo
func SVipStatusFromContext ¶
func SVipStatusFromContext(ctx context.Context) (*SVipStatus, bool)
SVipStatusFromContext returns SVIP status from context
type Strategy ¶
type Strategy struct {
ID uint32 // strategy ID
Name string // strategy name
LimitOptions map[string]interface{} // resource => limit option
}
Strategy rate limit strategy
func NewStrategy ¶
func (*Strategy) UnmarshalJSON ¶
UnmarshalJSON implements `json.Unmarshaler`
type StrategyDecision ¶
type StrategyDecision struct {
Strategy *Strategy // matched static strategy
LimitType LimitType // rate limit type
LimitKey string // unique key for limiter
UserMeta UserMetaData // runtime user metadata
MatchedBy StrategyResolverType // which resolver matched
}
StrategyDecision is the result of resolving which rate limit strategy applies to the current request, including its runtime parameters.
type StrategyResolver ¶
type StrategyResolver interface {
Resolve(ctx context.Context, reg *Registry) (decision *StrategyDecision, err error)
}
type StrategyResolverType ¶
type StrategyResolverType string
const ( ResolverDefault StrategyResolverType = "default" ResolverWeb3pay StrategyResolverType = "web3pay" ResolverProvisioned StrategyResolverType = "provisioned" )
type TokenBucketOption ¶
TokenBucketOption limit option for token bucket
func NewTokenBucketOption ¶
func NewTokenBucketOption(r, b int) TokenBucketOption
type UserMetaData ¶
type Web3payResolver ¶
type Web3payResolver struct{}
func (*Web3payResolver) Resolve ¶
func (r *Web3payResolver) Resolve(ctx context.Context, reg *Registry) (*StrategyDecision, error)
Click to show internal directories.
Click to hide internal directories.