1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-03 18:35:08 +02:00
Files
opentelemetry-go/semconv/v1.41.0/goconv/metric.go
T
Tyler Yahn 442cdbdd94 Generate and upgrade to semconv/v1.41.0 (#8324)
Fix https://github.com/open-telemetry/opentelemetry-go/issues/8299

Relevant upstream v1.41.0 release notes:

> ### 🛑 Breaking changes 🛑
> 
> - `graphql`: Change `graphql.document` attribute requirement level
from Recommended to Opt-In due to sensitive data, cardinality, and size
concerns
([#2985](https://github.com/open-telemetry/semantic-conventions/issues/2985))
> - `process`: Move process.executable to its own entity.
([#3535](https://github.com/open-telemetry/semantic-conventions/issues/3535))
> - `process`: Update requirement levels for process attributes to
ensure consistent identification and description across platforms.
([#864](https://github.com/open-telemetry/semantic-conventions/issues/864))
> - `rpc`: Remove `client.address` and `client.port` attributes from RPC
server spans.
([#3487](https://github.com/open-telemetry/semantic-conventions/issues/3487),
[#3488](https://github.com/open-telemetry/semantic-conventions/issues/3488))
> 
> ### 💡 Enhancements 💡
> 
> - `Go`: Add opt-in go.memory.gc.pause.duration histogram metric.
([#3353](https://github.com/open-telemetry/semantic-conventions/issues/3353))
> - `deployment`: Stabilize `deployment.environment.name` attribute.
([#3339](https://github.com/open-telemetry/semantic-conventions/issues/3339))
> - `deployment`: Add enum values for `deployment.environment.name`
attribute.
([#2910](https://github.com/open-telemetry/semantic-conventions/issues/2910))
> - `go`: Add the go.cpu.time opt-in metric, and add
go.cpu.detailed_state and go.memory.detailed_type attributes to CPU and
memory metrics respectively with wildcard values.
([#3354](https://github.com/open-telemetry/semantic-conventions/issues/3354))
> - `go`: Add the opt-in go.memory.gc.cycles metric.
([#3353](https://github.com/open-telemetry/semantic-conventions/issues/3353))
> - `telemetry`: Promote `telemetry.distro.name` and
`telemetry.distro.version` attributes to 'stable'.
([#3650](https://github.com/open-telemetry/semantic-conventions/issues/3650))

This PR also:
- fixes semconv migration generation to ignore unexported declarations
when computing renames/removals
- upgrades repo imports, depguard, docs, templates, and schema URL
expectations to `go.opentelemetry.io/otel/semconv/v1.41.0`
- adds missing generated-file headers to semconvkit templates and
regenerates the affected `v1.41.0` files via `TAG="v1.41.0" make
semconv-generate`

---------

Co-authored-by: David Ashpole <dashpole@google.com>
2026-05-14 14:06:05 -04:00

975 lines
27 KiB
Go

// Code generated from semantic convention specification. DO NOT EDIT.
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
// Package goconv provides types and functionality for OpenTelemetry semantic
// conventions in the "go" namespace.
package goconv
import (
"context"
"sync"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/metric/noop"
)
var (
addOptPool = &sync.Pool{New: func() any { return &[]metric.AddOption{} }}
recOptPool = &sync.Pool{New: func() any { return &[]metric.RecordOption{} }}
)
// CPUStateAttr is an attribute conforming to the go.cpu.state semantic
// conventions. It represents the state of the CPU.
type CPUStateAttr string
var (
// CPUStateUser is the CPU time spent running user Go code.
CPUStateUser CPUStateAttr = "user"
// CPUStateGC is the CPU time spent performing garbage collection tasks.
CPUStateGC CPUStateAttr = "gc"
// CPUStateScavenge is the CPU time spent returning unused memory to the
// underlying platform.
CPUStateScavenge CPUStateAttr = "scavenge"
// CPUStateIdle is the available CPU time not spent executing any Go or Go
// runtime code.
CPUStateIdle CPUStateAttr = "idle"
)
// MemoryTypeAttr is an attribute conforming to the go.memory.type semantic
// conventions. It represents the type of memory.
type MemoryTypeAttr string
var (
// MemoryTypeStack is the memory allocated from the heap that is reserved for
// stack space, whether or not it is currently in-use.
MemoryTypeStack MemoryTypeAttr = "stack"
// MemoryTypeOther is the memory used by the Go runtime, excluding other
// categories of memory usage described in this enumeration.
MemoryTypeOther MemoryTypeAttr = "other"
)
// ConfigGogc is an instrument used to record metric values conforming to the
// "go.config.gogc" semantic conventions. It represents the heap size target
// percentage configured by the user, otherwise 100.
type ConfigGogc struct {
metric.Int64ObservableUpDownCounter
}
var newConfigGogcOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("Heap size target percentage configured by the user, otherwise 100."),
metric.WithUnit("%"),
}
// NewConfigGogc returns a new ConfigGogc instrument.
func NewConfigGogc(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (ConfigGogc, error) {
// Check if the meter is nil.
if m == nil {
return ConfigGogc{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newConfigGogcOpts
} else {
opt = append(opt, newConfigGogcOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.config.gogc",
opt...,
)
if err != nil {
return ConfigGogc{noop.Int64ObservableUpDownCounter{}}, err
}
return ConfigGogc{i}, nil
}
// Inst returns the underlying metric instrument.
func (m ConfigGogc) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (ConfigGogc) Name() string {
return "go.config.gogc"
}
// Unit returns the semantic convention unit of the instrument
func (ConfigGogc) Unit() string {
return "%"
}
// Description returns the semantic convention description of the instrument
func (ConfigGogc) Description() string {
return "Heap size target percentage configured by the user, otherwise 100."
}
// CPUTime is an instrument used to record metric values conforming to the
// "go.cpu.time" semantic conventions. It represents the estimated CPU time spent
// by the Go runtime.
type CPUTime struct {
metric.Float64Counter
}
var newCPUTimeOpts = []metric.Float64CounterOption{
metric.WithDescription("Estimated CPU time spent by the Go runtime."),
metric.WithUnit("s"),
}
// NewCPUTime returns a new CPUTime instrument.
func NewCPUTime(
m metric.Meter,
opt ...metric.Float64CounterOption,
) (CPUTime, error) {
// Check if the meter is nil.
if m == nil {
return CPUTime{noop.Float64Counter{}}, nil
}
if len(opt) == 0 {
opt = newCPUTimeOpts
} else {
opt = append(opt, newCPUTimeOpts...)
}
i, err := m.Float64Counter(
"go.cpu.time",
opt...,
)
if err != nil {
return CPUTime{noop.Float64Counter{}}, err
}
return CPUTime{i}, nil
}
// Inst returns the underlying metric instrument.
func (m CPUTime) Inst() metric.Float64Counter {
return m.Float64Counter
}
// Name returns the semantic convention name of the instrument.
func (CPUTime) Name() string {
return "go.cpu.time"
}
// Unit returns the semantic convention unit of the instrument
func (CPUTime) Unit() string {
return "s"
}
// Description returns the semantic convention description of the instrument
func (CPUTime) Description() string {
return "Estimated CPU time spent by the Go runtime."
}
// Add adds incr to the existing count for attrs.
//
// The cpuState is the the state of the CPU.
//
// All additional attrs passed are included in the recorded value.
//
// Computed from `/cpu/classes/...` metrics. This metric is an overestimate, and
// not directly comparable to system CPU time measurements. Compare only with
// other `go.cpu.time` metrics.
func (m CPUTime) Add(
ctx context.Context,
incr float64,
cpuState CPUStateAttr,
attrs ...attribute.KeyValue,
) {
if !m.Float64Counter.Enabled(ctx) {
return
}
if len(attrs) == 0 {
m.Float64Counter.Add(ctx, incr, metric.WithAttributes(
attribute.String("go.cpu.state", string(cpuState)),
))
return
}
o := addOptPool.Get().(*[]metric.AddOption)
defer func() {
*o = (*o)[:0]
addOptPool.Put(o)
}()
*o = append(
*o,
metric.WithAttributes(
append(
attrs[:len(attrs):len(attrs)],
attribute.String("go.cpu.state", string(cpuState)),
)...,
),
)
m.Float64Counter.Add(ctx, incr, *o...)
}
// AddSet adds incr to the existing count for set.
//
// Computed from `/cpu/classes/...` metrics. This metric is an overestimate, and
// not directly comparable to system CPU time measurements. Compare only with
// other `go.cpu.time` metrics.
func (m CPUTime) AddSet(ctx context.Context, incr float64, set attribute.Set) {
if !m.Float64Counter.Enabled(ctx) {
return
}
if set.Len() == 0 {
m.Float64Counter.Add(ctx, incr)
return
}
o := addOptPool.Get().(*[]metric.AddOption)
defer func() {
*o = (*o)[:0]
addOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributeSet(set))
m.Float64Counter.Add(ctx, incr, *o...)
}
// AttrCPUDetailedState returns an optional attribute for the
// "go.cpu.detailed_state" semantic convention. It represents the detailed state
// of the CPU.
func (CPUTime) AttrCPUDetailedState(val string) attribute.KeyValue {
return attribute.String("go.cpu.detailed_state", val)
}
// GoroutineCount is an instrument used to record metric values conforming to the
// "go.goroutine.count" semantic conventions. It represents the count of live
// goroutines.
type GoroutineCount struct {
metric.Int64ObservableUpDownCounter
}
var newGoroutineCountOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("Count of live goroutines."),
metric.WithUnit("{goroutine}"),
}
// NewGoroutineCount returns a new GoroutineCount instrument.
func NewGoroutineCount(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (GoroutineCount, error) {
// Check if the meter is nil.
if m == nil {
return GoroutineCount{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newGoroutineCountOpts
} else {
opt = append(opt, newGoroutineCountOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.goroutine.count",
opt...,
)
if err != nil {
return GoroutineCount{noop.Int64ObservableUpDownCounter{}}, err
}
return GoroutineCount{i}, nil
}
// Inst returns the underlying metric instrument.
func (m GoroutineCount) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (GoroutineCount) Name() string {
return "go.goroutine.count"
}
// Unit returns the semantic convention unit of the instrument
func (GoroutineCount) Unit() string {
return "{goroutine}"
}
// Description returns the semantic convention description of the instrument
func (GoroutineCount) Description() string {
return "Count of live goroutines."
}
// MemoryAllocated is an instrument used to record metric values conforming to
// the "go.memory.allocated" semantic conventions. It represents the memory
// allocated to the heap by the application.
type MemoryAllocated struct {
metric.Int64ObservableCounter
}
var newMemoryAllocatedOpts = []metric.Int64ObservableCounterOption{
metric.WithDescription("Memory allocated to the heap by the application."),
metric.WithUnit("By"),
}
// NewMemoryAllocated returns a new MemoryAllocated instrument.
func NewMemoryAllocated(
m metric.Meter,
opt ...metric.Int64ObservableCounterOption,
) (MemoryAllocated, error) {
// Check if the meter is nil.
if m == nil {
return MemoryAllocated{noop.Int64ObservableCounter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryAllocatedOpts
} else {
opt = append(opt, newMemoryAllocatedOpts...)
}
i, err := m.Int64ObservableCounter(
"go.memory.allocated",
opt...,
)
if err != nil {
return MemoryAllocated{noop.Int64ObservableCounter{}}, err
}
return MemoryAllocated{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryAllocated) Inst() metric.Int64ObservableCounter {
return m.Int64ObservableCounter
}
// Name returns the semantic convention name of the instrument.
func (MemoryAllocated) Name() string {
return "go.memory.allocated"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryAllocated) Unit() string {
return "By"
}
// Description returns the semantic convention description of the instrument
func (MemoryAllocated) Description() string {
return "Memory allocated to the heap by the application."
}
// MemoryAllocations is an instrument used to record metric values conforming to
// the "go.memory.allocations" semantic conventions. It represents the count of
// allocations to the heap by the application.
type MemoryAllocations struct {
metric.Int64ObservableCounter
}
var newMemoryAllocationsOpts = []metric.Int64ObservableCounterOption{
metric.WithDescription("Count of allocations to the heap by the application."),
metric.WithUnit("{allocation}"),
}
// NewMemoryAllocations returns a new MemoryAllocations instrument.
func NewMemoryAllocations(
m metric.Meter,
opt ...metric.Int64ObservableCounterOption,
) (MemoryAllocations, error) {
// Check if the meter is nil.
if m == nil {
return MemoryAllocations{noop.Int64ObservableCounter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryAllocationsOpts
} else {
opt = append(opt, newMemoryAllocationsOpts...)
}
i, err := m.Int64ObservableCounter(
"go.memory.allocations",
opt...,
)
if err != nil {
return MemoryAllocations{noop.Int64ObservableCounter{}}, err
}
return MemoryAllocations{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryAllocations) Inst() metric.Int64ObservableCounter {
return m.Int64ObservableCounter
}
// Name returns the semantic convention name of the instrument.
func (MemoryAllocations) Name() string {
return "go.memory.allocations"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryAllocations) Unit() string {
return "{allocation}"
}
// Description returns the semantic convention description of the instrument
func (MemoryAllocations) Description() string {
return "Count of allocations to the heap by the application."
}
// MemoryGCCycles is an instrument used to record metric values conforming to the
// "go.memory.gc.cycles" semantic conventions. It represents the number of
// completed GC cycles.
type MemoryGCCycles struct {
metric.Int64Counter
}
var newMemoryGCCyclesOpts = []metric.Int64CounterOption{
metric.WithDescription("Number of completed GC cycles."),
metric.WithUnit("{gc_cycle}"),
}
// NewMemoryGCCycles returns a new MemoryGCCycles instrument.
func NewMemoryGCCycles(
m metric.Meter,
opt ...metric.Int64CounterOption,
) (MemoryGCCycles, error) {
// Check if the meter is nil.
if m == nil {
return MemoryGCCycles{noop.Int64Counter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryGCCyclesOpts
} else {
opt = append(opt, newMemoryGCCyclesOpts...)
}
i, err := m.Int64Counter(
"go.memory.gc.cycles",
opt...,
)
if err != nil {
return MemoryGCCycles{noop.Int64Counter{}}, err
}
return MemoryGCCycles{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryGCCycles) Inst() metric.Int64Counter {
return m.Int64Counter
}
// Name returns the semantic convention name of the instrument.
func (MemoryGCCycles) Name() string {
return "go.memory.gc.cycles"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryGCCycles) Unit() string {
return "{gc_cycle}"
}
// Description returns the semantic convention description of the instrument
func (MemoryGCCycles) Description() string {
return "Number of completed GC cycles."
}
// Add adds incr to the existing count for attrs.
//
// Computed from `/gc/cycles/total:gc-cycles`.
func (m MemoryGCCycles) Add(ctx context.Context, incr int64, attrs ...attribute.KeyValue) {
if !m.Int64Counter.Enabled(ctx) {
return
}
if len(attrs) == 0 {
m.Int64Counter.Add(ctx, incr)
return
}
o := addOptPool.Get().(*[]metric.AddOption)
defer func() {
*o = (*o)[:0]
addOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributes(attrs...))
m.Int64Counter.Add(ctx, incr, *o...)
}
// AddSet adds incr to the existing count for set.
//
// Computed from `/gc/cycles/total:gc-cycles`.
func (m MemoryGCCycles) AddSet(ctx context.Context, incr int64, set attribute.Set) {
if !m.Int64Counter.Enabled(ctx) {
return
}
if set.Len() == 0 {
m.Int64Counter.Add(ctx, incr)
return
}
o := addOptPool.Get().(*[]metric.AddOption)
defer func() {
*o = (*o)[:0]
addOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributeSet(set))
m.Int64Counter.Add(ctx, incr, *o...)
}
// MemoryGCGoal is an instrument used to record metric values conforming to the
// "go.memory.gc.goal" semantic conventions. It represents the heap size target
// for the end of the GC cycle.
type MemoryGCGoal struct {
metric.Int64ObservableUpDownCounter
}
var newMemoryGCGoalOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("Heap size target for the end of the GC cycle."),
metric.WithUnit("By"),
}
// NewMemoryGCGoal returns a new MemoryGCGoal instrument.
func NewMemoryGCGoal(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (MemoryGCGoal, error) {
// Check if the meter is nil.
if m == nil {
return MemoryGCGoal{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryGCGoalOpts
} else {
opt = append(opt, newMemoryGCGoalOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.memory.gc.goal",
opt...,
)
if err != nil {
return MemoryGCGoal{noop.Int64ObservableUpDownCounter{}}, err
}
return MemoryGCGoal{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryGCGoal) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (MemoryGCGoal) Name() string {
return "go.memory.gc.goal"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryGCGoal) Unit() string {
return "By"
}
// Description returns the semantic convention description of the instrument
func (MemoryGCGoal) Description() string {
return "Heap size target for the end of the GC cycle."
}
// MemoryGCPauseDuration is an instrument used to record metric values conforming
// to the "go.memory.gc.pause.duration" semantic conventions. It represents the
// distribution of individual GC-related stop-the-world pause latencies. This is
// the time from deciding to stop the world until the world is started again.
type MemoryGCPauseDuration struct {
metric.Float64Histogram
}
var newMemoryGCPauseDurationOpts = []metric.Float64HistogramOption{
metric.WithDescription("Distribution of individual GC-related stop-the-world pause latencies. This is the time from deciding to stop the world until the world is started again."),
metric.WithUnit("s"),
}
// NewMemoryGCPauseDuration returns a new MemoryGCPauseDuration instrument.
func NewMemoryGCPauseDuration(
m metric.Meter,
opt ...metric.Float64HistogramOption,
) (MemoryGCPauseDuration, error) {
// Check if the meter is nil.
if m == nil {
return MemoryGCPauseDuration{noop.Float64Histogram{}}, nil
}
if len(opt) == 0 {
opt = newMemoryGCPauseDurationOpts
} else {
opt = append(opt, newMemoryGCPauseDurationOpts...)
}
i, err := m.Float64Histogram(
"go.memory.gc.pause.duration",
opt...,
)
if err != nil {
return MemoryGCPauseDuration{noop.Float64Histogram{}}, err
}
return MemoryGCPauseDuration{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryGCPauseDuration) Inst() metric.Float64Histogram {
return m.Float64Histogram
}
// Name returns the semantic convention name of the instrument.
func (MemoryGCPauseDuration) Name() string {
return "go.memory.gc.pause.duration"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryGCPauseDuration) Unit() string {
return "s"
}
// Description returns the semantic convention description of the instrument
func (MemoryGCPauseDuration) Description() string {
return "Distribution of individual GC-related stop-the-world pause latencies. This is the time from deciding to stop the world until the world is started again."
}
// Record records val to the current distribution for attrs.
//
// Computed from `/sched/pauses/total/gc:seconds`. Bucket boundaries are provided
// by the runtime, and are subject to change.
func (m MemoryGCPauseDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) {
if !m.Float64Histogram.Enabled(ctx) {
return
}
if len(attrs) == 0 {
m.Float64Histogram.Record(ctx, val)
return
}
o := recOptPool.Get().(*[]metric.RecordOption)
defer func() {
*o = (*o)[:0]
recOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributes(attrs...))
m.Float64Histogram.Record(ctx, val, *o...)
}
// RecordSet records val to the current distribution for set.
//
// Computed from `/sched/pauses/total/gc:seconds`. Bucket boundaries are provided
// by the runtime, and are subject to change.
func (m MemoryGCPauseDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
if !m.Float64Histogram.Enabled(ctx) {
return
}
if set.Len() == 0 {
m.Float64Histogram.Record(ctx, val)
return
}
o := recOptPool.Get().(*[]metric.RecordOption)
defer func() {
*o = (*o)[:0]
recOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributeSet(set))
m.Float64Histogram.Record(ctx, val, *o...)
}
// MemoryLimit is an instrument used to record metric values conforming to the
// "go.memory.limit" semantic conventions. It represents the go runtime memory
// limit configured by the user, if a limit exists.
type MemoryLimit struct {
metric.Int64ObservableUpDownCounter
}
var newMemoryLimitOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("Go runtime memory limit configured by the user, if a limit exists."),
metric.WithUnit("By"),
}
// NewMemoryLimit returns a new MemoryLimit instrument.
func NewMemoryLimit(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (MemoryLimit, error) {
// Check if the meter is nil.
if m == nil {
return MemoryLimit{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryLimitOpts
} else {
opt = append(opt, newMemoryLimitOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.memory.limit",
opt...,
)
if err != nil {
return MemoryLimit{noop.Int64ObservableUpDownCounter{}}, err
}
return MemoryLimit{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryLimit) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (MemoryLimit) Name() string {
return "go.memory.limit"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryLimit) Unit() string {
return "By"
}
// Description returns the semantic convention description of the instrument
func (MemoryLimit) Description() string {
return "Go runtime memory limit configured by the user, if a limit exists."
}
// MemoryUsed is an instrument used to record metric values conforming to the
// "go.memory.used" semantic conventions. It represents the memory used by the Go
// runtime.
type MemoryUsed struct {
metric.Int64ObservableUpDownCounter
}
var newMemoryUsedOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("Memory used by the Go runtime."),
metric.WithUnit("By"),
}
// NewMemoryUsed returns a new MemoryUsed instrument.
func NewMemoryUsed(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (MemoryUsed, error) {
// Check if the meter is nil.
if m == nil {
return MemoryUsed{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newMemoryUsedOpts
} else {
opt = append(opt, newMemoryUsedOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.memory.used",
opt...,
)
if err != nil {
return MemoryUsed{noop.Int64ObservableUpDownCounter{}}, err
}
return MemoryUsed{i}, nil
}
// Inst returns the underlying metric instrument.
func (m MemoryUsed) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (MemoryUsed) Name() string {
return "go.memory.used"
}
// Unit returns the semantic convention unit of the instrument
func (MemoryUsed) Unit() string {
return "By"
}
// Description returns the semantic convention description of the instrument
func (MemoryUsed) Description() string {
return "Memory used by the Go runtime."
}
// AttrMemoryType returns an optional attribute for the "go.memory.type" semantic
// convention. It represents the type of memory.
func (MemoryUsed) AttrMemoryType(val MemoryTypeAttr) attribute.KeyValue {
return attribute.String("go.memory.type", string(val))
}
// AttrMemoryDetailedType returns an optional attribute for the
// "go.memory.detailed_type" semantic convention. It represents the detailed type
// of memory.
func (MemoryUsed) AttrMemoryDetailedType(val string) attribute.KeyValue {
return attribute.String("go.memory.detailed_type", val)
}
// ProcessorLimit is an instrument used to record metric values conforming to the
// "go.processor.limit" semantic conventions. It represents the number of OS
// threads that can execute user-level Go code simultaneously.
type ProcessorLimit struct {
metric.Int64ObservableUpDownCounter
}
var newProcessorLimitOpts = []metric.Int64ObservableUpDownCounterOption{
metric.WithDescription("The number of OS threads that can execute user-level Go code simultaneously."),
metric.WithUnit("{thread}"),
}
// NewProcessorLimit returns a new ProcessorLimit instrument.
func NewProcessorLimit(
m metric.Meter,
opt ...metric.Int64ObservableUpDownCounterOption,
) (ProcessorLimit, error) {
// Check if the meter is nil.
if m == nil {
return ProcessorLimit{noop.Int64ObservableUpDownCounter{}}, nil
}
if len(opt) == 0 {
opt = newProcessorLimitOpts
} else {
opt = append(opt, newProcessorLimitOpts...)
}
i, err := m.Int64ObservableUpDownCounter(
"go.processor.limit",
opt...,
)
if err != nil {
return ProcessorLimit{noop.Int64ObservableUpDownCounter{}}, err
}
return ProcessorLimit{i}, nil
}
// Inst returns the underlying metric instrument.
func (m ProcessorLimit) Inst() metric.Int64ObservableUpDownCounter {
return m.Int64ObservableUpDownCounter
}
// Name returns the semantic convention name of the instrument.
func (ProcessorLimit) Name() string {
return "go.processor.limit"
}
// Unit returns the semantic convention unit of the instrument
func (ProcessorLimit) Unit() string {
return "{thread}"
}
// Description returns the semantic convention description of the instrument
func (ProcessorLimit) Description() string {
return "The number of OS threads that can execute user-level Go code simultaneously."
}
// ScheduleDuration is an instrument used to record metric values conforming to
// the "go.schedule.duration" semantic conventions. It represents the time
// goroutines have spent in the scheduler in a runnable state before actually
// running.
type ScheduleDuration struct {
metric.Float64Histogram
}
var newScheduleDurationOpts = []metric.Float64HistogramOption{
metric.WithDescription("The time goroutines have spent in the scheduler in a runnable state before actually running."),
metric.WithUnit("s"),
}
// NewScheduleDuration returns a new ScheduleDuration instrument.
func NewScheduleDuration(
m metric.Meter,
opt ...metric.Float64HistogramOption,
) (ScheduleDuration, error) {
// Check if the meter is nil.
if m == nil {
return ScheduleDuration{noop.Float64Histogram{}}, nil
}
if len(opt) == 0 {
opt = newScheduleDurationOpts
} else {
opt = append(opt, newScheduleDurationOpts...)
}
i, err := m.Float64Histogram(
"go.schedule.duration",
opt...,
)
if err != nil {
return ScheduleDuration{noop.Float64Histogram{}}, err
}
return ScheduleDuration{i}, nil
}
// Inst returns the underlying metric instrument.
func (m ScheduleDuration) Inst() metric.Float64Histogram {
return m.Float64Histogram
}
// Name returns the semantic convention name of the instrument.
func (ScheduleDuration) Name() string {
return "go.schedule.duration"
}
// Unit returns the semantic convention unit of the instrument
func (ScheduleDuration) Unit() string {
return "s"
}
// Description returns the semantic convention description of the instrument
func (ScheduleDuration) Description() string {
return "The time goroutines have spent in the scheduler in a runnable state before actually running."
}
// Record records val to the current distribution for attrs.
//
// Computed from `/sched/latencies:seconds`. Bucket boundaries are provided by
// the runtime, and are subject to change.
func (m ScheduleDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) {
if !m.Float64Histogram.Enabled(ctx) {
return
}
if len(attrs) == 0 {
m.Float64Histogram.Record(ctx, val)
return
}
o := recOptPool.Get().(*[]metric.RecordOption)
defer func() {
*o = (*o)[:0]
recOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributes(attrs...))
m.Float64Histogram.Record(ctx, val, *o...)
}
// RecordSet records val to the current distribution for set.
//
// Computed from `/sched/latencies:seconds`. Bucket boundaries are provided by
// the runtime, and are subject to change.
func (m ScheduleDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
if !m.Float64Histogram.Enabled(ctx) {
return
}
if set.Len() == 0 {
m.Float64Histogram.Record(ctx, val)
return
}
o := recOptPool.Get().(*[]metric.RecordOption)
defer func() {
*o = (*o)[:0]
recOptPool.Put(o)
}()
*o = append(*o, metric.WithAttributeSet(set))
m.Float64Histogram.Record(ctx, val, *o...)
}