Skip to content

Commit

Permalink
Add Instrument.IsEnabled per specs
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu committed Sep 3, 2024
1 parent 9339b21 commit b6ed797
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 4 deletions.
56 changes: 56 additions & 0 deletions internal/global/instruments.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,13 @@ func (i *sfCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOpt
}
}

func (i *sfCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Float64Counter).IsEnabled(ctx, opts...)
}
return false
}

type sfUpDownCounter struct {
embedded.Float64UpDownCounter

Expand All @@ -255,6 +262,13 @@ func (i *sfUpDownCounter) Add(ctx context.Context, incr float64, opts ...metric.
}
}

func (i *sfUpDownCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Float64UpDownCounter).IsEnabled(ctx, opts...)
}
return false
}

type sfHistogram struct {
embedded.Float64Histogram

Expand All @@ -281,6 +295,13 @@ func (i *sfHistogram) Record(ctx context.Context, x float64, opts ...metric.Reco
}
}

func (i *sfHistogram) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Float64Histogram).IsEnabled(ctx, opts...)
}
return false
}

type sfGauge struct {
embedded.Float64Gauge

Expand All @@ -307,6 +328,13 @@ func (i *sfGauge) Record(ctx context.Context, x float64, opts ...metric.RecordOp
}
}

func (i *sfGauge) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Float64Gauge).IsEnabled(ctx, opts...)
}
return false
}

type siCounter struct {
embedded.Int64Counter

Expand All @@ -333,6 +361,13 @@ func (i *siCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption)
}
}

func (i *siCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Int64Counter).IsEnabled(ctx, opts...)
}
return false
}

type siUpDownCounter struct {
embedded.Int64UpDownCounter

Expand All @@ -359,6 +394,13 @@ func (i *siUpDownCounter) Add(ctx context.Context, x int64, opts ...metric.AddOp
}
}

func (i *siUpDownCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Int64UpDownCounter).IsEnabled(ctx, opts...)
}
return false
}

type siHistogram struct {
embedded.Int64Histogram

Expand All @@ -385,6 +427,13 @@ func (i *siHistogram) Record(ctx context.Context, x int64, opts ...metric.Record
}
}

func (i *siHistogram) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Int64Histogram).IsEnabled(ctx, opts...)
}
return false
}

type siGauge struct {
embedded.Int64Gauge

Expand All @@ -410,3 +459,10 @@ func (i *siGauge) Record(ctx context.Context, x int64, opts ...metric.RecordOpti
ctr.(metric.Int64Gauge).Record(ctx, x, opts...)
}
}

func (i *siGauge) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
if ctr := i.delegate.Load(); ctr != nil {
ctr.(metric.Int64Gauge).IsEnabled(ctx, opts...)
}
return false
}
8 changes: 8 additions & 0 deletions internal/global/instruments_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ func (i *testCountingFloatInstrument) Record(context.Context, float64, ...metric
i.count++
}

func (i *testCountingFloatInstrument) IsEnabled(context.Context, ...metric.EnabledOption) bool {
return true
}

