internal/manifests/collector/adapters/config_from.go (126 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 // Package adapters is for data conversion. package adapters import ( "encoding/json" "errors" "gopkg.in/yaml.v2" ) var ( // ErrInvalidYAML represents an error in the format of the configuration file. ErrInvalidYAML = errors.New("couldn't parse the yaml configuration") ErrInvalidJSON = errors.New("couldn't parse cloudwatch agent json configuration") ) // ConfigFromString extracts a configuration map from the given string. // If the given string isn't a valid YAML, ErrInvalidYAML is returned. func ConfigFromString(configStr string) (map[interface{}]interface{}, error) { config := make(map[interface{}]interface{}) if err := yaml.Unmarshal([]byte(configStr), &config); err != nil { return nil, ErrInvalidYAML } return config, nil } func ConfigFromJSONString(configStr string) (map[string]interface{}, error) { config := make(map[string]interface{}) if err := json.Unmarshal([]byte(configStr), &config); err != nil { return nil, ErrInvalidJSON } return config, nil } type CwaConfig struct { Metrics *Metrics `json:"metrics,omitempty"` Logs *Logs `json:"logs,omitempty"` Traces *Traces `json:"traces,omitempty"` } type Metrics struct { MetricsCollected *MetricsCollected `json:"metrics_collected,omitempty"` } type Logs struct { LogMetricsCollected *LogMetricsCollected `json:"metrics_collected,omitempty"` } type Traces struct { TracesCollected *TracesCollected `json:"traces_collected,omitempty"` } type MetricsCollected struct { StatsD *statsD `json:"statsd,omitempty"` CollectD *collectD `json:"collectd,omitempty"` OTLP *otlp `json:"otlp,omitempty"` JMX *jmx `json:"jmx,omitempty"` } type LogMetricsCollected struct { EMF *emf `json:"emf,omitempty"` ApplicationSignals *AppSignals `json:"application_signals,omitempty"` AppSignals *AppSignals `json:"app_signals,omitempty"` Kubernetes *kubernetes `json:"kubernetes,omitempty"` OTLP *otlp `json:"otlp,omitempty"` } type TracesCollected struct { XRay *xray `json:"xray,omitempty"` OTLP *otlp `json:"otlp,omitempty"` ApplicationSignals *AppSignals `json:"application_signals,omitempty"` AppSignals *AppSignals `json:"app_signals,omitempty"` } type statsD struct { ServiceAddress string `json:"service_address,omitempty"` } type collectD struct { ServiceAddress string `json:"service_address,omitempty"` } type AppSignals struct { TLS *TLS `json:"tls,omitempty"` } type emf struct { } type jmx struct{} type kubernetes struct { EnhancedContainerInsights bool `json:"enhanced_container_insights,omitempty"` AcceleratedComputeMetrics bool `json:"accelerated_compute_metrics,omitempty"` JMXContainerInsights bool `json:"jmx_container_insights,omitempty"` } type xray struct { BindAddress string `json:"bind_address,omitempty"` TCPProxy *tcpProxy `json:"tcp_proxy,omitempty"` } type tcpProxy struct { BindAddress string `json:"bind_address,omitempty"` } type otlp struct { GRPCEndpoint string `json:"grpc_endpoint,omitempty"` HTTPEndpoint string `json:"http_endpoint,omitempty"` } type TLS struct { CertFile string `json:"cert_file,omitempty"` KeyFile string `json:"key_file,omitempty"` } func ConfigStructFromJSONString(configStr string) (*CwaConfig, error) { var config *CwaConfig if err := json.Unmarshal([]byte(configStr), &config); err != nil { return nil, err } return config, nil } func (c *CwaConfig) GetApplicationSignalsMetricsConfig() *AppSignals { if c.Logs == nil { return nil } if c.Logs.LogMetricsCollected == nil { return nil } if c.Logs.LogMetricsCollected.ApplicationSignals != nil { return c.Logs.LogMetricsCollected.ApplicationSignals } if c.Logs.LogMetricsCollected.AppSignals != nil { return c.Logs.LogMetricsCollected.AppSignals } return nil } func (c *CwaConfig) GetApplicationSignalsTracesConfig() *AppSignals { if c.Traces == nil { return nil } if c.Traces.TracesCollected == nil { return nil } if c.Traces.TracesCollected.ApplicationSignals != nil { return c.Traces.TracesCollected.ApplicationSignals } if c.Traces.TracesCollected.AppSignals != nil { return c.Traces.TracesCollected.AppSignals } return nil }