Files
opentf/internal/tracing/traceattrs/opentofu.go
Martin Atkins 93d095c67e traceattrs: Functions for the commonly-used OCI-related attributes
We have a number of trace attributes that we use across all of our OCI
Distribution-based functionality, so this centralizes their definitions
in package traceattrs.

This intentionally ignores a few additional attribute names that are used
only in the code that interacts with Docker-style credential helpers,
because all of those are used only in a single function and so adding
indirection for those doesn't have enough benefit to offset the cost of
additional indirection.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-11-03 11:41:50 -08:00

154 lines
6.5 KiB
Go

// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package traceattrs
import (
"go.opentelemetry.io/otel/attribute"
)
// This file contains some functions representing OpenTofu-specific semantic
// conventions, which we use alongside the general OpenTelemetry-specified
// semantic conventions.
//
// These functions tend to take strings that are expected to be the canonical
// string representation of some more specific type from elsewhere in OpenTofu,
// but we make the caller produce the string representation rather than doing it
// inline because this package needs to avoid importing any other packages
// from this codebase so that the rest of OpenTofu can use this package without
// creating import cycles.
//
// We only create functions in here for attribute names that we want to use
// consistently across many different callers. For one-off attribute names that
// are only used in a single kind of span, use the generic functions like
// [String], [StringSlice], etc, instead.
// OpenTofuProviderAddress returns an attribute definition for indicating
// which provider is relevant to a particular trace span.
//
// The given address should be the result of calling [addrs.Provider.String].
func OpenTofuProviderAddress(addr string) attribute.KeyValue {
return attribute.String("opentofu.provider.address", addr)
}
// OpenTofuProviderVersion returns an attribute definition for indicating
// which version of a provider is relevant to a particular trace span.
//
// The given address should be the result of calling
// [getproviders.Version.String]. This should typically be used alongside
// [OpenTofuProviderAddress] to indicate which provider the version number is
// for.
func OpenTofuProviderVersion(v string) attribute.KeyValue {
return attribute.String("opentofu.provider.version", v)
}
// OpenTofuTargetPlatform returns an attribute definition for indicating
// which target platform is relevant to a particular trace span.
//
// The given address should be the result of calling
// [getproviders.Platform.String].
func OpenTofuTargetPlatform(platform string) attribute.KeyValue {
return attribute.String("opentofu.target_platform", platform)
}
// OpenTofuModuleCallName returns an attribute definition for indicating
// the name of a module call that's relevant to a particular trace span.
//
// The given address should be something that would be valid in the
// [addrs.ModuleCall.Name] field.
func OpenTofuModuleCallName(name string) attribute.KeyValue {
return attribute.String("opentofu.module.name", name)
}
// OpenTofuModuleSource returns an attribute definition for indicating
// which module source address is relevant to a particular trace span.
//
// The given address should be the result of calling
// [addrs.ModuleSource.String], or any other syntax-compatible representation.
func OpenTofuModuleSource(addr string) attribute.KeyValue {
return attribute.String("opentofu.module.source", addr)
}
// OpenTofuModuleVersion returns an attribute definition for indicating
// which version of a module is relevant to a particular trace span.
//
// The given address should be either the result of calling
// [getproviders.Version.String], or the String method from the "Version" type
// from HashiCorp's "go-version" library.
func OpenTofuModuleVersion(v string) attribute.KeyValue {
return attribute.String("opentofu.module.version", v)
}
// OpenTofuOCIReferenceTag returns an attribute definition for indicating
// which OCI repository tag is relevant to a particular trace span.
func OpenTofuOCIReferenceTag(name string) attribute.KeyValue {
return attribute.String("opentofu.oci.reference.tag", name)
}
// OpenTofuOCIReferenceDigest returns an attribute definition for indicating
// which OCI digest reference is relevant to a particular trace span.
func OpenTofuOCIReferenceDigest(digest string) attribute.KeyValue {
return attribute.String("opentofu.oci.reference.digest", digest)
}
// OpenTofuOCIManifestMediaType returns an attribute definition for indicating
// which OCI manifest media type is relevant to a particular trace span.
func OpenTofuOCIManifestMediaType(typ string) attribute.KeyValue {
return attribute.String("opentofu.oci.manifest.media_type", typ)
}
// OpenTofuOCIManifestArtifactType returns an attribute definition for indicating
// which OCI manifest artifact type is relevant to a particular trace span.
func OpenTofuOCIManifestArtifactType(typ string) attribute.KeyValue {
return attribute.String("opentofu.oci.manifest.artifact_type", typ)
}
// OpenTofuOCIManifestSize returns an attribute definition for indicating
// the size in bytes of an OCI manifest that is relevant to a particular
// trace span.
func OpenTofuOCIManifestSize(size int64) attribute.KeyValue {
return attribute.Int64("opentofu.oci.manifest.size", size)
}
// OpenTofuOCIBlobDigest returns an attribute definition for indicating
// which OCI blob digest is relevant to a particular trace span.
func OpenTofuOCIBlobDigest(digest string) attribute.KeyValue {
return attribute.String("opentofu.oci.blob.digest", digest)
}
// OpenTofuOCIBlobMediaType returns an attribute definition for indicating
// which OCI blob media type is relevant to a particular trace span.
func OpenTofuOCIBlobMediaType(typ string) attribute.KeyValue {
return attribute.String("opentofu.oci.blob.media_type", typ)
}
// OpenTofuOCIBlobArtifactType returns an attribute definition for indicating
// which OCI blob artifact type is relevant to a particular trace span.
func OpenTofuOCIBlobArtifactType(typ string) attribute.KeyValue {
return attribute.String("opentofu.oci.blob.artifact_type", typ)
}
// OpenTofuOCIBlobSize returns an attribute definition for indicating
// the size in bytes of an OCI blob that is relevant to a particular
// trace span.
func OpenTofuOCIBlobSize(size int64) attribute.KeyValue {
return attribute.Int64("opentofu.oci.blob.size", size)
}
// OpenTofuOCIRegistryDomain returns an attribute definition for indicating
// which OCI registry domain name is relevant to a particular trace span.
func OpenTofuOCIRegistryDomain(domain string) attribute.KeyValue {
return attribute.String("opentofu.oci.registry.domain", domain)
}
// OpenTofuOCIRepositoryName returns an attribute definition for indicating
// which OCI repository is relevant to a particular trace span.
//
// The value of this should not include the registry domain name. Use a
// separate attribute built from [OpenTofuOCIRegistryDomain] for that.
func OpenTofuOCIRepositoryName(name string) attribute.KeyValue {
return attribute.String("opentofu.oci.repository.name", name)
}