Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Resources in the SDK #552

Merged
merged 16 commits into from
Mar 20, 2020
Merged
3 changes: 2 additions & 1 deletion exporters/metric/dogstatsd/dogstatsd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
export "go.opentelemetry.io/otel/sdk/export/metric"
sdk "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
"go.opentelemetry.io/otel/sdk/resource"
)

// TestDogstatsLabels that labels are formatted in the correct style,
Expand All @@ -44,7 +45,7 @@ func TestDogstatsLabels(t *testing.T) {
ctx := context.Background()
checkpointSet := test.NewCheckpointSet(encoder)

desc := export.NewDescriptor("test.name", export.CounterKind, nil, "", "", core.Int64NumberKind)
desc := export.NewDescriptor("test.name", export.CounterKind, nil, "", "", core.Int64NumberKind, resource.Resource{})
cagg := sum.New()
_ = cagg.Update(ctx, core.NewInt64Number(123), desc)
cagg.Checkpoint(ctx, desc)
Expand Down
11 changes: 6 additions & 5 deletions exporters/metric/internal/statsd/conn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"go.opentelemetry.io/otel/exporters/metric/test"
export "go.opentelemetry.io/otel/sdk/export/metric"
sdk "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
)

// withTagsAdapter tests a dogstatsd-style statsd exporter.
Expand Down Expand Up @@ -124,13 +125,13 @@ timer.B.D:%s|ms

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())
cdesc := export.NewDescriptor(
"counter", export.CounterKind, nil, "", "", nkind)
"counter", export.CounterKind, nil, "", "", nkind, resource.Resource{})
gdesc := export.NewDescriptor(
"observer", export.ObserverKind, nil, "", "", nkind)
"observer", export.ObserverKind, nil, "", "", nkind, resource.Resource{})
mdesc := export.NewDescriptor(
"measure", export.MeasureKind, nil, "", "", nkind)
"measure", export.MeasureKind, nil, "", "", nkind, resource.Resource{})
tdesc := export.NewDescriptor(
"timer", export.MeasureKind, nil, "", unit.Milliseconds, nkind)
"timer", export.MeasureKind, nil, "", unit.Milliseconds, nkind, resource.Resource{})

labels := []core.KeyValue{
key.New("A").String("B"),
Expand Down Expand Up @@ -285,7 +286,7 @@ func TestPacketSplit(t *testing.T) {
}

checkpointSet := test.NewCheckpointSet(adapter.LabelEncoder)
desc := export.NewDescriptor("counter", export.CounterKind, nil, "", "", core.Int64NumberKind)
desc := export.NewDescriptor("counter", export.CounterKind, nil, "", "", core.Int64NumberKind, resource.Resource{})

var expected []string

Expand Down
7 changes: 4 additions & 3 deletions exporters/metric/prometheus/prometheus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"go.opentelemetry.io/otel/exporters/metric/test"
export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
)

