connector/signaltometricsconnector/internal/model/collectorinstanceinfo.go (57 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package model // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/signaltometricsconnector/internal/model"
import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/pdata/pcommon"
semconv "go.opentelemetry.io/collector/semconv/v1.26.0"
"github.com/open-telemetry/opentelemetry-collector-contrib/connector/signaltometricsconnector/internal/metadata"
)
var prefix = metadata.Type.String()
// CollectorInstanceInfo holds the attributes that could uniquely identify
// the current collector instance. These attributes are initialized from the
// telemetry settings. The CollectorInstanceInfo can copy these attributes,
// with a given prefix, to a provided map.
type CollectorInstanceInfo struct {
size int
serviceInstanceID string
serviceName string
serviceNamespace string
}
func NewCollectorInstanceInfo(
set component.TelemetrySettings,
) CollectorInstanceInfo {
var info CollectorInstanceInfo
for k, v := range set.Resource.Attributes().All() {
switch k {
case semconv.AttributeServiceInstanceID:
if str := v.Str(); str != "" {
info.serviceInstanceID = str
info.size++
}
case semconv.AttributeServiceName:
if str := v.Str(); str != "" {
info.serviceName = str
info.size++
}
case semconv.AttributeServiceNamespace:
if str := v.Str(); str != "" {
info.serviceNamespace = str
info.size++
}
}
}
return info
}
// Size returns the max number of attributes that defines a collector's
// instance information. Can be used to presize the attributes.
func (info CollectorInstanceInfo) Size() int {
return info.size
}
func (info CollectorInstanceInfo) Copy(to pcommon.Map) {
to.EnsureCapacity(info.Size())
if info.serviceInstanceID != "" {
to.PutStr(keyWithPrefix(semconv.AttributeServiceInstanceID), info.serviceInstanceID)
}
if info.serviceName != "" {
to.PutStr(keyWithPrefix(semconv.AttributeServiceName), info.serviceName)
}
if info.serviceNamespace != "" {
to.PutStr(keyWithPrefix(semconv.AttributeServiceNamespace), info.serviceNamespace)
}
}
func keyWithPrefix(key string) string {
return prefix + "." + key
}