Skip to content

Commit

Permalink
Drop the gauge instrument (#537)
Browse files Browse the repository at this point in the history
* drop gauge instrument

* Restore the benchmark and stress test for lastvalue aggregator, but remove monotonic last-value support

* Rename gauge->lastvalue and remove remaining uses of the word 'gauge'

Co-authored-by: Krzesimir Nowak <krzesimir@kinvolk.io>
jmacd and krnowak authored Mar 10, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent fe0099f commit 9674c81
Showing 33 changed files with 332 additions and 1,047 deletions.
3 changes: 0 additions & 3 deletions api/global/internal/benchmark_test.go
Original file line number Diff line number Diff line change
@@ -14,7 +14,6 @@ import (
sdk "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregator/counter"
"go.opentelemetry.io/otel/sdk/metric/aggregator/ddsketch"
"go.opentelemetry.io/otel/sdk/metric/aggregator/gauge"
"go.opentelemetry.io/otel/sdk/metric/aggregator/minmaxsumcount"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
@@ -41,8 +40,6 @@ func (*benchFixture) AggregatorFor(descriptor *export.Descriptor) export.Aggrega
switch descriptor.MetricKind() {
case export.CounterKind:
return counter.New()
case export.GaugeKind:
return gauge.New()
case export.MeasureKind:
if strings.HasSuffix(descriptor.Name(), "minmaxsumcount") {
return minmaxsumcount.New(descriptor)
14 changes: 0 additions & 14 deletions api/global/internal/meter.go
Original file line number Diff line number Diff line change
@@ -35,7 +35,6 @@ type metricKind int8

const (
counterKind metricKind = iota
gaugeKind
measureKind
)

@@ -200,11 +199,6 @@ func newInstDelegate(m metric.Meter, name string, mkind metricKind, nkind core.N
return m.NewInt64Counter(name, opts.([]metric.CounterOptionApplier)...).Impl()
}
return m.NewFloat64Counter(name, opts.([]metric.CounterOptionApplier)...).Impl()
case gaugeKind:
if nkind == core.Int64NumberKind {
return m.NewInt64Gauge(name, opts.([]metric.GaugeOptionApplier)...).Impl()
}
return m.NewFloat64Gauge(name, opts.([]metric.GaugeOptionApplier)...).Impl()
case measureKind:
if nkind == core.Int64NumberKind {
return m.NewInt64Measure(name, opts.([]metric.MeasureOptionApplier)...).Impl()
@@ -386,14 +380,6 @@ func (m *meter) NewFloat64Counter(name string, opts ...metric.CounterOptionAppli
return metric.WrapFloat64CounterInstrument(m.newInst(name, counterKind, core.Float64NumberKind, opts))
}

func (m *meter) NewInt64Gauge(name string, opts ...metric.GaugeOptionApplier) metric.Int64Gauge {
return metric.WrapInt64GaugeInstrument(m.newInst(name, gaugeKind, core.Int64NumberKind, opts))
}

func (m *meter) NewFloat64Gauge(name string, opts ...metric.GaugeOptionApplier) metric.Float64Gauge {
return metric.WrapFloat64GaugeInstrument(m.newInst(name, gaugeKind, core.Float64NumberKind, opts))
}

func (m *meter) NewInt64Measure(name string, opts ...metric.MeasureOptionApplier) metric.Int64Measure {
return metric.WrapInt64MeasureInstrument(m.newInst(name, measureKind, core.Int64NumberKind, opts))
}
83 changes: 22 additions & 61 deletions api/global/internal/meter_test.go
Original file line number Diff line number Diff line change
@@ -34,10 +34,6 @@ func TestDirect(t *testing.T) {
counter.Add(ctx, 1, labels1)
counter.Add(ctx, 1, labels1)

gauge := meter1.NewInt64Gauge("test.gauge")
gauge.Set(ctx, 1, labels2)
gauge.Set(ctx, 2, labels2)

measure := meter1.NewFloat64Measure("test.measure")
measure.Record(ctx, 1, labels1)
measure.Record(ctx, 2, labels1)
@@ -60,13 +56,12 @@ func TestDirect(t *testing.T) {
global.SetMeterProvider(sdk)

counter.Add(ctx, 1, labels1)
gauge.Set(ctx, 3, labels2)
measure.Record(ctx, 3, labels1)
second.Record(ctx, 3, labels3)

mock := sdk.Meter("test1").(*metrictest.Meter)
mock.RunObservers()
require.Len(t, mock.MeasurementBatches, 7)
require.Len(t, mock.MeasurementBatches, 6)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
@@ -78,62 +73,53 @@ func TestDirect(t *testing.T) {
mock.MeasurementBatches[0].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals2.Key: lvals2.Value,
lvals1.Key: lvals1.Value,
}, mock.MeasurementBatches[1].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[1].Measurements, 1)
require.Equal(t, int64(3),
mock.MeasurementBatches[1].Measurements[0].Number.AsInt64())
require.Equal(t, "test.gauge",
require.InDelta(t, float64(3),
mock.MeasurementBatches[1].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.measure",
mock.MeasurementBatches[1].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
}, mock.MeasurementBatches[2].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[2].Measurements, 1)
require.InDelta(t, float64(3),
require.InDelta(t, float64(1),
mock.MeasurementBatches[2].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.measure",
require.Equal(t, "test.observer.float",
mock.MeasurementBatches[2].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
lvals2.Key: lvals2.Value,
}, mock.MeasurementBatches[3].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[3].Measurements, 1)
require.InDelta(t, float64(1),
require.InDelta(t, float64(2),
mock.MeasurementBatches[3].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.observer.float",
mock.MeasurementBatches[3].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals2.Key: lvals2.Value,
lvals1.Key: lvals1.Value,
}, mock.MeasurementBatches[4].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[4].Measurements, 1)
require.InDelta(t, float64(2),
mock.MeasurementBatches[4].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.observer.float",
require.Equal(t, int64(1),
mock.MeasurementBatches[4].Measurements[0].Number.AsInt64())
require.Equal(t, "test.observer.int",
mock.MeasurementBatches[4].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
lvals2.Key: lvals2.Value,
}, mock.MeasurementBatches[5].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[5].Measurements, 1)
require.Equal(t, int64(1),
require.Equal(t, int64(2),
mock.MeasurementBatches[5].Measurements[0].Number.AsInt64())
require.Equal(t, "test.observer.int",
mock.MeasurementBatches[5].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals2.Key: lvals2.Value,
}, mock.MeasurementBatches[6].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[6].Measurements, 1)
require.Equal(t, int64(2),
mock.MeasurementBatches[6].Measurements[0].Number.AsInt64())
require.Equal(t, "test.observer.int",
mock.MeasurementBatches[6].Measurements[0].Instrument.Name)

// This tests the second Meter instance
mock = sdk.Meter("test2").(*metrictest.Meter)
require.Len(t, mock.MeasurementBatches, 1)
@@ -158,19 +144,12 @@ func TestBound(t *testing.T) {
glob := global.MeterProvider().Meter("test")
lvals1 := key.String("A", "B")
labels1 := glob.Labels(lvals1)
lvals2 := key.String("C", "D")
labels2 := glob.Labels(lvals2)

counter := glob.NewFloat64Counter("test.counter")
boundC := counter.Bind(labels1)
boundC.Add(ctx, 1)
boundC.Add(ctx, 1)

gauge := glob.NewFloat64Gauge("test.gauge")
boundG := gauge.Bind(labels2)
boundG.Set(ctx, 1)
boundG.Set(ctx, 2)

measure := glob.NewInt64Measure("test.measure")
boundM := measure.Bind(labels1)
boundM.Record(ctx, 1)
@@ -180,43 +159,31 @@ func TestBound(t *testing.T) {
global.SetMeterProvider(sdk)

boundC.Add(ctx, 1)
boundG.Set(ctx, 3)
boundM.Record(ctx, 3)

mock := sdk.Meter("test").(*metrictest.Meter)
require.Equal(t, 3, len(mock.MeasurementBatches))
require.Len(t, mock.MeasurementBatches, 2)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
}, mock.MeasurementBatches[0].LabelSet.Labels)
require.Equal(t, 1, len(mock.MeasurementBatches[0].Measurements))
require.Len(t, mock.MeasurementBatches[0].Measurements, 1)
require.InDelta(t, float64(1),
mock.MeasurementBatches[0].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.counter",
mock.MeasurementBatches[0].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals2.Key: lvals2.Value,
}, mock.MeasurementBatches[1].LabelSet.Labels)
require.Equal(t, 1, len(mock.MeasurementBatches[1].Measurements))
require.InDelta(t, float64(3),
mock.MeasurementBatches[1].Measurements[0].Number.AsFloat64(),
0.01)
require.Equal(t, "test.gauge",
mock.MeasurementBatches[1].Measurements[0].Instrument.Name)

require.Equal(t, map[core.Key]core.Value{
lvals1.Key: lvals1.Value,
}, mock.MeasurementBatches[2].LabelSet.Labels)
require.Equal(t, 1, len(mock.MeasurementBatches[2].Measurements))
}, mock.MeasurementBatches[1].LabelSet.Labels)
require.Len(t, mock.MeasurementBatches[1].Measurements, 1)
require.Equal(t, int64(3),
mock.MeasurementBatches[2].Measurements[0].Number.AsInt64())
mock.MeasurementBatches[1].Measurements[0].Number.AsInt64())
require.Equal(t, "test.measure",
mock.MeasurementBatches[2].Measurements[0].Instrument.Name)
mock.MeasurementBatches[1].Measurements[0].Instrument.Name)

boundC.Unbind()
boundG.Unbind()
boundM.Unbind()
}

@@ -227,23 +194,17 @@ func TestUnbind(t *testing.T) {
glob := global.MeterProvider().Meter("test")
lvals1 := key.New("A").String("B")
labels1 := glob.Labels(lvals1)
lvals2 := key.New("C").String("D")
labels2 := glob.Labels(lvals2)

counter := glob.NewFloat64Counter("test.counter")
boundC := counter.Bind(labels1)

gauge := glob.NewFloat64Gauge("test.gauge")
boundG := gauge.Bind(labels2)

measure := glob.NewInt64Measure("test.measure")
boundM := measure.Bind(labels1)

observerInt := glob.RegisterInt64Observer("test.observer.int", nil)
observerFloat := glob.RegisterFloat64Observer("test.observer.float", nil)

boundC.Unbind()
boundG.Unbind()
boundM.Unbind()
observerInt.Unregister()
observerFloat.Unregister()
Loading

0 comments on commit 9674c81

Please sign in to comment.