func TestPrometheusExporter(t *testing.T) {
Expand All @@ -30,11 +31,11 @@ func TestPrometheusExporter(t *testing.T) {
checkpointSet := test.NewCheckpointSet(metric.NewDefaultLabelEncoder())

counter := export.NewDescriptor(
"counter", export.CounterKind, nil, "", "", core.Float64NumberKind)
"counter", export.CounterKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
lastValue := export.NewDescriptor(
"lastvalue", export.ObserverKind, nil, "", "", core.Float64NumberKind)
"lastvalue", export.ObserverKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
measure := export.NewDescriptor(
"measure", export.MeasureKind, nil, "", "", core.Float64NumberKind)
"measure", export.MeasureKind, nil, "", "", core.Float64NumberKind, resource.Resource{})

labels := []core.KeyValue{
key.New("A").String("B"),
Expand Down
17 changes: 9 additions & 8 deletions exporters/metric/stdout/stdout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"go.opentelemetry.io/otel/sdk/metric/aggregator/minmaxsumcount"
"go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
aggtest "go.opentelemetry.io/otel/sdk/metric/aggregator/test"
"go.opentelemetry.io/otel/sdk/resource"
)

type testFixture struct {
Expand Down Expand Up @@ -82,7 +83,7 @@ func TestStdoutTimestamp(t *testing.T) {
checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

ctx := context.Background()
desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Int64NumberKind)
desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Int64NumberKind, resource.Resource{})
lvagg := lastvalue.New()
aggtest.CheckedUpdate(t, lvagg, core.NewInt64Number(321), desc)
lvagg.Checkpoint(ctx, desc)
Expand Down Expand Up @@ -127,7 +128,7 @@ func TestStdoutCounterFormat(t *testing.T) {

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

desc := export.NewDescriptor("test.name", export.CounterKind, nil, "", "", core.Int64NumberKind)
desc := export.NewDescriptor("test.name", export.CounterKind, nil, "", "", core.Int64NumberKind, resource.Resource{})
cagg := sum.New()
aggtest.CheckedUpdate(fix.t, cagg, core.NewInt64Number(123), desc)
cagg.Checkpoint(fix.ctx, desc)
Expand All @@ -144,7 +145,7 @@ func TestStdoutLastValueFormat(t *testing.T) {

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Float64NumberKind)
desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
lvagg := lastvalue.New()
aggtest.CheckedUpdate(fix.t, lvagg, core.NewFloat64Number(123.456), desc)
lvagg.Checkpoint(fix.ctx, desc)
Expand All @@ -161,7 +162,7 @@ func TestStdoutMinMaxSumCount(t *testing.T) {

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind)
desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
magg := minmaxsumcount.New(desc)
aggtest.CheckedUpdate(fix.t, magg, core.NewFloat64Number(123.456), desc)
aggtest.CheckedUpdate(fix.t, magg, core.NewFloat64Number(876.543), desc)
Expand All @@ -181,7 +182,7 @@ func TestStdoutMeasureFormat(t *testing.T) {

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind)
desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
magg := array.New()

for i := 0; i < 1000; i++ {
Expand Down Expand Up @@ -222,7 +223,7 @@ func TestStdoutMeasureFormat(t *testing.T) {
}

func TestStdoutEmptyDataSet(t *testing.T) {
desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind)
desc := export.NewDescriptor("test.name", export.MeasureKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
for name, tc := range map[string]export.Aggregator{
"ddsketch": ddsketch.New(ddsketch.NewDefaultConfig(), desc),
"minmaxsumcount": minmaxsumcount.New(desc),
Expand Down Expand Up @@ -252,7 +253,7 @@ func TestStdoutLastValueNotSet(t *testing.T) {

checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())

desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Float64NumberKind)
desc := export.NewDescriptor("test.name", export.ObserverKind, nil, "", "", core.Float64NumberKind, resource.Resource{})
lvagg := lastvalue.New()
lvagg.Checkpoint(fix.ctx, desc)

Expand All @@ -270,7 +271,7 @@ func TestStdoutCounterWithUnspecifiedKeys(t *testing.T) {

keys := []core.Key{key.New("C"), key.New("D")}

desc := export.NewDescriptor("test.name", export.CounterKind, keys, "", "", core.Int64NumberKind)
desc := export.NewDescriptor("test.name", export.CounterKind, keys, "", "", core.Int64NumberKind, resource.Resource{})
cagg := sum.New()
aggtest.CheckedUpdate(fix.t, cagg, core.NewInt64Number(10), desc)
cagg.Checkpoint(fix.ctx, desc)
Expand Down
13 changes: 7 additions & 6 deletions exporters/otlp/internal/transform/metric_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
"go.opentelemetry.io/otel/sdk/metric/aggregator/minmaxsumcount"
sumAgg "go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
"go.opentelemetry.io/otel/sdk/resource"
)

func TestStringKeyValues(t *testing.T) {
Expand Down Expand Up @@ -144,7 +145,7 @@ func TestMinMaxSumCountMetricDescriptor(t *testing.T) {
}
mmsc.Checkpoint(ctx, &metricsdk.Descriptor{})
for _, test := range tests {
desc := metricsdk.NewDescriptor(test.name, test.metricKind, test.keys, test.description, test.unit, test.numberKind)
desc := metricsdk.NewDescriptor(test.name, test.metricKind, test.keys, test.description, test.unit, test.numberKind, resource.Resource{})
labels := metricsdk.NewLabels(test.labels, "", nil)
got, err := minMaxSumCount(desc, labels, mmsc)
if assert.NoError(t, err) {
Expand All @@ -154,7 +155,7 @@ func TestMinMaxSumCountMetricDescriptor(t *testing.T) {
}

func TestMinMaxSumCountDatapoints(t *testing.T) {
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Int64NumberKind)
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Int64NumberKind, resource.Resource{})
labels := metricsdk.NewLabels([]core.KeyValue{}, "", nil)
mmsc := minmaxsumcount.New(desc)
assert.NoError(t, mmsc.Update(context.Background(), 1, desc))
Expand Down Expand Up @@ -241,7 +242,7 @@ func TestSumMetricDescriptor(t *testing.T) {
}

for _, test := range tests {
desc := metricsdk.NewDescriptor(test.name, test.metricKind, test.keys, test.description, test.unit, test.numberKind)
desc := metricsdk.NewDescriptor(test.name, test.metricKind, test.keys, test.description, test.unit, test.numberKind, resource.Resource{})
labels := metricsdk.NewLabels(test.labels, "", nil)
got, err := sum(desc, labels, sumAgg.New())
if assert.NoError(t, err) {
Expand All @@ -250,8 +251,8 @@ func TestSumMetricDescriptor(t *testing.T) {
}
}

func TestSumInt64Datapoints(t *testing.T) {
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Int64NumberKind)
func TestSumInt64DataPoints(t *testing.T) {
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Int64NumberKind, resource.Resource{})
labels := metricsdk.NewLabels([]core.KeyValue{}, "", nil)
s := sumAgg.New()
assert.NoError(t, s.Update(context.Background(), core.Number(1), desc))
Expand All @@ -265,7 +266,7 @@ func TestSumInt64Datapoints(t *testing.T) {
}

func TestSumFloat64Datapoints(t *testing.T) {
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Float64NumberKind)
desc := metricsdk.NewDescriptor("", metricsdk.MeasureKind, []core.Key{}, "", unit.Dimensionless, core.Float64NumberKind, resource.Resource{})
labels := metricsdk.NewLabels([]core.KeyValue{}, "", nil)
s := sumAgg.New()
assert.NoError(t, s.Update(context.Background(), core.NewFloat64Number(1), desc))
Expand Down
3 changes: 3 additions & 0 deletions sdk/export/metric/aggregator/aggregator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
"go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue"
"go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
"go.opentelemetry.io/otel/sdk/resource"
)

func TestInconsistentMergeErr(t *testing.T) {
Expand Down Expand Up @@ -79,6 +80,7 @@ func TestRangeTest(t *testing.T) {
"",
"",
nkind,
resource.Resource{},
)
testRangeNegative(t, desc)
})
Expand All @@ -100,6 +102,7 @@ func TestNaNTest(t *testing.T) {
"",
"",
nkind,
resource.Resource{},
)
testRangeNaN(t, desc)
}
Expand Down
10 changes: 10 additions & 0 deletions sdk/export/metric/metric.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (

"go.opentelemetry.io/otel/api/core"
"go.opentelemetry.io/otel/api/unit"
"go.opentelemetry.io/otel/sdk/resource"
)

// Batcher is responsible for deciding which kind of aggregation to
Expand Down Expand Up @@ -309,6 +310,7 @@ type Descriptor struct {
description string
unit unit.Unit
numberKind core.NumberKind
resource resource.Resource
}

// NewDescriptor builds a new descriptor, for use by `Meter`
Expand All @@ -324,6 +326,7 @@ func NewDescriptor(
description string,
unit unit.Unit,
numberKind core.NumberKind,
resource resource.Resource,
) *Descriptor {
return &Descriptor{
name: name,
Expand All @@ -332,6 +335,7 @@ func NewDescriptor(
description: description,
unit: unit,
numberKind: numberKind,
resource: resource,
}
}

Expand Down Expand Up @@ -370,3 +374,9 @@ func (d *Descriptor) Unit() unit.Unit {
func (d *Descriptor) NumberKind() core.NumberKind {
return d.numberKind
}

// Resource returns the Resource describing the entity for whom the metric
// instrument measures.
func (d *Descriptor) Resource() resource.Resource {
return d.resource
}
3 changes: 2 additions & 1 deletion sdk/metric/aggregator/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
ottest "go.opentelemetry.io/otel/internal/testing"
export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
"go.opentelemetry.io/otel/sdk/resource"
)

const Magnitude = 1000
Expand Down Expand Up @@ -54,7 +55,7 @@ func newProfiles() []Profile {
}

func NewAggregatorTest(mkind export.Kind, nkind core.NumberKind) *export.Descriptor {
return export.NewDescriptor("test.name", mkind, nil, "", "", nkind)
return export.NewDescriptor("test.name", mkind, nil, "", "", nkind, resource.Resource{})
}

func RunProfiles(t *testing.T, f func(*testing.T, Profile)) {
Expand Down
9 changes: 5 additions & 4 deletions sdk/metric/batcher/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
sdk "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue"
"go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
"go.opentelemetry.io/otel/sdk/resource"
)

type (
Expand All @@ -43,14 +44,14 @@ type (
var (
// LastValueADesc and LastValueBDesc group by "G"
LastValueADesc = export.NewDescriptor(
"lastvalue.a", export.ObserverKind, []core.Key{key.New("G")}, "", "", core.Int64NumberKind)
"lastvalue.a", export.ObserverKind, []core.Key{key.New("G")}, "", "", core.Int64NumberKind, resource.Resource{})
LastValueBDesc = export.NewDescriptor(
"lastvalue.b", export.ObserverKind, []core.Key{key.New("G")}, "", "", core.Int64NumberKind)
"lastvalue.b", export.ObserverKind, []core.Key{key.New("G")}, "", "", core.Int64NumberKind, resource.Resource{})
// CounterADesc and CounterBDesc group by "C"
CounterADesc = export.NewDescriptor(
"sum.a", export.CounterKind, []core.Key{key.New("C")}, "", "", core.Int64NumberKind)
"sum.a", export.CounterKind, []core.Key{key.New("C")}, "", "", core.Int64NumberKind, resource.Resource{})
CounterBDesc = export.NewDescriptor(
"sum.b", export.CounterKind, []core.Key{key.New("C")}, "", "", core.Int64NumberKind)
"sum.b", export.CounterKind, []core.Key{key.New("C")}, "", "", core.Int64NumberKind, resource.Resource{})

// SdkEncoder uses a non-standard encoder like K1~V1&K2~V2
SdkEncoder = &Encoder{}
Expand Down
50 changes: 50 additions & 0 deletions sdk/metric/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package metric

import "go.opentelemetry.io/otel/sdk/resource"

// Config contains configuration for an SDK.
type Config struct {
// ErrorHandler is the function called when the SDK encounters an error.
//
// This option can be overridden after instantiation of the SDK
// with the `SetErrorHandler` method.
ErrorHandler ErrorHandler

// Resource is the OpenTelemetry resource associated with all Meters
// created by the SDK.
Resource resource.Resource
}

// Option is the interface that applies the value to a configuration option.
type Option interface {
// Apply sets the Option value of a Config.
Apply(*Config)
}

// WithErrorHandler sets the ErrorHandler configuration option of a Config.
func WithErrorHandler(fn ErrorHandler) Option {
return errorHandlerOption(fn)
}

type errorHandlerOption ErrorHandler

func (o errorHandlerOption) Apply(config *Config) {
if config == nil {
return
}
config.ErrorHandler = ErrorHandler(o)
}

// WithResource sets the Resource configuration option of a Config.
func WithResource(r resource.Resource) Option {
return resourceOption(r)
}

type resourceOption resource.Resource

func (o resourceOption) Apply(config *Config) {
if config == nil {
return
}
config.Resource = resource.Resource(o)
}
Loading