internal/config/options.go (129 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package config
import (
"regexp"
"strings"
"github.com/go-logr/logr"
"github.com/aws/amazon-cloudwatch-agent-operator/internal/version"
)
// Option represents one specific configuration option.
type Option func(c *options)
type options struct {
version version.Version
logger logr.Logger
autoInstrumentationDotNetImage string
autoInstrumentationGoImage string
autoInstrumentationJavaImage string
autoInstrumentationNodeJSImage string
autoInstrumentationPythonImage string
autoInstrumentationApacheHttpdImage string
autoInstrumentationNginxImage string
collectorImage string
collectorConfigMapEntry string
otelCollectorConfigMapEntry string
dcgmExporterImage string
neuronMonitorImage string
targetAllocatorImage string
targetAllocatorConfigMapEntry string
prometheusConfigMapEntry string
labelsFilter []string
}
func WithCollectorImage(s string) Option {
return func(o *options) {
o.collectorImage = s
}
}
func WithCollectorConfigMapEntry(s string) Option {
return func(o *options) {
o.collectorConfigMapEntry = s
}
}
func WithOtelCollectorConfigMapEntry(s string) Option {
return func(o *options) {
o.otelCollectorConfigMapEntry = s
}
}
func WithTargetAllocatorConfigMapEntry(s string) Option {
return func(o *options) {
o.targetAllocatorConfigMapEntry = s
}
}
func WithPrometheusConfigMapEntry(s string) Option {
return func(o *options) {
o.prometheusConfigMapEntry = s
}
}
func WithLogger(logger logr.Logger) Option {
return func(o *options) {
o.logger = logger
}
}
func WithVersion(v version.Version) Option {
return func(o *options) {
o.version = v
}
}
func WithAutoInstrumentationJavaImage(s string) Option {
return func(o *options) {
o.autoInstrumentationJavaImage = s
}
}
func WithAutoInstrumentationNodeJSImage(s string) Option {
return func(o *options) {
o.autoInstrumentationNodeJSImage = s
}
}
func WithAutoInstrumentationPythonImage(s string) Option {
return func(o *options) {
o.autoInstrumentationPythonImage = s
}
}
func WithAutoInstrumentationDotNetImage(s string) Option {
return func(o *options) {
o.autoInstrumentationDotNetImage = s
}
}
func WithAutoInstrumentationGoImage(s string) Option {
return func(o *options) {
o.autoInstrumentationGoImage = s
}
}
func WithAutoInstrumentationApacheHttpdImage(s string) Option {
return func(o *options) {
o.autoInstrumentationApacheHttpdImage = s
}
}
func WithAutoInstrumentationNginxImage(s string) Option {
return func(o *options) {
o.autoInstrumentationNginxImage = s
}
}
func WithDcgmExporterImage(s string) Option {
return func(o *options) {
o.dcgmExporterImage = s
}
}
func WithNeuronMonitorImage(s string) Option {
return func(o *options) {
o.neuronMonitorImage = s
}
}
func WithTargetAllocatorImage(s string) Option {
return func(o *options) {
o.targetAllocatorImage = s
}
}
func WithLabelFilters(labelFilters []string) Option {
return func(o *options) {
filters := []string{}
for _, pattern := range labelFilters {
var result strings.Builder
for i, literal := range strings.Split(pattern, "*") {
// Replace * with .*
if i > 0 {
result.WriteString(".*")
}
// Quote any regular expression meta characters in the
// literal text.
result.WriteString(regexp.QuoteMeta(literal))
}
filters = append(filters, result.String())
}
o.labelsFilter = filters
}
}