mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-21 10:47:34 -05:00
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>
154 lines
6.5 KiB
Go
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)
|
|
}
|