plugins/processors/awsapplicationsignals/config/config.go (63 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT package config import ( "context" "errors" "time" "github.com/aws/amazon-cloudwatch-agent/plugins/processors/awsapplicationsignals/rules" ) type Config struct { Resolvers []Resolver `mapstructure:"resolvers"` Rules []rules.Rule `mapstructure:"rules"` Limiter *LimiterConfig `mapstructure:"limiter"` } type LimiterConfig struct { Threshold int `mapstructure:"drop_threshold"` Disabled bool `mapstructure:"disabled"` LogDroppedMetrics bool `mapstructure:"log_dropped_metrics"` RotationInterval time.Duration `mapstructure:"rotation_interval"` GarbageCollectionInterval time.Duration `mapstructure:"garbage_collection_interval"` ParentContext context.Context `mapstructure:"-"` } const ( DefaultThreshold = 500 DefaultRotationInterval = 1 * time.Hour DefaultGCInterval = 10 * time.Minute ) func NewDefaultLimiterConfig() *LimiterConfig { return &LimiterConfig{ Threshold: DefaultThreshold, Disabled: false, LogDroppedMetrics: false, RotationInterval: DefaultRotationInterval, GarbageCollectionInterval: DefaultGCInterval, } } func (lc *LimiterConfig) Validate() { if lc.GarbageCollectionInterval == 0 { lc.GarbageCollectionInterval = DefaultGCInterval } } func (cfg *Config) Validate() error { if len(cfg.Resolvers) == 0 { return errors.New("resolvers must not be empty") } for _, resolver := range cfg.Resolvers { switch resolver.Platform { case PlatformEKS: if resolver.Name == "" { return errors.New("name must not be empty for eks resolver") } case PlatformK8s: if resolver.Name == "" { return errors.New("name must not be empty for k8s resolver") } case PlatformEC2, PlatformECS, PlatformGeneric: default: return errors.New("unknown resolver") } } if cfg.Limiter != nil { cfg.Limiter.Validate() } return nil }