 8d9b62daf3
			
		
	
	8d9b62daf3
	
	
	
		
			
			This commit implements Phase 2 of the CHORUS Task Execution Engine development plan, providing a comprehensive execution environment abstraction layer with Docker container sandboxing support. ## New Features ### Core Sandbox Interface - Comprehensive ExecutionSandbox interface with isolated task execution - Support for command execution, file I/O, environment management - Resource usage monitoring and sandbox lifecycle management - Standardized error handling with SandboxError types and categories ### Docker Container Sandbox Implementation - Full Docker API integration with secure container creation - Transparent repository mounting with configurable read/write access - Advanced security policies with capability dropping and privilege controls - Comprehensive resource limits (CPU, memory, disk, processes, file handles) - Support for tmpfs mounts, masked paths, and read-only bind mounts - Container lifecycle management with proper cleanup and health monitoring ### Security & Resource Management - Configurable security policies with SELinux, AppArmor, and Seccomp support - Fine-grained capability management with secure defaults - Network isolation options with configurable DNS and proxy settings - Resource monitoring with real-time CPU, memory, and network usage tracking - Comprehensive ulimits configuration for process and file handle limits ### Repository Integration - Seamless repository mounting from local paths to container workspaces - Git configuration support with user credentials and global settings - File inclusion/exclusion patterns for selective repository access - Configurable permissions and ownership for mounted repositories ### Testing Infrastructure - Comprehensive test suite with 60+ test cases covering all functionality - Docker integration tests with Alpine Linux containers (skipped in short mode) - Mock sandbox implementation for unit testing without Docker dependencies - Security policy validation tests with read-only filesystem enforcement - Resource usage monitoring and cleanup verification tests ## Technical Details ### Dependencies Added - github.com/docker/docker v28.4.0+incompatible - Docker API client - github.com/docker/go-connections v0.6.0 - Docker connection utilities - github.com/docker/go-units v0.5.0 - Docker units and formatting - Associated Docker API dependencies for complete container management ### Architecture - Interface-driven design enabling multiple sandbox implementations - Comprehensive configuration structures for all sandbox aspects - Resource usage tracking with detailed metrics collection - Error handling with retryable error classification - Proper cleanup and resource management throughout sandbox lifecycle ### Compatibility - Maintains backward compatibility with existing CHORUS architecture - Designed for future integration with Phase 3 Core Task Execution Engine - Extensible design supporting additional sandbox implementations (VM, process) This Phase 2 implementation provides the foundation for secure, isolated task execution that will be integrated with the AI model providers from Phase 1 in the upcoming Phase 3 development. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			1641 lines
		
	
	
		
			52 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			1641 lines
		
	
	
		
			52 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Code generated from semantic convention specification. DO NOT EDIT.
 | |
| 
 | |
| // Copyright The OpenTelemetry Authors
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| // Package httpconv provides types and functionality for OpenTelemetry semantic
 | |
| // conventions in the "http" namespace.
 | |
| package httpconv
 | |
| 
 | |
| 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{} }}
 | |
| )
 | |
| 
 | |
| // ErrorTypeAttr is an attribute conforming to the error.type semantic
 | |
| // conventions. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| type ErrorTypeAttr string
 | |
| 
 | |
| var (
 | |
| 	// ErrorTypeOther is a fallback error value to be used when the instrumentation
 | |
| 	// doesn't define a custom value.
 | |
| 	ErrorTypeOther ErrorTypeAttr = "_OTHER"
 | |
| )
 | |
| 
 | |
| // ConnectionStateAttr is an attribute conforming to the http.connection.state
 | |
| // semantic conventions. It represents the state of the HTTP connection in the
 | |
| // HTTP connection pool.
 | |
| type ConnectionStateAttr string
 | |
| 
 | |
| var (
 | |
| 	// ConnectionStateActive is the active state.
 | |
| 	ConnectionStateActive ConnectionStateAttr = "active"
 | |
| 	// ConnectionStateIdle is the idle state.
 | |
| 	ConnectionStateIdle ConnectionStateAttr = "idle"
 | |
| )
 | |
| 
 | |
| // RequestMethodAttr is an attribute conforming to the http.request.method
 | |
| // semantic conventions. It represents the HTTP request method.
 | |
| type RequestMethodAttr string
 | |
| 
 | |
