translator/translate/otel/processor/awsentity/translator.go (65 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package awsentity
import (
"strings"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/processor"
"github.com/aws/amazon-cloudwatch-agent/plugins/processors/awsentity"
"github.com/aws/amazon-cloudwatch-agent/translator/context"
"github.com/aws/amazon-cloudwatch-agent/translator/translate/otel/common"
"github.com/aws/amazon-cloudwatch-agent/translator/util/ecsutil"
)
const (
name = "awsentity"
Service = "Service"
Resource = "Resource"
)
type translator struct {
factory processor.Factory
entityType string
name string
scrapeDatapointAttribute bool
}
func NewTranslator() common.ComponentTranslator {
return &translator{
factory: awsentity.NewFactory(),
}
}
func NewTranslatorWithEntityType(entityType string, name string, scrapeDatapointAttribute bool) common.ComponentTranslator {
pipelineName := strings.ToLower(entityType)
if name != "" {
pipelineName = pipelineName + "/" + name
}
return &translator{
factory: awsentity.NewFactory(),
entityType: entityType,
name: pipelineName,
scrapeDatapointAttribute: scrapeDatapointAttribute,
}
}
func (t *translator) ID() component.ID {
return component.NewIDWithName(t.factory.Type(), t.name)
}
func (t *translator) Translate(conf *confmap.Conf) (component.Config, error) {
ctx := context.CurrentContext()
// Do not send entity for ECS
if ctx.RunInContainer() && ecsutil.GetECSUtilSingleton().IsECS() {
return nil, nil
}
cfg := t.factory.CreateDefaultConfig().(*awsentity.Config)
if t.entityType != "" {
cfg.EntityType = t.entityType
}
if t.scrapeDatapointAttribute {
cfg.ScrapeDatapointAttribute = true
}
cfg.KubernetesMode = ctx.KubernetesMode()
if cfg.KubernetesMode != "" {
clusterName, clusterNameConfigured := common.GetHostedIn(conf)
if !clusterNameConfigured {
clusterName = common.GetClusterName(conf)
}
cfg.ClusterName = clusterName
}
// We want to keep platform config variable to be
// anything that is non-Kubernetes related so the
// processor can perform different logics for EKS
// in EC2 or Non-EC2
cfg.Platform = ctx.Mode()
return cfg, nil
}