Documentation ¶
Index ¶
- func NewInMemoryLimiter(interval time.Duration, bucketCount int, limit complexLimit) *inMemoryLimiter
- func NewRedisLimiter(ctx context.Context, redis redisClient, ...) *redisLimiter
- func NewRule(conditions map[string]string, limit complexLimit, ruleNum int) *rule
- type Config
- type Plugin
- type RedisBackendConfig
- type RuleConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewInMemoryLimiter ¶ added in v0.6.0
func NewInMemoryLimiter(interval time.Duration, bucketCount int, limit complexLimit) *inMemoryLimiter
NewInMemoryLimiter returns limiter instance.
func NewRedisLimiter ¶ added in v0.6.0
func NewRedisLimiter( ctx context.Context, redis redisClient, pipelineName, throttleFieldName, throttleFieldValue string, bucketInterval time.Duration, bucketCount int, limit complexLimit, keyLimitOverride string, valField string, ) *redisLimiter
NewRedisLimiter return instance of redis limiter.
Types ¶
type Config ¶
type Config struct { // > @3@4@5@6 // > // > The event field which will be used as a key for throttling. // > It means that throttling will work separately for events with different keys. // > If not set, it's assumed that all events have the same key. ThrottleField cfg.FieldSelector `json:"throttle_field" default:"" parse:"selector"` // * ThrottleField_ []string // > @3@4@5@6 // > // > The event field which defines the time when event was fired. // > It is used to detect the event throughput in a particular time range. // > If not set, the current time will be taken. TimeField cfg.FieldSelector `json:"time_field" default:"time" parse:"selector"` // * TimeField_ []string // > @3@4@5@6 // > // > It defines how to parse the time field format. TimeFieldFormat string `` // * /* 209-byte string literal not displayed */ // > @3@4@5@6 // > // > The default events limit that plugin allows per `bucket_interval`. DefaultLimit int64 `json:"default_limit" default:"5000"` // * // > @3@4@5@6 // > // > It defines subject of limiting: number of messages or total size of the messages. LimitKind string `json:"limit_kind" default:"count" options:"count|size"` // * // > @3@4@5@6 // > // > Defines kind of backend. When redis backend is chosen and if by any reason plugin cannot connect to redis, // > limiters will not start syncing with redis until successful reconnect. LimiterBackend string `json:"limiter_backend" default:"memory" options:"memory|redis"` // * // > @3@4@5@6 // > // > It contains redis settings RedisBackendCfg RedisBackendConfig `json:"redis_backend_config" child:"true"` // * // > @3@4@5@6 // > // > How much time buckets to hold in the memory. E.g. if `buckets_count` is `60` and `bucket_interval` is `5m`, // > then `5 hours` will be covered. Events with time later than `now() - 5h` will be dropped even if threshold isn't exceeded. BucketsCount int `json:"buckets_count" default:"60"` // * // > @3@4@5@6 // > // > Time interval to check event throughput. BucketInterval cfg.Duration `json:"bucket_interval" parse:"duration" default:"1m"` // * BucketInterval_ time.Duration // > @3@4@5@6 // > // > Rules to override the `default_limit` for different group of event. It's a list of objects. // > Each object has the `limit` and `conditions` fields. // > * `limit` – the value which will override the `default_limit`, if `conditions` are met. // > * `limit_kind` – the type of a limit: `count` - number of messages, `size` - total size from all messages // > * `conditions` – the map of `event field name => event field value`. The conditions are checked using `AND` operator. Rules []RuleConfig `json:"rules" default:"" slice:"true"` // * // > @3@4@5@6 // > // > Time interval after which unused limiters are removed. LimiterExpiration cfg.Duration `json:"limiter_expiration" parse:"duration" default:"30m"` // * LimiterExpiration_ time.Duration }
! config-params ^ config-params
type Plugin ¶
type Plugin struct {
// contains filtered or unexported fields
}
func (*Plugin) RegisterMetrics ¶ added in v0.9.0
type RedisBackendConfig ¶ added in v0.6.0
type RedisBackendConfig struct { // > @3@4@5@6 // > // Аddress of redis server. Format: HOST:PORT. Endpoint string `json:"endpoint"` // * // > @3@4@5@6 // > // > Password to redis server. Password string `json:"password"` // * // > @3@4@5@6 // > // > Defines sync interval between global and local limiters. SyncInterval cfg.Duration `json:"sync_interval" parse:"duration" default:"5s"` // * SyncInterval_ time.Duration // > @3@4@5@6 // > // > Defines num of parallel workers that will sync limits. WorkerCount int `json:"worker_count" default:"32"` // * // > @3@4@5@6 // > // > Defines redis timeout. Timeout cfg.Duration `json:"timeout" parse:"duration" default:"1s"` // * Timeout_ time.Duration // > @3@4@5@6 // > // > Defines redis maximum number of retries. If set to 0, no retries will happen. MaxRetries int `json:"max_retries" default:"3"` // * // > @3@4@5@6 // > // > Defines redis minimum backoff between each retry. If set to 0, sets default 8ms. If set to -1, disables backoff. MinRetryBackoff cfg.Duration `json:"min_retry_backoff" parse:"duration" default:"8ms"` // * MinRetryBackoff_ time.Duration // > @3@4@5@6 // > // > Defines redis maximum backoff between each retry. If set to 0, sets default 512ms. If set to -1, disables backoff. MaxRetryBackoff cfg.Duration `json:"max_retry_backoff" parse:"duration" default:"512ms"` // * MaxRetryBackoff_ time.Duration // > @3@4@5@6 // > // > Defines the event field from which values are used as limiter keys. Serves as an override of the default limiter keys naming pattern. // > If not set limiter keys are formed using pipeline name, throttle field and throttle field value. LimiterKeyField cfg.FieldSelector `json:"limiter_key_field" default:"" parse:"selector"` // * LimiterKeyField_ []string // > @3@4@5@6 // > // > Defines field with limit inside json object stored in value // > (e.g. if set to "limit", values must be of kind `{"limit":"<int>",...}`). // > If not set limiter values are considered as non-json data. LimiterValueField string `json:"limiter_value_field" default:""` // * }
Click to show internal directories.
Click to hide internal directories.