| var (
 | |
| 	// RequestMethodConnect is the CONNECT method.
 | |
| 	RequestMethodConnect RequestMethodAttr = "CONNECT"
 | |
| 	// RequestMethodDelete is the DELETE method.
 | |
| 	RequestMethodDelete RequestMethodAttr = "DELETE"
 | |
| 	// RequestMethodGet is the GET method.
 | |
| 	RequestMethodGet RequestMethodAttr = "GET"
 | |
| 	// RequestMethodHead is the HEAD method.
 | |
| 	RequestMethodHead RequestMethodAttr = "HEAD"
 | |
| 	// RequestMethodOptions is the OPTIONS method.
 | |
| 	RequestMethodOptions RequestMethodAttr = "OPTIONS"
 | |
| 	// RequestMethodPatch is the PATCH method.
 | |
| 	RequestMethodPatch RequestMethodAttr = "PATCH"
 | |
| 	// RequestMethodPost is the POST method.
 | |
| 	RequestMethodPost RequestMethodAttr = "POST"
 | |
| 	// RequestMethodPut is the PUT method.
 | |
| 	RequestMethodPut RequestMethodAttr = "PUT"
 | |
| 	// RequestMethodTrace is the TRACE method.
 | |
| 	RequestMethodTrace RequestMethodAttr = "TRACE"
 | |
| 	// RequestMethodOther is the any HTTP method that the instrumentation has no
 | |
| 	// prior knowledge of.
 | |
| 	RequestMethodOther RequestMethodAttr = "_OTHER"
 | |
| )
 | |
| 
 | |
| // UserAgentSyntheticTypeAttr is an attribute conforming to the
 | |
| // user_agent.synthetic.type semantic conventions. It represents the specifies
 | |
| // the category of synthetic traffic, such as tests or bots.
 | |
| type UserAgentSyntheticTypeAttr string
 | |
| 
 | |
| var (
 | |
| 	// UserAgentSyntheticTypeBot is the bot source.
 | |
| 	UserAgentSyntheticTypeBot UserAgentSyntheticTypeAttr = "bot"
 | |
| 	// UserAgentSyntheticTypeTest is the synthetic test source.
 | |
| 	UserAgentSyntheticTypeTest UserAgentSyntheticTypeAttr = "test"
 | |
| )
 | |
| 
 | |
| // ClientActiveRequests is an instrument used to record metric values conforming
 | |
| // to the "http.client.active_requests" semantic conventions. It represents the
 | |
| // number of active HTTP requests.
 | |
