| // Copyright 2021 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package otel_test |
| |
| import ( |
| "context" |
| "testing" |
| "time" |
| |
| "github.com/google/go-cmp/cmp" |
| "go.opentelemetry.io/otel/attribute" |
| "go.opentelemetry.io/otel/metric/metrictest" |
| "go.opentelemetry.io/otel/metric/number" |
| "golang.org/x/exp/event" |
| "golang.org/x/exp/event/otel" |
| ) |
| |
| func TestMeter(t *testing.T) { |
| ctx := context.Background() |
| mp := metrictest.NewMeterProvider() |
| mh := otel.NewMetricHandler(mp.Meter("test")) |
| ctx = event.WithExporter(ctx, event.NewExporter(mh, nil)) |
| recordMetrics(ctx) |
| |
| lib := metrictest.Library{InstrumentationName: "test"} |
| emptyLabels := map[attribute.Key]attribute.Value{} |
| got := metrictest.AsStructs(mp.MeasurementBatches) |
| want := []metrictest.Measured{ |
| { |
| Name: "golang.org/x/exp/event/otel_test/hits", |
| Number: number.NewInt64Number(8), |
| Labels: emptyLabels, |
| Library: lib, |
| }, |
| { |
| Name: "golang.org/x/exp/event/otel_test/temp", |
| Number: number.NewFloat64Number(-100), |
| Labels: map[attribute.Key]attribute.Value{"location": attribute.StringValue("Mare Imbrium")}, |
| Library: lib, |
| }, |
| { |
| Name: "golang.org/x/exp/event/otel_test/latency", |
| Number: number.NewInt64Number(int64(1248 * time.Millisecond)), |
| Labels: emptyLabels, |
| Library: lib, |
| }, |
| { |
| Name: "golang.org/x/exp/event/otel_test/latency", |
| Number: number.NewInt64Number(int64(1255 * time.Millisecond)), |
| Labels: emptyLabels, |
| Library: lib, |
| }, |
| } |
| |
| if diff := cmp.Diff(want, got, cmp.Comparer(valuesEqual)); diff != "" { |
| t.Errorf("mismatch (-want, got):\n%s", diff) |
| } |
| } |
| |
| func valuesEqual(v1, v2 attribute.Value) bool { |
| return v1.AsInterface() == v2.AsInterface() |
| } |
| |
| func recordMetrics(ctx context.Context) { |
| c := event.NewCounter("hits", &event.MetricOptions{Description: "Earth meteorite hits"}) |
| g := event.NewFloatGauge("temp", &event.MetricOptions{Description: "moon surface temperature in Kelvin"}) |
| d := event.NewDuration("latency", &event.MetricOptions{Description: "Earth-moon comms lag, milliseconds"}) |
| |
| c.Record(ctx, 8) |
| g.Record(ctx, -100, event.String("location", "Mare Imbrium")) |
| d.Record(ctx, 1248*time.Millisecond) |
| d.Record(ctx, 1255*time.Millisecond) |
| } |