type testCountingIntInstrument struct {
count int

Expand All @@ -203,3 +207,7 @@ func (i *testCountingIntInstrument) Add(context.Context, int64, ...metric.AddOpt
func (i *testCountingIntInstrument) Record(context.Context, int64, ...metric.RecordOption) {
i.count++
}

func (i *testCountingIntInstrument) IsEnabled(context.Context, ...metric.EnabledOption) bool {
return true
}
6 changes: 6 additions & 0 deletions metric/instrument.go
Original file line number Diff line number Diff line change
Expand Up @@ -366,3 +366,9 @@ func WithAttributes(attributes ...attribute.KeyValue) MeasurementOption {
copy(cp, attributes)
return attrOpt{set: attribute.NewSet(cp...)}
}

// EnabledOption applies options to IsEnabled func.
type EnabledOption interface {
// Extend this to support EnabledOptionConfig when needed.
applyEnabledOption()
}
40 changes: 40 additions & 0 deletions metric/noop/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,55 +176,95 @@ type Int64Counter struct{ embedded.Int64Counter }
// Add performs no operation.
func (Int64Counter) Add(context.Context, int64, ...metric.AddOption) {}

// IsEnabled returns false always.
func (Int64Counter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Float64Counter is an OpenTelemetry Counter used to record float64
// measurements. It produces no telemetry.
type Float64Counter struct{ embedded.Float64Counter }

// Add performs no operation.
func (Float64Counter) Add(context.Context, float64, ...metric.AddOption) {}

// IsEnabled returns false always.
func (Float64Counter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Int64UpDownCounter is an OpenTelemetry UpDownCounter used to record int64
// measurements. It produces no telemetry.
type Int64UpDownCounter struct{ embedded.Int64UpDownCounter }

// Add performs no operation.
func (Int64UpDownCounter) Add(context.Context, int64, ...metric.AddOption) {}

// IsEnabled returns false always.
func (Int64UpDownCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Float64UpDownCounter is an OpenTelemetry UpDownCounter used to record
// float64 measurements. It produces no telemetry.
type Float64UpDownCounter struct{ embedded.Float64UpDownCounter }

// Add performs no operation.
func (Float64UpDownCounter) Add(context.Context, float64, ...metric.AddOption) {}

// IsEnabled returns false always.
func (Float64UpDownCounter) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Int64Histogram is an OpenTelemetry Histogram used to record int64
// measurements. It produces no telemetry.
type Int64Histogram struct{ embedded.Int64Histogram }

// Record performs no operation.
func (Int64Histogram) Record(context.Context, int64, ...metric.RecordOption) {}

// IsEnabled returns false always.
func (Int64Histogram) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Float64Histogram is an OpenTelemetry Histogram used to record float64
// measurements. It produces no telemetry.
type Float64Histogram struct{ embedded.Float64Histogram }

// Record performs no operation.
func (Float64Histogram) Record(context.Context, float64, ...metric.RecordOption) {}

// IsEnabled returns false always.
func (Float64Histogram) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Int64Gauge is an OpenTelemetry Gauge used to record instantaneous int64
// measurements. It produces no telemetry.
type Int64Gauge struct{ embedded.Int64Gauge }

// Record performs no operation.
func (Int64Gauge) Record(context.Context, int64, ...metric.RecordOption) {}

// IsEnabled returns false always.
func (Int64Gauge) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Float64Gauge is an OpenTelemetry Gauge used to record instantaneous float64
// measurements. It produces no telemetry.
type Float64Gauge struct{ embedded.Float64Gauge }

// Record performs no operation.
func (Float64Gauge) Record(context.Context, float64, ...metric.RecordOption) {}

// IsEnabled returns false always.
func (Float64Gauge) IsEnabled(ctx context.Context, opts ...metric.EnabledOption) bool {
return false
}

// Int64ObservableCounter is an OpenTelemetry ObservableCounter used to record
// int64 measurements. It produces no telemetry.
type Int64ObservableCounter struct {
Expand Down
28 changes: 28 additions & 0 deletions metric/syncfloat64.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ type Float64Counter interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Add(ctx context.Context, incr float64, options ...AddOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Float64CounterConfig contains options for synchronous counter instruments that
Expand Down Expand Up @@ -78,6 +85,13 @@ type Float64UpDownCounter interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Add(ctx context.Context, incr float64, options ...AddOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Float64UpDownCounterConfig contains options for synchronous counter
Expand Down Expand Up @@ -131,6 +145,13 @@ type Float64Histogram interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Record(ctx context.Context, incr float64, options ...RecordOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Float64HistogramConfig contains options for synchronous histogram
Expand Down Expand Up @@ -189,6 +210,13 @@ type Float64Gauge interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Record(ctx context.Context, value float64, options ...RecordOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Float64GaugeConfig contains options for synchronous gauge instruments that
Expand Down
28 changes: 28 additions & 0 deletions metric/syncint64.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ type Int64Counter interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Add(ctx context.Context, incr int64, options ...AddOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Int64CounterConfig contains options for synchronous counter instruments that
Expand Down Expand Up @@ -78,6 +85,13 @@ type Int64UpDownCounter interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Add(ctx context.Context, incr int64, options ...AddOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Int64UpDownCounterConfig contains options for synchronous counter
Expand Down Expand Up @@ -131,6 +145,13 @@ type Int64Histogram interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Record(ctx context.Context, incr int64, options ...RecordOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Int64HistogramConfig contains options for synchronous histogram instruments
Expand Down Expand Up @@ -189,6 +210,13 @@ type Int64Gauge interface {
// Use the WithAttributeSet (or, if performance is not a concern,
// the WithAttributes) option to include measurement attributes.
Record(ctx context.Context, value int64, options ...RecordOption)

// IsEnabled returns true if this instrument is enabled.
//
// This helps users avoid performing computationally expensive operations when
// recording measurements. The returned value cannot be cached since it
// may change over time.
IsEnabled(ctx context.Context, options ...EnabledOption) bool
}

// Int64GaugeConfig contains options for synchronous gauge instruments that
Expand Down
8 changes: 8 additions & 0 deletions sdk/metric/instrument.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,10 @@ func (i *int64Inst) Record(ctx context.Context, val int64, opts ...metric.Record
i.aggregate(ctx, val, c.Attributes())
}

func (i *int64Inst) IsEnabled(context.Context, ...metric.EnabledOption) bool {
return len(i.measures) != 0
}

func (i *int64Inst) aggregate(ctx context.Context, val int64, s attribute.Set) { // nolint:revive // okay to shadow pkg with method.
for _, in := range i.measures {
in(ctx, val, s)
Expand Down Expand Up @@ -228,6 +232,10 @@ func (i *float64Inst) Record(ctx context.Context, val float64, opts ...metric.Re
i.aggregate(ctx, val, c.Attributes())
}

func (i *float64Inst) IsEnabled(context.Context, ...metric.EnabledOption) bool {
return len(i.measures) != 0
}

func (i *float64Inst) aggregate(ctx context.Context, val float64, s attribute.Set) {
for _, in := range i.measures {
in(ctx, val, s)
Expand Down
Loading

0 comments on commit b6ed797

Please sign in to comment.