You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							3.2 KiB
						
					
					
				// Copyright The OpenTelemetry Authors
 | 
						|
//
 | 
						|
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
// you may not use this file except in compliance with the License.
 | 
						|
// You may obtain a copy of the License at
 | 
						|
//
 | 
						|
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
//
 | 
						|
// Unless required by applicable law or agreed to in writing, software
 | 
						|
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
// See the License for the specific language governing permissions and
 | 
						|
// limitations under the License.
 | 
						|
 | 
						|
package metric // import "go.opentelemetry.io/otel/metric"
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
 | 
						|
	"go.opentelemetry.io/otel/attribute"
 | 
						|
	"go.opentelemetry.io/otel/metric/number"
 | 
						|
)
 | 
						|
 | 
						|
// MeterImpl is the interface an SDK must implement to supply a Meter
 | 
						|
// implementation.
 | 
						|
type MeterImpl interface {
 | 
						|
	// RecordBatch atomically records a batch of measurements.
 | 
						|
	RecordBatch(ctx context.Context, labels []attribute.KeyValue, measurement ...Measurement)
 | 
						|
 | 
						|
	// NewSyncInstrument returns a newly constructed
 | 
						|
	// synchronous instrument implementation or an error, should
 | 
						|
	// one occur.
 | 
						|
	NewSyncInstrument(descriptor Descriptor) (SyncImpl, error)
 | 
						|
 | 
						|
	// NewAsyncInstrument returns a newly constructed
 | 
						|
	// asynchronous instrument implementation or an error, should
 | 
						|
	// one occur.
 | 
						|
	NewAsyncInstrument(
 | 
						|
		descriptor Descriptor,
 | 
						|
		runner AsyncRunner,
 | 
						|
	) (AsyncImpl, error)
 | 
						|
}
 | 
						|
 | 
						|
// InstrumentImpl is a common interface for synchronous and
 | 
						|
// asynchronous instruments.
 | 
						|
type InstrumentImpl interface {
 | 
						|
	// Implementation returns the underlying implementation of the
 | 
						|
	// instrument, which allows the implementation to gain access
 | 
						|
	// to its own representation especially from a `Measurement`.
 | 
						|
	Implementation() interface{}
 | 
						|
 | 
						|
	// Descriptor returns a copy of the instrument's Descriptor.
 | 
						|
	Descriptor() Descriptor
 | 
						|
}
 | 
						|
 | 
						|
// SyncImpl is the implementation-level interface to a generic
 | 
						|
// synchronous instrument (e.g., ValueRecorder and Counter instruments).
 | 
						|
type SyncImpl interface {
 | 
						|
	InstrumentImpl
 | 
						|
 | 
						|
	// Bind creates an implementation-level bound instrument,
 | 
						|
	// binding a label set with this instrument implementation.
 | 
						|
	Bind(labels []attribute.KeyValue) BoundSyncImpl
 | 
						|
 | 
						|
	// RecordOne captures a single synchronous metric event.
 | 
						|
	RecordOne(ctx context.Context, number number.Number, labels []attribute.KeyValue)
 | 
						|
}
 | 
						|
 | 
						|
// BoundSyncImpl is the implementation-level interface to a
 | 
						|
// generic bound synchronous instrument
 | 
						|
type BoundSyncImpl interface {
 | 
						|
 | 
						|
	// RecordOne captures a single synchronous metric event.
 | 
						|
	RecordOne(ctx context.Context, number number.Number)
 | 
						|
 | 
						|
	// Unbind frees the resources associated with this bound instrument. It
 | 
						|
	// does not affect the metric this bound instrument was created through.
 | 
						|
	Unbind()
 | 
						|
}
 | 
						|
 | 
						|
// AsyncImpl is an implementation-level interface to an
 | 
						|
// asynchronous instrument (e.g., Observer instruments).
 | 
						|
type AsyncImpl interface {
 | 
						|
	InstrumentImpl
 | 
						|
}
 | 
						|
 | 
						|
// WrapMeterImpl constructs a `Meter` implementation from a
 | 
						|
// `MeterImpl` implementation.
 | 
						|
func WrapMeterImpl(impl MeterImpl, instrumentationName string, opts ...MeterOption) Meter {
 | 
						|
	return Meter{
 | 
						|
		impl:    impl,
 | 
						|
		name:    instrumentationName,
 | 
						|
		version: NewMeterConfig(opts...).InstrumentationVersion,
 | 
						|
	}
 | 
						|
}
 | 
						|
 |