internal/pkg/config/cache.go (67 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package config
import (
"time"
"github.com/rs/zerolog"
)
const (
defaultActionTTL = time.Minute * 5
defaultEnrollKeyTTL = time.Minute
defaultArtifactTTL = time.Hour * 24
defaultAPIKeyTTL = time.Minute * 15 // APIKey validation is a bottleneck.
defaultAPIKeyJitter = time.Minute * 5 // Jitter allows some randomness on APIKeyTTL, zero to disable
)
type Cache struct {
NumCounters int64 `config:"num_counters"`
MaxCost int64 `config:"max_cost"`
ActionTTL time.Duration `config:"ttl_action"`
EnrollKeyTTL time.Duration `config:"ttl_enroll_key"`
ArtifactTTL time.Duration `config:"ttl_artifact"`
APIKeyTTL time.Duration `config:"ttl_api_key"`
APIKeyJitter time.Duration `config:"jitter_api_key"`
}
func (c *Cache) InitDefaults() {}
// LoadLimits loads envLimits for any attribute that is not defined in Cache
func (c *Cache) LoadLimits(limits *envLimits) {
l := limits.Cache
if c.NumCounters == 0 {
c.NumCounters = l.NumCounters
}
if c.MaxCost == 0 {
c.MaxCost = l.MaxCost
}
if c.ActionTTL == 0 {
c.ActionTTL = defaultActionTTL
}
if c.EnrollKeyTTL == 0 {
c.EnrollKeyTTL = defaultEnrollKeyTTL
}
if c.ArtifactTTL == 0 {
c.ArtifactTTL = defaultArtifactTTL
}
if c.APIKeyTTL == 0 {
c.APIKeyTTL = defaultAPIKeyTTL
}
if c.APIKeyJitter == 0 {
c.APIKeyJitter = defaultAPIKeyJitter
}
}
// CopyCache returns a copy of the config's Cache settings
func CopyCache(cfg *Config) Cache {
ccfg := cfg.Inputs[0].Cache
return Cache{
NumCounters: ccfg.NumCounters,
MaxCost: ccfg.MaxCost,
ActionTTL: ccfg.ActionTTL,
EnrollKeyTTL: ccfg.EnrollKeyTTL,
ArtifactTTL: ccfg.ArtifactTTL,
APIKeyTTL: ccfg.APIKeyTTL,
APIKeyJitter: ccfg.APIKeyJitter,
}
}
// MarshalZerologObject turns the cache settings into a zerolog event
func (c *Cache) MarshalZerologObject(e *zerolog.Event) {
e.Int64("numCounters", c.NumCounters)
e.Int64("maxCost", c.MaxCost)
e.Dur("actionTTL", c.ActionTTL)
e.Dur("enrollTTL", c.EnrollKeyTTL)
e.Dur("artifactTTL", c.ArtifactTTL)
e.Dur("apiKeyTTL", c.APIKeyTTL)
e.Dur("apiKeyJitter", c.APIKeyJitter)
}