| type ClientActiveRequests struct {
 | |
| 	metric.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // NewClientActiveRequests returns a new ClientActiveRequests instrument.
 | |
| func NewClientActiveRequests(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64UpDownCounterOption,
 | |
| ) (ClientActiveRequests, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientActiveRequests{noop.Int64UpDownCounter{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64UpDownCounter(
 | |
| 		"http.client.active_requests",
 | |
| 		append([]metric.Int64UpDownCounterOption{
 | |
| 			metric.WithDescription("Number of active HTTP requests."),
 | |
| 			metric.WithUnit("{request}"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientActiveRequests{noop.Int64UpDownCounter{}}, err
 | |
| 	}
 | |
| 	return ClientActiveRequests{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientActiveRequests) Inst() metric.Int64UpDownCounter {
 | |
| 	return m.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientActiveRequests) Name() string {
 | |
| 	return "http.client.active_requests"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientActiveRequests) Unit() string {
 | |
| 	return "{request}"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientActiveRequests) Description() string {
 | |
| 	return "Number of active HTTP requests."
 | |
| }
 | |
| 
 | |
| // Add adds incr to the existing count for attrs.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| func (m ClientActiveRequests) Add(
 | |
| 	ctx context.Context,
 | |
| 	incr int64,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AddSet adds incr to the existing count for set.
 | |
| func (m ClientActiveRequests) AddSet(ctx context.Context, incr int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AttrURLTemplate returns an optional attribute for the "url.template" semantic
 | |
| // convention. It represents the low-cardinality template of an
 | |
| // [absolute path reference].
 | |
| //
 | |
| // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
 | |
| func (ClientActiveRequests) AttrURLTemplate(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.template", val)
 | |
| }
 | |
| 
 | |
| // AttrRequestMethod returns an optional attribute for the "http.request.method"
 | |
| // semantic convention. It represents the HTTP request method.
 | |
| func (ClientActiveRequests) AttrRequestMethod(val RequestMethodAttr) attribute.KeyValue {
 | |
| 	return attribute.String("http.request.method", string(val))
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientActiveRequests) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // ClientConnectionDuration is an instrument used to record metric values
 | |
| // conforming to the "http.client.connection.duration" semantic conventions. It
 | |
| // represents the duration of the successfully established outbound HTTP
 | |
| // connections.
 | |
| type ClientConnectionDuration struct {
 | |
| 	metric.Float64Histogram
 | |
| }
 | |
| 
 | |
| // NewClientConnectionDuration returns a new ClientConnectionDuration instrument.
 | |
| func NewClientConnectionDuration(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Float64HistogramOption,
 | |
| ) (ClientConnectionDuration, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientConnectionDuration{noop.Float64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Float64Histogram(
 | |
| 		"http.client.connection.duration",
 | |
| 		append([]metric.Float64HistogramOption{
 | |
| 			metric.WithDescription("The duration of the successfully established outbound HTTP connections."),
 | |
| 			metric.WithUnit("s"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientConnectionDuration{noop.Float64Histogram{}}, err
 | |
| 	}
 | |
| 	return ClientConnectionDuration{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientConnectionDuration) Inst() metric.Float64Histogram {
 | |
| 	return m.Float64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientConnectionDuration) Name() string {
 | |
| 	return "http.client.connection.duration"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientConnectionDuration) Unit() string {
 | |
| 	return "s"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientConnectionDuration) Description() string {
 | |
| 	return "The duration of the successfully established outbound HTTP connections."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| func (m ClientConnectionDuration) Record(
 | |
| 	ctx context.Context,
 | |
| 	val float64,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	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(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Float64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| func (m ClientConnectionDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Float64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	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...)
 | |
| }
 | |
| 
 | |
| // AttrNetworkPeerAddress returns an optional attribute for the
 | |
| // "network.peer.address" semantic convention. It represents the peer address of
 | |
| // the network connection - IP address or Unix domain socket name.
 | |
| func (ClientConnectionDuration) AttrNetworkPeerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.peer.address", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ClientConnectionDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientConnectionDuration) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // ClientOpenConnections is an instrument used to record metric values conforming
 | |
| // to the "http.client.open_connections" semantic conventions. It represents the
 | |
| // number of outbound HTTP connections that are currently active or idle on the
 | |
| // client.
 | |
| type ClientOpenConnections struct {
 | |
| 	metric.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // NewClientOpenConnections returns a new ClientOpenConnections instrument.
 | |
| func NewClientOpenConnections(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64UpDownCounterOption,
 | |
| ) (ClientOpenConnections, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientOpenConnections{noop.Int64UpDownCounter{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64UpDownCounter(
 | |
| 		"http.client.open_connections",
 | |
| 		append([]metric.Int64UpDownCounterOption{
 | |
| 			metric.WithDescription("Number of outbound HTTP connections that are currently active or idle on the client."),
 | |
| 			metric.WithUnit("{connection}"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientOpenConnections{noop.Int64UpDownCounter{}}, err
 | |
| 	}
 | |
| 	return ClientOpenConnections{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientOpenConnections) Inst() metric.Int64UpDownCounter {
 | |
| 	return m.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientOpenConnections) Name() string {
 | |
| 	return "http.client.open_connections"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientOpenConnections) Unit() string {
 | |
| 	return "{connection}"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientOpenConnections) Description() string {
 | |
| 	return "Number of outbound HTTP connections that are currently active or idle on the client."
 | |
| }
 | |
| 
 | |
| // Add adds incr to the existing count for attrs.
 | |
| //
 | |
| // The connectionState is the state of the HTTP connection in the HTTP connection
 | |
| // pool.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| func (m ClientOpenConnections) Add(
 | |
| 	ctx context.Context,
 | |
| 	incr int64,
 | |
| 	connectionState ConnectionStateAttr,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.connection.state", string(connectionState)),
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AddSet adds incr to the existing count for set.
 | |
| func (m ClientOpenConnections) AddSet(ctx context.Context, incr int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AttrNetworkPeerAddress returns an optional attribute for the
 | |
| // "network.peer.address" semantic convention. It represents the peer address of
 | |
| // the network connection - IP address or Unix domain socket name.
 | |
| func (ClientOpenConnections) AttrNetworkPeerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.peer.address", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ClientOpenConnections) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientOpenConnections) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // ClientRequestBodySize is an instrument used to record metric values conforming
 | |
| // to the "http.client.request.body.size" semantic conventions. It represents the
 | |
| // size of HTTP client request bodies.
 | |
| type ClientRequestBodySize struct {
 | |
| 	metric.Int64Histogram
 | |
| }
 | |
| 
 | |
| // NewClientRequestBodySize returns a new ClientRequestBodySize instrument.
 | |
| func NewClientRequestBodySize(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64HistogramOption,
 | |
| ) (ClientRequestBodySize, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientRequestBodySize{noop.Int64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64Histogram(
 | |
| 		"http.client.request.body.size",
 | |
| 		append([]metric.Int64HistogramOption{
 | |
| 			metric.WithDescription("Size of HTTP client request bodies."),
 | |
| 			metric.WithUnit("By"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientRequestBodySize{noop.Int64Histogram{}}, err
 | |
| 	}
 | |
| 	return ClientRequestBodySize{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientRequestBodySize) Inst() metric.Int64Histogram {
 | |
| 	return m.Int64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientRequestBodySize) Name() string {
 | |
| 	return "http.client.request.body.size"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientRequestBodySize) Unit() string {
 | |
| 	return "By"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientRequestBodySize) Description() string {
 | |
| 	return "Size of HTTP client request bodies."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // The size of the request payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ClientRequestBodySize) Record(
 | |
| 	ctx context.Context,
 | |
| 	val int64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| //
 | |
| // The size of the request payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ClientRequestBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ClientRequestBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ClientRequestBodySize) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ClientRequestBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrURLTemplate returns an optional attribute for the "url.template" semantic
 | |
| // convention. It represents the low-cardinality template of an
 | |
| // [absolute path reference].
 | |
| //
 | |
| // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
 | |
| func (ClientRequestBodySize) AttrURLTemplate(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.template", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ClientRequestBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientRequestBodySize) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // ClientRequestDuration is an instrument used to record metric values conforming
 | |
| // to the "http.client.request.duration" semantic conventions. It represents the
 | |
| // duration of HTTP client requests.
 | |
| type ClientRequestDuration struct {
 | |
| 	metric.Float64Histogram
 | |
| }
 | |
| 
 | |
| // NewClientRequestDuration returns a new ClientRequestDuration instrument.
 | |
| func NewClientRequestDuration(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Float64HistogramOption,
 | |
| ) (ClientRequestDuration, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientRequestDuration{noop.Float64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Float64Histogram(
 | |
| 		"http.client.request.duration",
 | |
| 		append([]metric.Float64HistogramOption{
 | |
| 			metric.WithDescription("Duration of HTTP client requests."),
 | |
| 			metric.WithUnit("s"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientRequestDuration{noop.Float64Histogram{}}, err
 | |
| 	}
 | |
| 	return ClientRequestDuration{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientRequestDuration) Inst() metric.Float64Histogram {
 | |
| 	return m.Float64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientRequestDuration) Name() string {
 | |
| 	return "http.client.request.duration"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientRequestDuration) Unit() string {
 | |
| 	return "s"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientRequestDuration) Description() string {
 | |
| 	return "Duration of HTTP client requests."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| func (m ClientRequestDuration) Record(
 | |
| 	ctx context.Context,
 | |
| 	val float64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	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(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Float64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| func (m ClientRequestDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Float64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	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...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ClientRequestDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ClientRequestDuration) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ClientRequestDuration) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ClientRequestDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientRequestDuration) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // AttrURLTemplate returns an optional attribute for the "url.template" semantic
 | |
| // convention. It represents the low-cardinality template of an
 | |
| // [absolute path reference].
 | |
| //
 | |
| // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
 | |
| func (ClientRequestDuration) AttrURLTemplate(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.template", val)
 | |
| }
 | |
| 
 | |
| // ClientResponseBodySize is an instrument used to record metric values
 | |
| // conforming to the "http.client.response.body.size" semantic conventions. It
 | |
| // represents the size of HTTP client response bodies.
 | |
| type ClientResponseBodySize struct {
 | |
| 	metric.Int64Histogram
 | |
| }
 | |
| 
 | |
| // NewClientResponseBodySize returns a new ClientResponseBodySize instrument.
 | |
| func NewClientResponseBodySize(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64HistogramOption,
 | |
| ) (ClientResponseBodySize, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ClientResponseBodySize{noop.Int64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64Histogram(
 | |
| 		"http.client.response.body.size",
 | |
| 		append([]metric.Int64HistogramOption{
 | |
| 			metric.WithDescription("Size of HTTP client response bodies."),
 | |
| 			metric.WithUnit("By"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ClientResponseBodySize{noop.Int64Histogram{}}, err
 | |
| 	}
 | |
| 	return ClientResponseBodySize{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ClientResponseBodySize) Inst() metric.Int64Histogram {
 | |
| 	return m.Int64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ClientResponseBodySize) Name() string {
 | |
| 	return "http.client.response.body.size"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ClientResponseBodySize) Unit() string {
 | |
| 	return "By"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ClientResponseBodySize) Description() string {
 | |
| 	return "Size of HTTP client response bodies."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The serverAddress is the server domain name if available without reverse DNS
 | |
| // lookup; otherwise, IP address or Unix domain socket name.
 | |
| //
 | |
| // The serverPort is the server port number.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // The size of the response payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ClientResponseBodySize) Record(
 | |
| 	ctx context.Context,
 | |
| 	val int64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	serverAddress string,
 | |
| 	serverPort int,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("server.address", serverAddress),
 | |
| 				attribute.Int("server.port", serverPort),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| //
 | |
| // The size of the response payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ClientResponseBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ClientResponseBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ClientResponseBodySize) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ClientResponseBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrURLTemplate returns an optional attribute for the "url.template" semantic
 | |
| // convention. It represents the low-cardinality template of an
 | |
| // [absolute path reference].
 | |
| //
 | |
| // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2
 | |
| func (ClientResponseBodySize) AttrURLTemplate(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.template", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ClientResponseBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrURLScheme returns an optional attribute for the "url.scheme" semantic
 | |
| // convention. It represents the [URI scheme] component identifying the used
 | |
| // protocol.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (ClientResponseBodySize) AttrURLScheme(val string) attribute.KeyValue {
 | |
| 	return attribute.String("url.scheme", val)
 | |
| }
 | |
| 
 | |
| // ServerActiveRequests is an instrument used to record metric values conforming
 | |
| // to the "http.server.active_requests" semantic conventions. It represents the
 | |
| // number of active HTTP server requests.
 | |
| type ServerActiveRequests struct {
 | |
| 	metric.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // NewServerActiveRequests returns a new ServerActiveRequests instrument.
 | |
| func NewServerActiveRequests(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64UpDownCounterOption,
 | |
| ) (ServerActiveRequests, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ServerActiveRequests{noop.Int64UpDownCounter{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64UpDownCounter(
 | |
| 		"http.server.active_requests",
 | |
| 		append([]metric.Int64UpDownCounterOption{
 | |
| 			metric.WithDescription("Number of active HTTP server requests."),
 | |
| 			metric.WithUnit("{request}"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ServerActiveRequests{noop.Int64UpDownCounter{}}, err
 | |
| 	}
 | |
| 	return ServerActiveRequests{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ServerActiveRequests) Inst() metric.Int64UpDownCounter {
 | |
| 	return m.Int64UpDownCounter
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ServerActiveRequests) Name() string {
 | |
| 	return "http.server.active_requests"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ServerActiveRequests) Unit() string {
 | |
| 	return "{request}"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ServerActiveRequests) Description() string {
 | |
| 	return "Number of active HTTP server requests."
 | |
| }
 | |
| 
 | |
| // Add adds incr to the existing count for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The urlScheme is the the [URI scheme] component identifying the used protocol.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (m ServerActiveRequests) Add(
 | |
| 	ctx context.Context,
 | |
| 	incr int64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	urlScheme string,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("url.scheme", urlScheme),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AddSet adds incr to the existing count for set.
 | |
| func (m ServerActiveRequests) AddSet(ctx context.Context, incr int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64UpDownCounter.Add(ctx, incr)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := addOptPool.Get().(*[]metric.AddOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		addOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64UpDownCounter.Add(ctx, incr, *o...)
 | |
| }
 | |
| 
 | |
| // AttrServerAddress returns an optional attribute for the "server.address"
 | |
| // semantic convention. It represents the name of the local HTTP server that
 | |
| // received the request.
 | |
| func (ServerActiveRequests) AttrServerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("server.address", val)
 | |
| }
 | |
| 
 | |
| // AttrServerPort returns an optional attribute for the "server.port" semantic
 | |
| // convention. It represents the port of the local HTTP server that received the
 | |
| // request.
 | |
| func (ServerActiveRequests) AttrServerPort(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("server.port", val)
 | |
| }
 | |
| 
 | |
| // ServerRequestBodySize is an instrument used to record metric values conforming
 | |
| // to the "http.server.request.body.size" semantic conventions. It represents the
 | |
| // size of HTTP server request bodies.
 | |
| type ServerRequestBodySize struct {
 | |
| 	metric.Int64Histogram
 | |
| }
 | |
| 
 | |
| // NewServerRequestBodySize returns a new ServerRequestBodySize instrument.
 | |
| func NewServerRequestBodySize(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64HistogramOption,
 | |
| ) (ServerRequestBodySize, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ServerRequestBodySize{noop.Int64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64Histogram(
 | |
| 		"http.server.request.body.size",
 | |
| 		append([]metric.Int64HistogramOption{
 | |
| 			metric.WithDescription("Size of HTTP server request bodies."),
 | |
| 			metric.WithUnit("By"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ServerRequestBodySize{noop.Int64Histogram{}}, err
 | |
| 	}
 | |
| 	return ServerRequestBodySize{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ServerRequestBodySize) Inst() metric.Int64Histogram {
 | |
| 	return m.Int64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ServerRequestBodySize) Name() string {
 | |
| 	return "http.server.request.body.size"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ServerRequestBodySize) Unit() string {
 | |
| 	return "By"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ServerRequestBodySize) Description() string {
 | |
| 	return "Size of HTTP server request bodies."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The urlScheme is the the [URI scheme] component identifying the used protocol.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| //
 | |
| // The size of the request payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ServerRequestBodySize) Record(
 | |
| 	ctx context.Context,
 | |
| 	val int64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	urlScheme string,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("url.scheme", urlScheme),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| //
 | |
| // The size of the request payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ServerRequestBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ServerRequestBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ServerRequestBodySize) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrRoute returns an optional attribute for the "http.route" semantic
 | |
| // convention. It represents the matched route, that is, the path template in the
 | |
| // format used by the respective server framework.
 | |
| func (ServerRequestBodySize) AttrRoute(val string) attribute.KeyValue {
 | |
| 	return attribute.String("http.route", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ServerRequestBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ServerRequestBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrServerAddress returns an optional attribute for the "server.address"
 | |
| // semantic convention. It represents the name of the local HTTP server that
 | |
| // received the request.
 | |
| func (ServerRequestBodySize) AttrServerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("server.address", val)
 | |
| }
 | |
| 
 | |
| // AttrServerPort returns an optional attribute for the "server.port" semantic
 | |
| // convention. It represents the port of the local HTTP server that received the
 | |
| // request.
 | |
| func (ServerRequestBodySize) AttrServerPort(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("server.port", val)
 | |
| }
 | |
| 
 | |
| // AttrUserAgentSyntheticType returns an optional attribute for the
 | |
| // "user_agent.synthetic.type" semantic convention. It represents the specifies
 | |
| // the category of synthetic traffic, such as tests or bots.
 | |
| func (ServerRequestBodySize) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("user_agent.synthetic.type", string(val))
 | |
| }
 | |
| 
 | |
| // ServerRequestDuration is an instrument used to record metric values conforming
 | |
| // to the "http.server.request.duration" semantic conventions. It represents the
 | |
| // duration of HTTP server requests.
 | |
| type ServerRequestDuration struct {
 | |
| 	metric.Float64Histogram
 | |
| }
 | |
| 
 | |
| // NewServerRequestDuration returns a new ServerRequestDuration instrument.
 | |
| func NewServerRequestDuration(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Float64HistogramOption,
 | |
| ) (ServerRequestDuration, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ServerRequestDuration{noop.Float64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Float64Histogram(
 | |
| 		"http.server.request.duration",
 | |
| 		append([]metric.Float64HistogramOption{
 | |
| 			metric.WithDescription("Duration of HTTP server requests."),
 | |
| 			metric.WithUnit("s"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ServerRequestDuration{noop.Float64Histogram{}}, err
 | |
| 	}
 | |
| 	return ServerRequestDuration{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ServerRequestDuration) Inst() metric.Float64Histogram {
 | |
| 	return m.Float64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ServerRequestDuration) Name() string {
 | |
| 	return "http.server.request.duration"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ServerRequestDuration) Unit() string {
 | |
| 	return "s"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ServerRequestDuration) Description() string {
 | |
| 	return "Duration of HTTP server requests."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The urlScheme is the the [URI scheme] component identifying the used protocol.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| func (m ServerRequestDuration) Record(
 | |
| 	ctx context.Context,
 | |
| 	val float64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	urlScheme string,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	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(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("url.scheme", urlScheme),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Float64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| func (m ServerRequestDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Float64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	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...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ServerRequestDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ServerRequestDuration) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrRoute returns an optional attribute for the "http.route" semantic
 | |
| // convention. It represents the matched route, that is, the path template in the
 | |
| // format used by the respective server framework.
 | |
| func (ServerRequestDuration) AttrRoute(val string) attribute.KeyValue {
 | |
| 	return attribute.String("http.route", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ServerRequestDuration) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ServerRequestDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrServerAddress returns an optional attribute for the "server.address"
 | |
| // semantic convention. It represents the name of the local HTTP server that
 | |
| // received the request.
 | |
| func (ServerRequestDuration) AttrServerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("server.address", val)
 | |
| }
 | |
| 
 | |
| // AttrServerPort returns an optional attribute for the "server.port" semantic
 | |
| // convention. It represents the port of the local HTTP server that received the
 | |
| // request.
 | |
| func (ServerRequestDuration) AttrServerPort(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("server.port", val)
 | |
| }
 | |
| 
 | |
| // AttrUserAgentSyntheticType returns an optional attribute for the
 | |
| // "user_agent.synthetic.type" semantic convention. It represents the specifies
 | |
| // the category of synthetic traffic, such as tests or bots.
 | |
| func (ServerRequestDuration) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("user_agent.synthetic.type", string(val))
 | |
| }
 | |
| 
 | |
| // ServerResponseBodySize is an instrument used to record metric values
 | |
| // conforming to the "http.server.response.body.size" semantic conventions. It
 | |
| // represents the size of HTTP server response bodies.
 | |
| type ServerResponseBodySize struct {
 | |
| 	metric.Int64Histogram
 | |
| }
 | |
| 
 | |
| // NewServerResponseBodySize returns a new ServerResponseBodySize instrument.
 | |
| func NewServerResponseBodySize(
 | |
| 	m metric.Meter,
 | |
| 	opt ...metric.Int64HistogramOption,
 | |
| ) (ServerResponseBodySize, error) {
 | |
| 	// Check if the meter is nil.
 | |
| 	if m == nil {
 | |
| 		return ServerResponseBodySize{noop.Int64Histogram{}}, nil
 | |
| 	}
 | |
| 
 | |
| 	i, err := m.Int64Histogram(
 | |
| 		"http.server.response.body.size",
 | |
| 		append([]metric.Int64HistogramOption{
 | |
| 			metric.WithDescription("Size of HTTP server response bodies."),
 | |
| 			metric.WithUnit("By"),
 | |
| 		}, opt...)...,
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 	    return ServerResponseBodySize{noop.Int64Histogram{}}, err
 | |
| 	}
 | |
| 	return ServerResponseBodySize{i}, nil
 | |
| }
 | |
| 
 | |
| // Inst returns the underlying metric instrument.
 | |
| func (m ServerResponseBodySize) Inst() metric.Int64Histogram {
 | |
| 	return m.Int64Histogram
 | |
| }
 | |
| 
 | |
| // Name returns the semantic convention name of the instrument.
 | |
| func (ServerResponseBodySize) Name() string {
 | |
| 	return "http.server.response.body.size"
 | |
| }
 | |
| 
 | |
| // Unit returns the semantic convention unit of the instrument
 | |
| func (ServerResponseBodySize) Unit() string {
 | |
| 	return "By"
 | |
| }
 | |
| 
 | |
| // Description returns the semantic convention description of the instrument
 | |
| func (ServerResponseBodySize) Description() string {
 | |
| 	return "Size of HTTP server response bodies."
 | |
| }
 | |
| 
 | |
| // Record records val to the current distribution for attrs.
 | |
| //
 | |
| // The requestMethod is the HTTP request method.
 | |
| //
 | |
| // The urlScheme is the the [URI scheme] component identifying the used protocol.
 | |
| //
 | |
| // All additional attrs passed are included in the recorded value.
 | |
| //
 | |
| // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1
 | |
| //
 | |
| // The size of the response payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ServerResponseBodySize) Record(
 | |
| 	ctx context.Context,
 | |
| 	val int64,
 | |
| 	requestMethod RequestMethodAttr,
 | |
| 	urlScheme string,
 | |
| 	attrs ...attribute.KeyValue,
 | |
| ) {
 | |
| 	if len(attrs) == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(
 | |
| 		*o,
 | |
| 		metric.WithAttributes(
 | |
| 			append(
 | |
| 				attrs,
 | |
| 				attribute.String("http.request.method", string(requestMethod)),
 | |
| 				attribute.String("url.scheme", urlScheme),
 | |
| 			)...,
 | |
| 		),
 | |
| 	)
 | |
| 
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // RecordSet records val to the current distribution for set.
 | |
| //
 | |
| // The size of the response payload body in bytes. This is the number of bytes
 | |
| // transferred excluding headers and is often, but not always, present as the
 | |
| // [Content-Length] header. For requests using transport encoding, this should be
 | |
| // the compressed size.
 | |
| //
 | |
| // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length
 | |
| func (m ServerResponseBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) {
 | |
| 	if set.Len() == 0 {
 | |
| 		m.Int64Histogram.Record(ctx, val)
 | |
| 	}
 | |
| 
 | |
| 	o := recOptPool.Get().(*[]metric.RecordOption)
 | |
| 	defer func() {
 | |
| 		*o = (*o)[:0]
 | |
| 		recOptPool.Put(o)
 | |
| 	}()
 | |
| 
 | |
| 	*o = append(*o, metric.WithAttributeSet(set))
 | |
| 	m.Int64Histogram.Record(ctx, val, *o...)
 | |
| }
 | |
| 
 | |
| // AttrErrorType returns an optional attribute for the "error.type" semantic
 | |
| // convention. It represents the describes a class of error the operation ended
 | |
| // with.
 | |
| func (ServerResponseBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("error.type", string(val))
 | |
| }
 | |
| 
 | |
| // AttrResponseStatusCode returns an optional attribute for the
 | |
| // "http.response.status_code" semantic convention. It represents the
 | |
| // [HTTP response status code].
 | |
| //
 | |
| // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6
 | |
| func (ServerResponseBodySize) AttrResponseStatusCode(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("http.response.status_code", val)
 | |
| }
 | |
| 
 | |
| // AttrRoute returns an optional attribute for the "http.route" semantic
 | |
| // convention. It represents the matched route, that is, the path template in the
 | |
| // format used by the respective server framework.
 | |
| func (ServerResponseBodySize) AttrRoute(val string) attribute.KeyValue {
 | |
| 	return attribute.String("http.route", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolName returns an optional attribute for the
 | |
| // "network.protocol.name" semantic convention. It represents the
 | |
| // [OSI application layer] or non-OSI equivalent.
 | |
| //
 | |
| // [OSI application layer]: https://wikipedia.org/wiki/Application_layer
 | |
| func (ServerResponseBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.name", val)
 | |
| }
 | |
| 
 | |
| // AttrNetworkProtocolVersion returns an optional attribute for the
 | |
| // "network.protocol.version" semantic convention. It represents the actual
 | |
| // version of the protocol used for network communication.
 | |
| func (ServerResponseBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue {
 | |
| 	return attribute.String("network.protocol.version", val)
 | |
| }
 | |
| 
 | |
| // AttrServerAddress returns an optional attribute for the "server.address"
 | |
| // semantic convention. It represents the name of the local HTTP server that
 | |
| // received the request.
 | |
| func (ServerResponseBodySize) AttrServerAddress(val string) attribute.KeyValue {
 | |
| 	return attribute.String("server.address", val)
 | |
| }
 | |
| 
 | |
| // AttrServerPort returns an optional attribute for the "server.port" semantic
 | |
| // convention. It represents the port of the local HTTP server that received the
 | |
| // request.
 | |
| func (ServerResponseBodySize) AttrServerPort(val int) attribute.KeyValue {
 | |
| 	return attribute.Int("server.port", val)
 | |
| }
 | |
| 
 | |
| // AttrUserAgentSyntheticType returns an optional attribute for the
 | |
| // "user_agent.synthetic.type" semantic convention. It represents the specifies
 | |
| // the category of synthetic traffic, such as tests or bots.
 | |
| func (ServerResponseBodySize) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue {
 | |
| 	return attribute.String("user_agent.synthetic.type", string(val))
 | |
| } |