metrics/smithyotelmetrics/async.go (41 lines of code) (raw):

package smithyotelmetrics import ( "context" "github.com/aws/smithy-go/metrics" otelmetric "go.opentelemetry.io/otel/metric" ) type asyncInstrument struct { otel otelmetric.Registration } var _ metrics.AsyncInstrument = (*asyncInstrument)(nil) func (i *asyncInstrument) Stop() { i.otel.Unregister() } // int64Observer wraps an untyped, multi-instrument OTEL Observer to Observe() // against a single int64 instrument. type int64Observer struct { observer otelmetric.Observer instrument otelmetric.Int64Observable } var _ metrics.Int64Observer = (*int64Observer)(nil) func (o *int64Observer) Observe(_ context.Context, v int64, opts ...metrics.RecordMetricOption) { o.observer.ObserveInt64(o.instrument, v, withMetricProps(opts...)) } // adaptInt64CB wraps an OTEL async instrument callback, binding it to a single // int64 instrument. func adaptInt64CB(io otelmetric.Int64Observable, cb metrics.Int64Callback) otelmetric.Callback { return func(ctx context.Context, o otelmetric.Observer) error { cb(ctx, &int64Observer{o, io}) return nil } } // float64Observer wraps an untyped, multi-instrument OTEL Observer to Observe() // against a single float64 instrument. type float64Observer struct { observer otelmetric.Observer instrument otelmetric.Float64Observable } var _ metrics.Float64Observer = (*float64Observer)(nil) func (o *float64Observer) Observe(_ context.Context, v float64, opts ...metrics.RecordMetricOption) { o.observer.ObserveFloat64(o.instrument, v, withMetricProps(opts...)) } // adaptFloat64CB wraps an OTEL async instrument callback, binding it to a single // float64 instrument. func adaptFloat64CB(io otelmetric.Float64Observable, cb metrics.Float64Callback) otelmetric.Callback { return func(ctx context.Context, o otelmetric.Observer) error { cb(ctx, &float64Observer{o, io}) return nil } }