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.
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 `` // *
/* 185-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.
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"` // *
}
! config-params ^ config-params
type Plugin ¶
type Plugin struct {
plugin.NoMetricsPlugin
// contains filtered or unexported fields
}
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
}
Click to show internal directories.
Click to hide internal directories.