From 1fb5140adc2be0c53b42fcf374bbbbec956c3baf Mon Sep 17 00:00:00 2001 From: Joshua MacDonald Date: Wed, 15 Feb 2023 09:22:46 -0800 Subject: [PATCH] Update to OTel-Go Metrics API @ v0.35 (#381) --- CHANGELOG.md | 10 ++ VERSION | 2 +- examples/metrics/metrics.go | 84 ++++----- go.mod | 52 +++--- go.sum | 101 +++++------ launcher/version.go | 2 +- lightstep/instrumentation/cputime/cputime.go | 27 ++- lightstep/instrumentation/go.mod | 12 +- lightstep/instrumentation/go.sum | 24 +-- lightstep/instrumentation/host/host.go | 72 ++++---- lightstep/instrumentation/runtime/builtin.go | 41 ++--- lightstep/sdk/metric/asyncinst.go | 137 +++++++++++--- lightstep/sdk/metric/asyncinst_test.go | 164 +++++++++++++++-- lightstep/sdk/metric/benchmark_test.go | 20 +-- lightstep/sdk/metric/example/example_test.go | 2 +- lightstep/sdk/metric/example/go.mod | 24 +-- lightstep/sdk/metric/example/go.sum | 55 +++--- .../internal/transform/metric_test.go | 3 +- .../otlpmetric/otlpmetricgrpc/example_test.go | 42 ----- lightstep/sdk/metric/go.mod | 13 +- lightstep/sdk/metric/go.sum | 26 ++- .../sdk/metric/internal/asyncstate/async.go | 63 ++++--- .../metric/internal/asyncstate/async_test.go | 169 +++++++++--------- .../metric/internal/asyncstate/callback.go | 41 +++-- .../metric/internal/asyncstate/observer.go | 66 ------- .../sdk/metric/internal/syncstate/counter.go | 50 ------ .../metric/internal/syncstate/histogram.go | 48 ----- .../sdk/metric/internal/syncstate/sync.go | 33 ++-- .../metric/internal/syncstate/sync_test.go | 97 ++++------ lightstep/sdk/metric/internal/test/test.go | 11 +- .../internal/viewstate/viewstate_test.go | 96 +++++----- lightstep/sdk/metric/meter.go | 114 +++++++----- lightstep/sdk/metric/provider_test.go | 10 +- lightstep/sdk/metric/syncinst.go | 71 +++++--- lightstep/sdk/metric/syncinst_test.go | 12 +- pipelines/go.mod | 52 +++--- pipelines/go.sum | 101 +++++------ pipelines/metrics_test.go | 4 +- 38 files changed, 992 insertions(+), 959 deletions(-) delete mode 100644 lightstep/sdk/metric/exporters/otlp/otlpmetric/otlpmetricgrpc/example_test.go delete mode 100644 lightstep/sdk/metric/internal/asyncstate/observer.go delete mode 100644 lightstep/sdk/metric/internal/syncstate/counter.go delete mode 100644 lightstep/sdk/metric/internal/syncstate/histogram.go diff --git a/CHANGELOG.md b/CHANGELOG.md index e9e1d67f..ab6b0a97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,16 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## Unreleased +## [1.13.0](https://github.com/lightstep/otel-launcher-go/releases/tag/v1.13.0) - 2022-02-15) + +- Updates OTel-Go version dependencies to `trace@v1.12.0`, `metrics@v0.35.0`, + `contrib-trace@v1.13.0`, `contrib-metrics@v0.38.0`: + - Note the corresponding metrics API changes are 🛑 [BREAKING] + between releases `v0.35.0` and `v0.36.0`. Because this release + depends on metrics API `v0.35.0` it continues to support the + deprecated APIs. The next minor version of this repository will + update the dependency to `v0.36.0` or later. [#381](https://github.com/lightstep/otel-launcher-go/pull/381) + ## [1.12.1](https://github.com/lightstep/otel-launcher-go/releases/tag/v1.12.1) - 2022-02-13) - Replace a RWMutex with Mutex. [#378](https://github.com/lightstep/otel-launcher-go/pull/378) diff --git a/VERSION b/VERSION index f8f4f03b..feaae22b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.12.1 +1.13.0 diff --git a/examples/metrics/metrics.go b/examples/metrics/metrics.go index 61edf4ed..8d9ab793 100644 --- a/examples/metrics/metrics.go +++ b/examples/metrics/metrics.go @@ -52,10 +52,10 @@ func main() { // There are 2 example Gauge instruments (one a Gaussian, one // a Sine wave), and one Histogram. - c1, _ := meter.SyncInt64().Counter(prefix + "counter") - c2, _ := meter.SyncInt64().UpDownCounter(prefix + "updowncounter") - hist, _ := meter.SyncFloat64().Histogram(prefix + "histogram") - mmsc, _ := meter.SyncFloat64().Histogram(prefix + "mmsc", + c1, _ := meter.Int64Counter(prefix + "counter") + c2, _ := meter.Int64UpDownCounter(prefix + "updowncounter") + hist, _ := meter.Float64Histogram(prefix + "histogram") + mmsc, _ := meter.Float64Histogram(prefix+"mmsc", instrument.WithDescription(`{ "aggregation": "minmaxsumcount" }`), @@ -70,7 +70,7 @@ func main() { mult *= mult for i := 0; i < 10000; i++ { - value := math.Abs(mult*(100+rand.NormFloat64()*100)) + value := math.Abs(mult * (100 + rand.NormFloat64()*100)) hist.Record(ctx, value) mmsc.Record(ctx, value) } @@ -81,61 +81,61 @@ func main() { startTime := time.Now() - counterObserver, _ := meter.AsyncInt64().Counter( - prefix + "counterobserver", - ) - - err := meter.RegisterCallback([]instrument.Asynchronous{counterObserver}, - func(ctx context.Context) { - counterObserver.Observe(ctx, int64(time.Since(startTime).Seconds())) - }, + _, err := meter.Int64ObservableCounter( + prefix+"counterobserver", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(int64(time.Since(startTime).Seconds())) + return nil + }, + ), ) if err != nil { fmt.Printf("%v", err) } - updownCounterObserver, _ := meter.AsyncInt64().UpDownCounter( - prefix + "updowncounterobserver", - ) - - err = meter.RegisterCallback([]instrument.Asynchronous{updownCounterObserver}, - func(ctx context.Context) { - updownCounterObserver.Observe(ctx, -int64(time.Since(startTime).Seconds())) - }, + _, err = meter.Int64ObservableUpDownCounter( + prefix+"updowncounterobserver", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(-int64(time.Since(startTime).Seconds())) + return nil + }, + ), ) if err != nil { fmt.Printf("%v", err) } - gauge, _ := meter.AsyncInt64().Gauge( - prefix + "gauge", - ) - - err = meter.RegisterCallback([]instrument.Asynchronous{gauge}, - func(ctx context.Context) { - gauge.Observe(ctx, int64(50+rand.NormFloat64()*50)) - }, + _, err = meter.Int64ObservableGauge( + prefix+"gauge", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(int64(50 + rand.NormFloat64()*50)) + return nil + }, + ), ) if err != nil { fmt.Printf("%v", err) } - sineWave, _ := meter.AsyncFloat64().Gauge( - prefix + "sine_wave", - ) - - err = meter.RegisterCallback([]instrument.Asynchronous{sineWave}, - func(ctx context.Context) { - secs := float64(time.Now().UnixNano()) / float64(time.Second) - - sineWave.Observe(ctx, math.Sin(secs/(50*math.Pi)), attribute.String("period", "fastest")) - sineWave.Observe(ctx, math.Sin(secs/(200*math.Pi)), attribute.String("period", "fast")) - sineWave.Observe(ctx, math.Sin(secs/(1000*math.Pi)), attribute.String("period", "regular")) - sineWave.Observe(ctx, math.Sin(secs/(5000*math.Pi)), attribute.String("period", "slow")) - }, + _, err = meter.Float64ObservableGauge( + prefix+"sine_wave", + instrument.WithFloat64Callback( + func(ctx context.Context, obs instrument.Float64Observer) error { + secs := float64(time.Now().UnixNano()) / float64(time.Second) + + obs.Observe(math.Sin(secs/(50*math.Pi)), attribute.String("period", "fastest")) + obs.Observe(math.Sin(secs/(200*math.Pi)), attribute.String("period", "fast")) + obs.Observe(math.Sin(secs/(1000*math.Pi)), attribute.String("period", "regular")) + obs.Observe(math.Sin(secs/(5000*math.Pi)), attribute.String("period", "slow")) + return nil + }, + ), ) if err != nil { diff --git a/go.mod b/go.mod index 173ee4b1..1012615a 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module github.com/lightstep/otel-launcher-go go 1.18 require ( - github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.12.1 - github.com/lightstep/otel-launcher-go/pipelines v1.12.1 + github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.13.0 + github.com/lightstep/otel-launcher-go/pipelines v1.13.0 github.com/sethvargo/go-envconfig v0.8.3 github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/otel v1.11.2 - go.opentelemetry.io/otel/metric v0.34.0 - go.opentelemetry.io/otel/sdk v1.11.2 - go.opentelemetry.io/otel/trace v1.11.2 + go.opentelemetry.io/otel v1.12.0 + go.opentelemetry.io/otel/metric v0.35.0 + go.opentelemetry.io/otel/sdk v1.12.0 + go.opentelemetry.io/otel/trace v1.12.0 ) require ( @@ -23,32 +23,32 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/lightstep/go-expohisto v1.0.0 // indirect - github.com/lightstep/otel-launcher-go/lightstep/instrumentation v1.12.1 // indirect + github.com/lightstep/otel-launcher-go/lightstep/instrumentation v1.13.0 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/shirou/gopsutil/v3 v3.22.9 // indirect - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.1 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.opentelemetry.io/contrib/instrumentation/host v0.36.4 // indirect - go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.12.0 // indirect - go.opentelemetry.io/contrib/propagators/ot v1.12.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 // indirect - go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect + go.opentelemetry.io/contrib/instrumentation/host v0.38.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.13.0 // indirect + go.opentelemetry.io/contrib/propagators/ot v1.13.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0 // indirect + go.opentelemetry.io/otel/sdk/metric v0.35.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/net v0.2.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect - google.golang.org/grpc v1.51.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.5.0 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect + google.golang.org/grpc v1.52.3 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 39e672d9..de69cce9 100644 --- a/go.sum +++ b/go.sum @@ -50,7 +50,6 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -63,7 +62,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -161,8 +159,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/sethvargo/go-envconfig v0.8.3 h1:dXyUrDCJvCm3ybP7yNpiux93qoSORvuH23bdsgFfiJ0= github.com/sethvargo/go-envconfig v0.8.3/go.mod h1:Iz1Gy1Sf3T64TQlJSvee81qDhf7YIlt8GMUX6yyNFs0= -github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4= +github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -175,10 +173,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -189,42 +187,42 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/contrib/instrumentation/host v0.36.4 h1:2D0q/69KewnkCkOI9I9uXgi1XQXvwQIfMebMcPft0no= -go.opentelemetry.io/contrib/instrumentation/host v0.36.4/go.mod h1:IQdse+GFHec/g2M4wtj6cE4uA5PJGQjjXP/602LjHBQ= -go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4 h1:7AY5NdRzyU5s1ek3E4VK3FBnPtQ6La1i7sIn9hNgjsk= -go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4/go.mod h1:yFSLOnffweT7Es+IzY1DF5KP0xa2Wl15SJfKqAyDXq8= -go.opentelemetry.io/contrib/propagators/b3 v1.12.0 h1:OtfTF8bneN8qTeo/j92kcvc0iDDm4bm/c3RzaUJfiu0= -go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= -go.opentelemetry.io/contrib/propagators/ot v1.12.0 h1:6yNXAAQW08uIwgQKQvGC/0/5KkUCZmOcwSjj8zYg1ZU= -go.opentelemetry.io/contrib/propagators/ot v1.12.0/go.mod h1:t2n1RTxGm14/AEMSELd0jJo3NBjeEHnDtCRYXKTl0Ak= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 h1:fqR1kli93643au1RKo0Uma3d2aPQKT+WBKfTSBaKbOc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLDX+sYK64rHb1FPhpn0UtxF+ouX1uhyJE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 h1:ERwKPn9Aer7Gxsc0+ZlutlH1bEEAUXAUhqm3Y45ABbk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY= -go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= -go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= -go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/contrib/instrumentation/host v0.38.0 h1:UAL4VwsGD8I87v0PUnlNvNoDK9biur6BavY6hZyHRtE= +go.opentelemetry.io/contrib/instrumentation/host v0.38.0/go.mod h1:tVaeBxRJPU0PrChJnlb4kWolV8jgzNLonwFoa1j8JAM= +go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0 h1:uTd4XAyfZ51V5w+ZOCFPiNgzVN2Yp3ibNYKvZ7hWViM= +go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0/go.mod h1:LYI0Tb+eGfyp/IRpjSSERc3rv/3FT/IjqUeNNTZdJRQ= +go.opentelemetry.io/contrib/propagators/b3 v1.13.0 h1:f17PBmZK60RoHvOpJVqEka8oS2EXjpjHquESD/8zZ50= +go.opentelemetry.io/contrib/propagators/b3 v1.13.0/go.mod h1:zy2hz1TpGUoJzSwlBchVGvVAFQS8s2pglKLbrAFZ+Sc= +go.opentelemetry.io/contrib/propagators/ot v1.13.0 h1:tHWNd0WRS6w9keZoZg9aF3zYohdaBacQfojPYZJgATQ= +go.opentelemetry.io/contrib/propagators/ot v1.13.0/go.mod h1:R6Op9T6LxNaMRVlGD0wVwz40LSsAq296CXiEydKLQBU= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 h1:pa05sNT/P8OsIQ8mPZKTIyiBuzS/xDGLVx+DCt0y6Vs= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0 h1:KPV7w2qbszG6XnudnWDffM4CI+KjCYajryGrhoReBR4= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0/go.mod h1:HKkSo2BOMO2CUdoIUuc/e4aLeMbeZaj+gNgjBj/Qdzk= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0 h1:QgnDVvLLDiLloTGHyP8wIyWtDXMx/ZHg9qNQaofry2s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0/go.mod h1:BTWTNRCV2jdeEaKP+QJWD9g86QnFzxhZfsQZ1w7cSx4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 h1:ZVqtSAxrR4+ofzayuww0/EKamCjjnwnXTMRZzMudJoU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0/go.mod h1:IlaGLENJkAl9+Xoo3J0unkdOwtL+rmqZ3ryMjUtYA94= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0 h1:+tsVdWosoqDfX6cdHAeacZozjQS94ySBd+aUXFwnNKA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0/go.mod h1:jSqjV+Knu1Jyvh+l3fx7V210Ev3HHgNQAi8YqpXaQP8= +go.opentelemetry.io/otel/metric v0.35.0 h1:aPT5jk/w7F9zW51L7WgRqNKDElBdyRLGuBtI5MX34e8= +go.opentelemetry.io/otel/metric v0.35.0/go.mod h1:qAcbhaTRFU6uG8QM7dDo7XvFsWcugziq/5YI065TokQ= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/sdk/metric v0.35.0 h1:gryV4W5GzpOhKK48/lZb8ldyWIs3DRugSVlQZmCwELA= +go.opentelemetry.io/otel/sdk/metric v0.35.0/go.mod h1:eDyp1GxSiwV98kr7w4pzrszQh/eze9MqBqPd2bCPmyE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -286,10 +284,9 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -331,16 +328,13 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -348,8 +342,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -450,8 +444,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -468,9 +462,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -484,7 +477,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -494,7 +486,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/launcher/version.go b/launcher/version.go index 1f6b623c..db2fc120 100644 --- a/launcher/version.go +++ b/launcher/version.go @@ -14,4 +14,4 @@ package launcher -const version = "1.12.1" +const version = "1.13.0" diff --git a/lightstep/instrumentation/cputime/cputime.go b/lightstep/instrumentation/cputime/cputime.go index 53c08cee..37a0de7f 100644 --- a/lightstep/instrumentation/cputime/cputime.go +++ b/lightstep/instrumentation/cputime/cputime.go @@ -22,7 +22,6 @@ import ( "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/global" "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/asyncfloat64" ) // processStartTime should be initialized before the first GC, ideally. @@ -91,11 +90,11 @@ func (c *cputime) register() error { var ( err error - processCPUTime asyncfloat64.Counter - processUptime asyncfloat64.UpDownCounter + processCPUTime instrument.Float64ObservableCounter + processUptime instrument.Float64ObservableUpDownCounter ) - if processCPUTime, err = c.meter.AsyncFloat64().Counter( + if processCPUTime, err = c.meter.Float64ObservableCounter( "process.cpu.time", instrument.WithUnit("s"), instrument.WithDescription( @@ -105,7 +104,7 @@ func (c *cputime) register() error { return err } - if processUptime, err = c.meter.AsyncFloat64().UpDownCounter( + if processUptime, err = c.meter.Float64ObservableUpDownCounter( "process.uptime", instrument.WithUnit("s"), instrument.WithDescription("Seconds since application was initialized"), @@ -113,20 +112,20 @@ func (c *cputime) register() error { return err } - return c.meter.RegisterCallback( - []instrument.Asynchronous{ - processCPUTime, - processUptime, - }, - func(ctx context.Context) { + _, err = c.meter.RegisterCallback( + func(ctx context.Context, obs metric.Observer) error { processUser, processSystem, uptime := c.getProcessTimes(ctx) // Uptime - processUptime.Observe(ctx, uptime) + obs.ObserveFloat64(processUptime, uptime) // Process CPU time - processCPUTime.Observe(ctx, processUser, AttributeCPUTimeUser...) - processCPUTime.Observe(ctx, processSystem, AttributeCPUTimeSystem...) + obs.ObserveFloat64(processCPUTime, processUser, AttributeCPUTimeUser...) + obs.ObserveFloat64(processCPUTime, processSystem, AttributeCPUTimeSystem...) + return nil }, + processCPUTime, + processUptime, ) + return err } diff --git a/lightstep/instrumentation/go.mod b/lightstep/instrumentation/go.mod index e4981815..cf14140e 100644 --- a/lightstep/instrumentation/go.mod +++ b/lightstep/instrumentation/go.mod @@ -5,9 +5,9 @@ go 1.18 require ( github.com/shirou/gopsutil/v3 v3.22.9 github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/otel v1.11.2 - go.opentelemetry.io/otel/metric v0.34.0 - go.opentelemetry.io/otel/sdk/metric v0.34.0 + go.opentelemetry.io/otel v1.12.0 + go.opentelemetry.io/otel/metric v0.35.0 + go.opentelemetry.io/otel/sdk/metric v0.35.0 ) require ( @@ -23,9 +23,9 @@ require ( github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.4.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.opentelemetry.io/otel/sdk v1.11.2 // indirect - go.opentelemetry.io/otel/trace v1.11.2 // indirect - golang.org/x/sys v0.2.0 // indirect + go.opentelemetry.io/otel/sdk v1.12.0 // indirect + go.opentelemetry.io/otel/trace v1.12.0 // indirect + golang.org/x/sys v0.3.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/lightstep/instrumentation/go.sum b/lightstep/instrumentation/go.sum index 6ba7f673..05ae41d6 100644 --- a/lightstep/instrumentation/go.sum +++ b/lightstep/instrumentation/go.sum @@ -44,22 +44,22 @@ github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq// github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= -go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= -go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= -go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/metric v0.35.0 h1:aPT5jk/w7F9zW51L7WgRqNKDElBdyRLGuBtI5MX34e8= +go.opentelemetry.io/otel/metric v0.35.0/go.mod h1:qAcbhaTRFU6uG8QM7dDo7XvFsWcugziq/5YI065TokQ= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/sdk/metric v0.35.0 h1:gryV4W5GzpOhKK48/lZb8ldyWIs3DRugSVlQZmCwELA= +go.opentelemetry.io/otel/sdk/metric v0.35.0/go.mod h1:eDyp1GxSiwV98kr7w4pzrszQh/eze9MqBqPd2bCPmyE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/lightstep/instrumentation/host/host.go b/lightstep/instrumentation/host/host.go index c273495f..6760fde9 100644 --- a/lightstep/instrumentation/host/host.go +++ b/lightstep/instrumentation/host/host.go @@ -23,13 +23,10 @@ import ( "github.com/shirou/gopsutil/v3/mem" "github.com/shirou/gopsutil/v3/net" - "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/global" "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/asyncfloat64" - "go.opentelemetry.io/otel/metric/instrument/asyncint64" "go.opentelemetry.io/otel/metric/unit" ) @@ -116,10 +113,10 @@ func (h *host) register() error { var ( err error - hostCPUTime asyncfloat64.Counter - hostMemoryUsage asyncint64.UpDownCounter - hostMemoryUtilization asyncfloat64.Gauge - networkIOUsage asyncint64.Counter + hostCPUTime instrument.Float64ObservableCounter + hostMemoryUsage instrument.Int64ObservableUpDownCounter + hostMemoryUtilization instrument.Float64ObservableGauge + networkIOUsage instrument.Int64ObservableCounter // lock prevents a race between batch observer and instrument registration. lock sync.Mutex @@ -128,7 +125,7 @@ func (h *host) register() error { lock.Lock() defer lock.Unlock() - if hostCPUTime, err = h.meter.AsyncFloat64().Counter( + if hostCPUTime, err = h.meter.Float64ObservableCounter( "system.cpu.time", instrument.WithUnit("s"), instrument.WithDescription( @@ -138,7 +135,7 @@ func (h *host) register() error { return err } - if hostMemoryUsage, err = h.meter.AsyncInt64().UpDownCounter( + if hostMemoryUsage, err = h.meter.Int64ObservableUpDownCounter( "system.memory.usage", instrument.WithUnit(unit.Bytes), instrument.WithDescription( @@ -148,7 +145,7 @@ func (h *host) register() error { return err } - if hostMemoryUtilization, err = h.meter.AsyncFloat64().Gauge( + if hostMemoryUtilization, err = h.meter.Float64ObservableGauge( "system.memory.utilization", instrument.WithDescription( "Memory utilization of this process host attributed by memory state (Used, Available)", @@ -157,7 +154,7 @@ func (h *host) register() error { return err } - if networkIOUsage, err = h.meter.AsyncInt64().Counter( + if networkIOUsage, err = h.meter.Int64ObservableCounter( "system.network.io", instrument.WithUnit(unit.Bytes), instrument.WithDescription( @@ -167,47 +164,36 @@ func (h *host) register() error { return err } - err = h.meter.RegisterCallback( - []instrument.Asynchronous{ - hostCPUTime, - hostMemoryUsage, - hostMemoryUtilization, - networkIOUsage, - }, - func(ctx context.Context) { + _, err = h.meter.RegisterCallback( + func(ctx context.Context, obs metric.Observer) error { lock.Lock() defer lock.Unlock() hostTimeSlice, err := cpu.TimesWithContext(ctx, false) if err != nil { - otel.Handle(err) - return + return err } if len(hostTimeSlice) != 1 { - otel.Handle(fmt.Errorf("host CPU usage: incorrect summary count")) - return + return fmt.Errorf("host CPU usage: incorrect summary count") } vmStats, err := mem.VirtualMemoryWithContext(ctx) if err != nil { - otel.Handle(err) - return + return err } ioStats, err := net.IOCountersWithContext(ctx, false) if err != nil { - otel.Handle(err) - return + return err } if len(ioStats) != 1 { - otel.Handle(fmt.Errorf("host network usage: incorrect summary count")) - return + return err } // Host CPU time hostTime := hostTimeSlice[0] - hostCPUTime.Observe(ctx, hostTime.User, AttributeCPUTimeUser...) - hostCPUTime.Observe(ctx, hostTime.System, AttributeCPUTimeSystem...) + obs.ObserveFloat64(hostCPUTime, hostTime.User, AttributeCPUTimeUser...) + obs.ObserveFloat64(hostCPUTime, hostTime.System, AttributeCPUTimeSystem...) // Note: "other" is the sum of all other known states. other := hostTime.Nice + @@ -218,21 +204,27 @@ func (h *host) register() error { hostTime.Guest + hostTime.GuestNice - hostCPUTime.Observe(ctx, other, AttributeCPUTimeOther...) - hostCPUTime.Observe(ctx, hostTime.Idle, AttributeCPUTimeIdle...) + obs.ObserveFloat64(hostCPUTime, other, AttributeCPUTimeOther...) + obs.ObserveFloat64(hostCPUTime, hostTime.Idle, AttributeCPUTimeIdle...) // Host memory usage - hostMemoryUsage.Observe(ctx, int64(vmStats.Used), AttributeMemoryUsed...) - hostMemoryUsage.Observe(ctx, int64(vmStats.Available), AttributeMemoryAvailable...) + obs.ObserveInt64(hostMemoryUsage, int64(vmStats.Used), AttributeMemoryUsed...) + obs.ObserveInt64(hostMemoryUsage, int64(vmStats.Available), AttributeMemoryAvailable...) // Host memory utilization - hostMemoryUtilization.Observe(ctx, float64(vmStats.Used)/float64(vmStats.Total), AttributeMemoryUsed...) - hostMemoryUtilization.Observe(ctx, float64(vmStats.Available)/float64(vmStats.Total), AttributeMemoryAvailable...) + obs.ObserveFloat64(hostMemoryUtilization, float64(vmStats.Used)/float64(vmStats.Total), AttributeMemoryUsed...) + obs.ObserveFloat64(hostMemoryUtilization, float64(vmStats.Available)/float64(vmStats.Total), AttributeMemoryAvailable...) // Host network usage - networkIOUsage.Observe(ctx, int64(ioStats[0].BytesSent), AttributeNetworkTransmit...) - networkIOUsage.Observe(ctx, int64(ioStats[0].BytesRecv), AttributeNetworkReceive...) - }) + obs.ObserveInt64(networkIOUsage, int64(ioStats[0].BytesSent), AttributeNetworkTransmit...) + obs.ObserveInt64(networkIOUsage, int64(ioStats[0].BytesRecv), AttributeNetworkReceive...) + return nil + }, + hostCPUTime, + hostMemoryUsage, + hostMemoryUtilization, + networkIOUsage, + ) if err != nil { return err diff --git a/lightstep/instrumentation/runtime/builtin.go b/lightstep/instrumentation/runtime/builtin.go index 37c30f04..5a0fb53b 100644 --- a/lightstep/instrumentation/runtime/builtin.go +++ b/lightstep/instrumentation/runtime/builtin.go @@ -98,16 +98,6 @@ type builtinRuntime struct { readFunc readFunc } -// int64Observer is any async int64 instrument. -type int64Observer interface { - Observe(ctx context.Context, x int64, attrs ...attribute.KeyValue) -} - -// float64Observer is any async float64 instrument. -type float64Observer interface { - Observe(ctx context.Context, x float64, attrs ...attribute.KeyValue) -} - func newBuiltinRuntime(meter metric.Meter, af allFunc, rf readFunc) *builtinRuntime { return &builtinRuntime{ meter: meter, @@ -148,37 +138,36 @@ func (r *builtinRuntime) register(desc *builtinDescriptor) error { description := fmt.Sprintf("%s from runtime/metrics", pattern) - opts := []instrument.Option{ - instrument.WithUnit(unit.Unit(munit)), - instrument.WithDescription(description), - } + unitOpt := instrument.WithUnit(unit.Unit(munit)) + descOpt := instrument.WithDescription(description) + var inst instrument.Asynchronous switch kind { case builtinCounter: switch m.Kind { case metrics.KindUint64: // e.g., alloc bytes - inst, err = r.meter.AsyncInt64().Counter(mname, opts...) + inst, err = r.meter.Int64ObservableCounter(mname, unitOpt, descOpt) case metrics.KindFloat64: // e.g., cpu time (1.20) - inst, err = r.meter.AsyncFloat64().Counter(mname, opts...) + inst, err = r.meter.Float64ObservableCounter(mname, unitOpt, descOpt) } case builtinUpDownCounter: switch m.Kind { case metrics.KindUint64: // e.g., memory size - inst, err = r.meter.AsyncInt64().UpDownCounter(mname, opts...) + inst, err = r.meter.Int64ObservableUpDownCounter(mname, unitOpt, descOpt) case metrics.KindFloat64: // not used through 1.20 - inst, err = r.meter.AsyncFloat64().UpDownCounter(mname, opts...) + inst, err = r.meter.Float64ObservableUpDownCounter(mname, unitOpt, descOpt) } case builtinGauge: switch m.Kind { case metrics.KindUint64: - inst, err = r.meter.AsyncInt64().Gauge(mname, opts...) + inst, err = r.meter.Int64ObservableGauge(mname, unitOpt, descOpt) case metrics.KindFloat64: // not used through 1.20 - inst, err = r.meter.AsyncFloat64().Gauge(mname, opts...) + inst, err = r.meter.Float64ObservableGauge(mname, unitOpt, descOpt) } } if err != nil { @@ -197,24 +186,24 @@ func (r *builtinRuntime) register(desc *builtinDescriptor) error { instAttrs = append(instAttrs, attrs) } - if err := r.meter.RegisterCallback(instruments, func(ctx context.Context) { + if _, err := r.meter.RegisterCallback(func(ctx context.Context, obs metric.Observer) error { r.readFunc(samples) for idx, samp := range samples { - switch samp.Value.Kind() { case metrics.KindUint64: - instruments[idx].(int64Observer).Observe(ctx, int64(samp.Value.Uint64()), instAttrs[idx]...) + obs.ObserveInt64(instruments[idx].(instrument.Int64Observable), int64(samp.Value.Uint64()), instAttrs[idx]...) case metrics.KindFloat64: - instruments[idx].(float64Observer).Observe(ctx, samp.Value.Float64(), instAttrs[idx]...) + obs.ObserveFloat64(instruments[idx].(instrument.Float64Observable), samp.Value.Float64(), instAttrs[idx]...) default: // KindFloat64Histogram (unsupported in OTel) and KindBad // (unsupported by runtime/metrics). Neither should happen // if runtime/metrics and the code above are working correctly. - otel.Handle(fmt.Errorf("invalid runtime/metrics value kind: %v", samp.Value.Kind())) + return fmt.Errorf("invalid runtime/metrics value kind: %v", samp.Value.Kind()) } } - }); err != nil { + return nil + }, instruments...); err != nil { return err } return nil diff --git a/lightstep/sdk/metric/asyncinst.go b/lightstep/sdk/metric/asyncinst.go index 8cf99e14..88fec6e8 100644 --- a/lightstep/sdk/metric/asyncinst.go +++ b/lightstep/sdk/metric/asyncinst.go @@ -15,45 +15,138 @@ package metric // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric" import ( + "context" + "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/asyncstate" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/asyncfloat64" - "go.opentelemetry.io/otel/metric/instrument/asyncint64" ) type ( - asyncint64Instruments struct{ *meter } - asyncfloat64Instruments struct{ *meter } + int64ObservableCounter struct { + instrument.Int64ObservableCounter + *asyncstate.Observer + } + int64ObservableUpDownCounter struct { + instrument.Int64ObservableUpDownCounter + *asyncstate.Observer + } + int64ObservableGauge struct { + instrument.Int64ObservableGauge + *asyncstate.Observer + } + float64ObservableCounter struct { + instrument.Float64ObservableCounter + *asyncstate.Observer + } + float64ObservableUpDownCounter struct { + instrument.Float64ObservableUpDownCounter + *asyncstate.Observer + } + float64ObservableGauge struct { + instrument.Float64ObservableGauge + *asyncstate.Observer + } + + intObserver struct { + observer metric.Observer + observable instrument.Int64Observable + } + floatObserver struct { + observer metric.Observer + observable instrument.Float64Observable + } ) -func (i asyncint64Instruments) Counter(name string, opts ...instrument.Option) (asyncint64.Counter, error) { - inst, err := i.asynchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.AsyncCounter) - return asyncstate.NewObserver[int64, number.Int64Traits](inst), err +func (io intObserver) Observe(value int64, attrs ...attribute.KeyValue) { + io.observer.ObserveInt64(io.observable, value, attrs...) +} + +func (fo floatObserver) Observe(value float64, attrs ...attribute.KeyValue) { + fo.observer.ObserveFloat64(fo.observable, value, attrs...) +} + +func registerIntCallbacks[T instrument.Int64Observable](m *meter, inst T, cbs []instrument.Int64Callback) { + for _, cb := range cbs { + _, _ = m.RegisterCallback(func(ctx context.Context, obs metric.Observer) error { + return cb(ctx, intObserver{ + observer: obs, + observable: inst, + }) + }, inst) + } +} + +func registerFloatCallbacks[T instrument.Float64Observable](m *meter, inst T, cbs []instrument.Float64Callback) { + for _, cb := range cbs { + _, _ = m.RegisterCallback(func(ctx context.Context, obs metric.Observer) error { + return cb(ctx, floatObserver{ + observer: obs, + observable: inst, + }) + }, inst) + } +} + +func (m *meter) Int64ObservableCounter(name string, opts ...instrument.Int64ObserverOption) (instrument.Int64ObservableCounter, error) { + cfg := instrument.NewInt64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Int64Kind, sdkinstrument.AsyncCounter) + inst := int64ObservableCounter{ + Observer: impl, + } + registerIntCallbacks(m, inst, cfg.Callbacks()) + return inst, err } -func (i asyncint64Instruments) UpDownCounter(name string, opts ...instrument.Option) (asyncint64.UpDownCounter, error) { - inst, err := i.asynchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.AsyncUpDownCounter) - return asyncstate.NewObserver[int64, number.Int64Traits](inst), err +func (m *meter) Int64ObservableUpDownCounter(name string, opts ...instrument.Int64ObserverOption) (instrument.Int64ObservableUpDownCounter, error) { + cfg := instrument.NewInt64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Int64Kind, sdkinstrument.AsyncUpDownCounter) + inst := int64ObservableUpDownCounter{ + Observer: impl, + } + registerIntCallbacks(m, inst, cfg.Callbacks()) + return inst, err } -func (i asyncint64Instruments) Gauge(name string, opts ...instrument.Option) (asyncint64.Gauge, error) { - inst, err := i.asynchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.AsyncGauge) - return asyncstate.NewObserver[int64, number.Int64Traits](inst), err +func (m *meter) Int64ObservableGauge(name string, opts ...instrument.Int64ObserverOption) (instrument.Int64ObservableGauge, error) { + cfg := instrument.NewInt64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Int64Kind, sdkinstrument.AsyncGauge) + inst := int64ObservableGauge{ + Observer: impl, + } + registerIntCallbacks(m, inst, cfg.Callbacks()) + return inst, err } -func (f asyncfloat64Instruments) Counter(name string, opts ...instrument.Option) (asyncfloat64.Counter, error) { - inst, err := f.asynchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.AsyncCounter) - return asyncstate.NewObserver[float64, number.Float64Traits](inst), err +func (m *meter) Float64ObservableCounter(name string, opts ...instrument.Float64ObserverOption) (instrument.Float64ObservableCounter, error) { + cfg := instrument.NewFloat64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Float64Kind, sdkinstrument.AsyncCounter) + inst := float64ObservableCounter{ + Observer: impl, + } + registerFloatCallbacks(m, inst, cfg.Callbacks()) + return inst, err } -func (f asyncfloat64Instruments) UpDownCounter(name string, opts ...instrument.Option) (asyncfloat64.UpDownCounter, error) { - inst, err := f.asynchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.AsyncUpDownCounter) - return asyncstate.NewObserver[float64, number.Float64Traits](inst), err +func (m *meter) Float64ObservableUpDownCounter(name string, opts ...instrument.Float64ObserverOption) (instrument.Float64ObservableUpDownCounter, error) { + cfg := instrument.NewFloat64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Float64Kind, sdkinstrument.AsyncUpDownCounter) + inst := float64ObservableUpDownCounter{ + Observer: impl, + } + registerFloatCallbacks(m, inst, cfg.Callbacks()) + return inst, err } -func (f asyncfloat64Instruments) Gauge(name string, opts ...instrument.Option) (asyncfloat64.Gauge, error) { - inst, err := f.asynchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.AsyncGauge) - return asyncstate.NewObserver[float64, number.Float64Traits](inst), err +func (m *meter) Float64ObservableGauge(name string, opts ...instrument.Float64ObserverOption) (instrument.Float64ObservableGauge, error) { + cfg := instrument.NewFloat64ObserverConfig(opts...) + impl, err := m.asynchronousInstrument(name, cfg, number.Float64Kind, sdkinstrument.AsyncGauge) + inst := float64ObservableGauge{ + Observer: impl, + } + registerFloatCallbacks(m, inst, cfg.Callbacks()) + return inst, err } diff --git a/lightstep/sdk/metric/asyncinst_test.go b/lightstep/sdk/metric/asyncinst_test.go index 09d8833c..f526449c 100644 --- a/lightstep/sdk/metric/asyncinst_test.go +++ b/lightstep/sdk/metric/asyncinst_test.go @@ -25,35 +25,165 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/test" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" + "github.com/stretchr/testify/require" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/instrument" "go.opentelemetry.io/otel/sdk/resource" ) -func TestAsyncInsts(t *testing.T) { +func TestAsyncInstsMultiCallback(t *testing.T) { rdr := NewManualReader("test") res := resource.Empty() provider := NewMeterProvider(WithReader(rdr), WithResource(res)) - ci := must(provider.Meter("test").AsyncInt64().Counter("icount")) - cf := must(provider.Meter("test").AsyncFloat64().Counter("fcount")) - ui := must(provider.Meter("test").AsyncInt64().UpDownCounter("iupcount")) - uf := must(provider.Meter("test").AsyncFloat64().UpDownCounter("fupcount")) - gi := must(provider.Meter("test").AsyncInt64().Gauge("igauge")) - gf := must(provider.Meter("test").AsyncFloat64().Gauge("fgauge")) + ci := must(provider.Meter("test").Int64ObservableCounter("icount")) + cf := must(provider.Meter("test").Float64ObservableCounter("fcount")) + ui := must(provider.Meter("test").Int64ObservableUpDownCounter("iupcount")) + uf := must(provider.Meter("test").Float64ObservableUpDownCounter("fupcount")) + gi := must(provider.Meter("test").Int64ObservableGauge("igauge")) + gf := must(provider.Meter("test").Float64ObservableGauge("fgauge")) attr := attribute.String("a", "B") - _ = provider.Meter("test").RegisterCallback([]instrument.Asynchronous{ - ci, cf, ui, uf, gi, gf, - }, func(ctx context.Context) { - ci.Observe(ctx, 2, attr) - cf.Observe(ctx, 3, attr) - ui.Observe(ctx, 4, attr) - uf.Observe(ctx, 5, attr) - gi.Observe(ctx, 6, attr) - gf.Observe(ctx, 7, attr) - }) + reg, err := provider.Meter("test").RegisterCallback(func(ctx context.Context, observer metric.Observer) error { + observer.ObserveInt64(ci, 2, attr) + observer.ObserveFloat64(cf, 3, attr) + observer.ObserveInt64(ui, 4, attr) + observer.ObserveFloat64(uf, 5, attr) + observer.ObserveInt64(gi, 6, attr) + observer.ObserveFloat64(gf, 7, attr) + return nil + }, ci, cf, ui, uf, gi, gf) + + require.NoError(t, err) + + data := rdr.Produce(nil) + notime := time.Time{} + cumulative := aggregation.CumulativeTemporality + + test.RequireEqualResourceMetrics( + t, data, res, + test.Scope( + test.Library("test"), + test.Instrument( + test.Descriptor("icount", sdkinstrument.AsyncCounter, number.Int64Kind), + test.Point(notime, notime, sum.NewMonotonicInt64(2), cumulative, attr), + ), + test.Instrument( + test.Descriptor("fcount", sdkinstrument.AsyncCounter, number.Float64Kind), + test.Point(notime, notime, sum.NewMonotonicFloat64(3), cumulative, attr), + ), + test.Instrument( + test.Descriptor("iupcount", sdkinstrument.AsyncUpDownCounter, number.Int64Kind), + test.Point(notime, notime, sum.NewNonMonotonicInt64(4), cumulative, attr), + ), + test.Instrument( + test.Descriptor("fupcount", sdkinstrument.AsyncUpDownCounter, number.Float64Kind), + test.Point(notime, notime, sum.NewNonMonotonicFloat64(5), cumulative, attr), + ), + test.Instrument( + test.Descriptor("igauge", sdkinstrument.AsyncGauge, number.Int64Kind), + test.Point(notime, notime, gauge.NewInt64(6), cumulative, attr), + ), + test.Instrument( + test.Descriptor("fgauge", sdkinstrument.AsyncGauge, number.Float64Kind), + test.Point(notime, notime, gauge.NewFloat64(7), cumulative, attr), + ), + ), + ) + + // Unregister it, get no points in the following collection. + require.NoError(t, reg.Unregister()) + + data = rdr.Produce(nil) + test.RequireEqualResourceMetrics( + t, data, res, + test.Scope( + test.Library("test"), + test.Instrument( + test.Descriptor("icount", sdkinstrument.AsyncCounter, number.Int64Kind), + ), + test.Instrument( + test.Descriptor("fcount", sdkinstrument.AsyncCounter, number.Float64Kind), + ), + test.Instrument( + test.Descriptor("iupcount", sdkinstrument.AsyncUpDownCounter, number.Int64Kind), + ), + test.Instrument( + test.Descriptor("fupcount", sdkinstrument.AsyncUpDownCounter, number.Float64Kind), + ), + test.Instrument( + test.Descriptor("igauge", sdkinstrument.AsyncGauge, number.Int64Kind), + ), + test.Instrument( + test.Descriptor("fgauge", sdkinstrument.AsyncGauge, number.Float64Kind), + ), + ), + ) + + // Unregister it again, get an error. + err = reg.Unregister() + require.Error(t, err) + require.Contains(t, err.Error(), "already unregistered") +} + +func TestAsyncInstsSingleCallback(t *testing.T) { + rdr := NewManualReader("test") + res := resource.Empty() + provider := NewMeterProvider(WithReader(rdr), WithResource(res)) + tm := provider.Meter("test") + + attr := attribute.String("a", "B") + + _ = must(tm.Int64ObservableCounter("icount", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(2, attr) + return nil + }, + ), + )) + _ = must(tm.Float64ObservableCounter("fcount", + instrument.WithFloat64Callback( + func(ctx context.Context, obs instrument.Float64Observer) error { + obs.Observe(3, attr) + return nil + }, + ), + )) + _ = must(tm.Int64ObservableUpDownCounter("iupcount", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(4, attr) + return nil + }, + ), + )) + _ = must(tm.Float64ObservableUpDownCounter("fupcount", + instrument.WithFloat64Callback( + func(ctx context.Context, obs instrument.Float64Observer) error { + obs.Observe(5, attr) + return nil + }, + ), + )) + _ = must(tm.Int64ObservableGauge("igauge", + instrument.WithInt64Callback( + func(ctx context.Context, obs instrument.Int64Observer) error { + obs.Observe(6, attr) + return nil + }, + ), + )) + _ = must(tm.Float64ObservableGauge("fgauge", + instrument.WithFloat64Callback( + func(ctx context.Context, obs instrument.Float64Observer) error { + obs.Observe(7, attr) + return nil + }, + ), + )) data := rdr.Produce(nil) notime := time.Time{} diff --git a/lightstep/sdk/metric/benchmark_test.go b/lightstep/sdk/metric/benchmark_test.go index b075b39f..665fdd2f 100644 --- a/lightstep/sdk/metric/benchmark_test.go +++ b/lightstep/sdk/metric/benchmark_test.go @@ -44,7 +44,7 @@ func BenchmarkCounterAddNoAttrs(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1) @@ -57,7 +57,7 @@ func BenchmarkCounterAddOneAttr(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.String("K", "V")) @@ -70,7 +70,7 @@ func BenchmarkCounterAddOneInvalidAttr(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.String("", "V"), attribute.String("K", "V")) @@ -83,7 +83,7 @@ func BenchmarkCounterAddManyAttrs(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.Int("K", i)) @@ -96,7 +96,7 @@ func BenchmarkCounterAddManyInvalidAttrs(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.Int("", i), attribute.Int("K", i)) @@ -113,7 +113,7 @@ func BenchmarkCounterAddManyFilteredAttrs(b *testing.B) { ) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.Int("L", i), attribute.Int("K", i)) @@ -126,7 +126,7 @@ func BenchmarkCounterCollectOneAttrNoReuse(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") for i := 0; i < b.N; i++ { cntr.Add(ctx, 1, attribute.Int("K", 1)) @@ -141,7 +141,7 @@ func BenchmarkCounterCollectOneAttrWithReuse(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") var reuse data.Metrics @@ -158,7 +158,7 @@ func BenchmarkCounterCollectTenAttrs(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") var reuse data.Metrics @@ -176,7 +176,7 @@ func BenchmarkCounterCollectTenAttrsTenTimes(b *testing.B) { provider := NewMeterProvider(WithReader(rdr)) b.ReportAllocs() - cntr, _ := provider.Meter("test").SyncInt64().Counter("hello") + cntr, _ := provider.Meter("test").Int64Counter("hello") var reuse data.Metrics diff --git a/lightstep/sdk/metric/example/example_test.go b/lightstep/sdk/metric/example/example_test.go index 0f5ee0e1..7cdd9afc 100644 --- a/lightstep/sdk/metric/example/example_test.go +++ b/lightstep/sdk/metric/example/example_test.go @@ -54,7 +54,7 @@ func ExampleMinimumConfig() { // Configure a Meter and instrument. meter := sdk.Meter("meter") - counter, _ := meter.SyncInt64().Counter("how-many") + counter, _ := meter.Int64Counter("how-many") // Count once and shutdown. counter.Add(ctx, 1) diff --git a/lightstep/sdk/metric/example/go.mod b/lightstep/sdk/metric/example/go.mod index 2683c7a9..47cddc4d 100644 --- a/lightstep/sdk/metric/example/go.mod +++ b/lightstep/sdk/metric/example/go.mod @@ -3,7 +3,7 @@ module github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/example go 1.18 require ( - github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.12.1 + github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.13.0 github.com/lightstep/otel-launcher-go/pipelines v1.8.0 go.opentelemetry.io/proto/otlp v0.19.0 ) @@ -16,18 +16,18 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/lightstep/go-expohisto v1.0.0 // indirect - go.opentelemetry.io/otel v1.11.2 // indirect - go.opentelemetry.io/otel/metric v0.34.0 // indirect - go.opentelemetry.io/otel/sdk v1.11.2 // indirect - go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect - go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/otel v1.12.0 // indirect + go.opentelemetry.io/otel/metric v0.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.12.0 // indirect + go.opentelemetry.io/otel/sdk/metric v0.35.0 // indirect + go.opentelemetry.io/otel/trace v1.12.0 // indirect go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/net v0.2.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect - google.golang.org/grpc v1.51.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.5.0 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect + google.golang.org/grpc v1.52.3 // indirect google.golang.org/protobuf v1.28.1 // indirect ) diff --git a/lightstep/sdk/metric/example/go.sum b/lightstep/sdk/metric/example/go.sum index 3e0e780a..202b76d0 100644 --- a/lightstep/sdk/metric/example/go.sum +++ b/lightstep/sdk/metric/example/go.sum @@ -50,7 +50,6 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -63,7 +62,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -164,26 +162,23 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= -go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= -go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= -go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/metric v0.35.0 h1:aPT5jk/w7F9zW51L7WgRqNKDElBdyRLGuBtI5MX34e8= +go.opentelemetry.io/otel/metric v0.35.0/go.mod h1:qAcbhaTRFU6uG8QM7dDo7XvFsWcugziq/5YI065TokQ= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/sdk/metric v0.35.0 h1:gryV4W5GzpOhKK48/lZb8ldyWIs3DRugSVlQZmCwELA= +go.opentelemetry.io/otel/sdk/metric v0.35.0/go.mod h1:eDyp1GxSiwV98kr7w4pzrszQh/eze9MqBqPd2bCPmyE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -245,10 +240,9 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -289,13 +283,11 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -303,8 +295,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -405,8 +397,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -423,9 +415,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -439,7 +430,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -448,7 +438,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/lightstep/sdk/metric/exporters/otlp/otlpmetric/internal/transform/metric_test.go b/lightstep/sdk/metric/exporters/otlp/otlpmetric/internal/transform/metric_test.go index fac94f9c..5fe2191b 100644 --- a/lightstep/sdk/metric/exporters/otlp/otlpmetric/internal/transform/metric_test.go +++ b/lightstep/sdk/metric/exporters/otlp/otlpmetric/internal/transform/metric_test.go @@ -33,7 +33,6 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/instrument" "go.opentelemetry.io/otel/sdk/resource" metricspb "go.opentelemetry.io/proto/otlp/metrics/v1" "google.golang.org/protobuf/testing/protocmp" @@ -86,7 +85,7 @@ var ( func testInst(nk number.Kind) sdkinstrument.Descriptor { kind := sdkinstrument.Kind(-1) // the exporter doesn't inspect this field, test doesn't care - return test.Descriptor(testName, kind, nk, instrument.WithUnit(testUnit), instrument.WithDescription(testDesc)) + return sdkinstrument.NewDescriptor(testName, kind, nk, testDesc, testUnit) } func testInt64() sdkinstrument.Descriptor { diff --git a/lightstep/sdk/metric/exporters/otlp/otlpmetric/otlpmetricgrpc/example_test.go b/lightstep/sdk/metric/exporters/otlp/otlpmetric/otlpmetricgrpc/example_test.go deleted file mode 100644 index f7630760..00000000 --- a/lightstep/sdk/metric/exporters/otlp/otlpmetric/otlpmetricgrpc/example_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 otlpmetricgrpc_test - -import ( - "context" - - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" - "go.opentelemetry.io/otel/metric/global" - "go.opentelemetry.io/otel/sdk/metric" -) - -func Example() { - ctx := context.Background() - exp, err := otlpmetricgrpc.New(ctx) - if err != nil { - panic(err) - } - - meterProvider := metric.NewMeterProvider(metric.WithReader(metric.NewPeriodicReader(exp))) - defer func() { - if err := meterProvider.Shutdown(ctx); err != nil { - panic(err) - } - }() - global.SetMeterProvider(meterProvider) - - // From here, the meterProvider can be used by instrumentation to collect - // telemetry. -} diff --git a/lightstep/sdk/metric/go.mod b/lightstep/sdk/metric/go.mod index b60736c0..57f31b6f 100644 --- a/lightstep/sdk/metric/go.mod +++ b/lightstep/sdk/metric/go.mod @@ -11,11 +11,10 @@ require ( github.com/google/go-cmp v0.5.9 github.com/lightstep/go-expohisto v1.0.0 github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/otel v1.11.2 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 - go.opentelemetry.io/otel/metric v0.34.0 - go.opentelemetry.io/otel/sdk v1.11.2 - go.opentelemetry.io/otel/sdk/metric v0.34.0 + go.opentelemetry.io/otel v1.12.0 + go.opentelemetry.io/otel/metric v0.35.0 + go.opentelemetry.io/otel/sdk v1.12.0 + go.opentelemetry.io/otel/sdk/metric v0.35.0 go.opentelemetry.io/proto/otlp v0.19.0 go.uber.org/multierr v1.8.0 golang.org/x/sync v0.1.0 @@ -31,9 +30,7 @@ require ( github.com/kr/pretty v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect - go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/otel/trace v1.12.0 // indirect go.uber.org/atomic v1.7.0 // indirect golang.org/x/net v0.2.0 // indirect golang.org/x/sys v0.2.0 // indirect diff --git a/lightstep/sdk/metric/go.sum b/lightstep/sdk/metric/go.sum index 5b1ff92f..bfc65b93 100644 --- a/lightstep/sdk/metric/go.sum +++ b/lightstep/sdk/metric/go.sum @@ -181,22 +181,16 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= -go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= -go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= -go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/metric v0.35.0 h1:aPT5jk/w7F9zW51L7WgRqNKDElBdyRLGuBtI5MX34e8= +go.opentelemetry.io/otel/metric v0.35.0/go.mod h1:qAcbhaTRFU6uG8QM7dDo7XvFsWcugziq/5YI065TokQ= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/sdk/metric v0.35.0 h1:gryV4W5GzpOhKK48/lZb8ldyWIs3DRugSVlQZmCwELA= +go.opentelemetry.io/otel/sdk/metric v0.35.0/go.mod h1:eDyp1GxSiwV98kr7w4pzrszQh/eze9MqBqPd2bCPmyE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= diff --git a/lightstep/sdk/metric/internal/asyncstate/async.go b/lightstep/sdk/metric/internal/asyncstate/async.go index 22b1ca6c..1ec32a71 100644 --- a/lightstep/sdk/metric/internal/asyncstate/async.go +++ b/lightstep/sdk/metric/internal/asyncstate/async.go @@ -15,7 +15,6 @@ package asyncstate // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/asyncstate" import ( - "context" "fmt" "sync" @@ -26,6 +25,7 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric/instrument" ) type ( @@ -41,12 +41,14 @@ type ( // store is a map from instrument to set of values // observed during one collection. - store map[*Instrument]map[attribute.Set]viewstate.Accumulator + store map[*Observer]map[attribute.Set]viewstate.Accumulator } - // Instrument is the implementation object associated with one + // Observer is the implementation object associated with one // asynchronous instrument. - Instrument struct { + Observer struct { + instrument.Asynchronous + // opaque is used to ensure that callbacks are // registered with instruments from the same provider. opaque interface{} @@ -65,47 +67,51 @@ type ( descriptor sdkinstrument.Descriptor } - // contextKey is used with context.WithValue() to lookup - // per-reader state from within an executing callback - // function. - contextKey struct{} + implementation interface { + get() *Observer + } ) func NewState(pipe int) *State { return &State{ pipe: pipe, - store: map[*Instrument]map[attribute.Set]viewstate.Accumulator{}, + store: map[*Observer]map[attribute.Set]viewstate.Accumulator{}, } } -// NewInstrument returns a new Instrument; this compiles individual +// New returns a new Instrument; this compiles individual // instruments for each reader. -func NewInstrument(desc sdkinstrument.Descriptor, opaque interface{}, compiled pipeline.Register[viewstate.Instrument]) *Instrument { +func New(desc sdkinstrument.Descriptor, opaque interface{}, compiled pipeline.Register[viewstate.Instrument]) *Observer { // Note: we return a non-nil instrument even when all readers // disabled the instrument. This ensures that certain error // checks still work (wrong meter, wrong callback, etc). - return &Instrument{ + return &Observer{ opaque: opaque, descriptor: desc, compiled: compiled, } } +// get returns this instance, used for unwrapping the instrument. +func (obs *Observer) get() *Observer { + return obs +} + // SnapshotAndProcess calls SnapshotAndProcess() on each of the pending // aggregations for a given reader. -func (inst *Instrument) SnapshotAndProcess(state *State) { +func (obs *Observer) SnapshotAndProcess(state *State) { state.lock.Lock() defer state.lock.Unlock() - for _, acc := range state.store[inst] { + for _, acc := range state.store[obs] { // SnapshotAndProcess is always final for asynchronous state, since // the map is built anew for each collection. acc.SnapshotAndProcess(true) } } -func (inst *Instrument) getOrCreate(cs *callbackState, attrs []attribute.KeyValue) viewstate.Accumulator { - comp := inst.compiled[cs.state.pipe] +func (obs *Observer) getOrCreate(cs *callbackState, attrs []attribute.KeyValue) viewstate.Accumulator { + comp := obs.compiled[cs.state.pipe] if comp == nil { // The view disabled the instrument. @@ -115,11 +121,11 @@ func (inst *Instrument) getOrCreate(cs *callbackState, attrs []attribute.KeyValu cs.state.lock.Lock() defer cs.state.lock.Unlock() - imap, has := cs.state.store[inst] + imap, has := cs.state.store[obs] if !has { imap = map[attribute.Set]viewstate.Accumulator{} - cs.state.store[inst] = imap + cs.state.store[obs] = imap } aset := attribute.NewSet(attrs...) @@ -131,29 +137,28 @@ func (inst *Instrument) getOrCreate(cs *callbackState, attrs []attribute.KeyValu return se } -func capture[N number.Any, Traits number.Traits[N]](ctx context.Context, inst *Instrument, value N, attrs []attribute.KeyValue) { - lookup := ctx.Value(contextKey{}) - if lookup == nil { - otel.Handle(fmt.Errorf("async instrument used outside of callback")) - return - } - - cs := lookup.(*callbackState) +func Observe[N number.Any, Traits number.Traits[N]](inst instrument.Asynchronous, cs *callbackState, value N, attrs []attribute.KeyValue) { cb := cs.getCallback() if cb == nil { otel.Handle(fmt.Errorf("async instrument used after callback return")) return } - if _, ok := cb.instruments[inst]; !ok { + obsImpl, ok := inst.(implementation) + if !ok { + otel.Handle(fmt.Errorf("asynchronous instrument does not belong to this SDK: %T", inst)) + return + } + obs := obsImpl.get() + if _, ok := cb.instruments[obs]; !ok { otel.Handle(fmt.Errorf("async instrument not declared for use in callback")) return } - if !aggregator.RangeTest[N, Traits](value, inst.descriptor) { + if !aggregator.RangeTest[N, Traits](value, obs.descriptor) { return } - if acc := inst.getOrCreate(cs, attrs); acc != nil { + if acc := obs.getOrCreate(cs, attrs); acc != nil { acc.(viewstate.Updater[N]).Update(value) } } diff --git a/lightstep/sdk/metric/internal/asyncstate/async_test.go b/lightstep/sdk/metric/internal/asyncstate/async_test.go index 3fe51a93..b333a117 100644 --- a/lightstep/sdk/metric/internal/asyncstate/async_test.go +++ b/lightstep/sdk/metric/internal/asyncstate/async_test.go @@ -34,6 +34,7 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/view" + "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/instrument" "go.opentelemetry.io/otel/sdk/instrumentation" ) @@ -93,11 +94,28 @@ func testState(num int) *State { return NewState(num) } -func testObserver[N number.Any, Traits number.Traits[N]](tsdk *testSDK, name string, ik sdkinstrument.Kind, opts ...instrument.Option) Observer[N, Traits] { - var t Traits - desc := test.Descriptor(name, ik, t.Kind(), opts...) - impl := NewInstrument(desc, tsdk, tsdk.compile(desc)) - return NewObserver[N, Traits](impl) +type intObserver struct { + *Observer + instrument.Int64Observable +} + +type floatObserver struct { + *Observer + instrument.Float64Observable +} + +func testIntObserver(tsdk *testSDK, name string, ik sdkinstrument.Kind) intObserver { + desc := test.Descriptor(name, ik, number.Int64Kind) + return intObserver{Observer: New(desc, tsdk, tsdk.compile(desc))} +} + +func testFloatObserver(tsdk *testSDK, name string, ik sdkinstrument.Kind) floatObserver { + desc := test.Descriptor(name, ik, number.Float64Kind) + return floatObserver{Observer: New(desc, tsdk, tsdk.compile(desc))} +} + +func nopCB(context.Context, metric.Observer) error { + return nil } func TestNewCallbackError(t *testing.T) { @@ -109,7 +127,7 @@ func TestNewCallbackError(t *testing.T) { require.Nil(t, cb) // nil callback error - cntr := testObserver[int64, number.Int64Traits](tsdk, "counter", sdkinstrument.AsyncCounter) + cntr := testIntObserver(tsdk, "counter", sdkinstrument.AsyncCounter) cb, err = NewCallback([]instrument.Asynchronous{cntr}, tsdk, nil) require.Error(t, err) require.Nil(t, cb) @@ -119,30 +137,30 @@ func TestNewCallbackProviderMismatch(t *testing.T) { test0 := testAsync("test0") test1 := testAsync("test1") - instA0 := testObserver[int64, number.Int64Traits](test0, "A", sdkinstrument.AsyncCounter) - instB1 := testObserver[float64, number.Float64Traits](test1, "A", sdkinstrument.AsyncCounter) + instA0 := testIntObserver(test0, "A", sdkinstrument.AsyncCounter) + instB1 := testFloatObserver(test1, "A", sdkinstrument.AsyncCounter) - cb, err := NewCallback([]instrument.Asynchronous{instA0, instB1}, test0, func(context.Context) {}) + cb, err := NewCallback([]instrument.Asynchronous{instA0, instB1}, test0, nopCB) require.Error(t, err) require.Contains(t, err.Error(), "asynchronous instrument belongs to a different meter") require.Nil(t, cb) - cb, err = NewCallback([]instrument.Asynchronous{instA0, instB1}, test1, func(context.Context) {}) + cb, err = NewCallback([]instrument.Asynchronous{instA0, instB1}, test1, nopCB) require.Error(t, err) require.Contains(t, err.Error(), "asynchronous instrument belongs to a different meter") require.Nil(t, cb) - cb, err = NewCallback([]instrument.Asynchronous{instA0}, test0, func(context.Context) {}) + cb, err = NewCallback([]instrument.Asynchronous{instA0}, test0, nopCB) require.NoError(t, err) require.NotNil(t, cb) - cb, err = NewCallback([]instrument.Asynchronous{instB1}, test1, func(context.Context) {}) + cb, err = NewCallback([]instrument.Asynchronous{instB1}, test1, nopCB) require.NoError(t, err) require.NotNil(t, cb) // nil value not of this SDK var fake0 instrument.Asynchronous - cb, err = NewCallback([]instrument.Asynchronous{fake0}, test0, func(context.Context) {}) + cb, err = NewCallback([]instrument.Asynchronous{fake0}, test0, nopCB) require.Error(t, err) require.Contains(t, err.Error(), "asynchronous instrument does not belong to this SDK") require.Nil(t, cb) @@ -151,7 +169,7 @@ func TestNewCallbackProviderMismatch(t *testing.T) { var fake1 struct { instrument.Asynchronous } - cb, err = NewCallback([]instrument.Asynchronous{fake1}, test0, func(context.Context) {}) + cb, err = NewCallback([]instrument.Asynchronous{fake1}, test0, nopCB) require.Error(t, err) require.Contains(t, err.Error(), "asynchronous instrument does not belong to this SDK") require.Nil(t, cb) @@ -163,13 +181,14 @@ func TestCallbackInvalidation(t *testing.T) { tsdk := testAsync("test") var called int64 - var saveCtx context.Context + var saveObs metric.Observer - cntr := testObserver[int64, number.Int64Traits](tsdk, "counter", sdkinstrument.AsyncCounter) - cb, err := NewCallback([]instrument.Asynchronous{cntr}, tsdk, func(ctx context.Context) { - cntr.Observe(ctx, called) - saveCtx = ctx + cntr := testIntObserver(tsdk, "counter", sdkinstrument.AsyncCounter) + cb, err := NewCallback([]instrument.Asynchronous{cntr}, tsdk, func(ctx context.Context, obs metric.Observer) error { + obs.ObserveInt64(cntr, called) + saveObs = obs called++ + return nil }) require.NoError(t, err) @@ -179,9 +198,9 @@ func TestCallbackInvalidation(t *testing.T) { cb.Run(context.Background(), state) // simulate use after callback return - cntr.Observe(saveCtx, 10000000) + saveObs.ObserveInt64(cntr, 10000000) - cntr.inst.SnapshotAndProcess(state) + cntr.SnapshotAndProcess(state) require.Equal(t, int64(1), called) require.Equal(t, 1, len(*errors)) @@ -195,7 +214,7 @@ func TestCallbackInvalidation(t *testing.T) { testSequence, ), test.Instrument( - cntr.inst.descriptor, + cntr.descriptor, test.Point(startTime, endTime, sum.NewMonotonicInt64(0), aggregation.CumulativeTemporality), ), ) @@ -208,12 +227,13 @@ func TestCallbackInstrumentUndeclaredForCalback(t *testing.T) { var called int64 - cntr1 := testObserver[int64, number.Int64Traits](tt, "counter1", sdkinstrument.AsyncCounter) - cntr2 := testObserver[int64, number.Int64Traits](tt, "counter2", sdkinstrument.AsyncCounter) + cntr1 := testIntObserver(tt, "counter1", sdkinstrument.AsyncCounter) + cntr2 := testIntObserver(tt, "counter2", sdkinstrument.AsyncCounter) - cb, err := NewCallback([]instrument.Asynchronous{cntr1}, tt, func(ctx context.Context) { - cntr2.Observe(ctx, called) + cb, err := NewCallback([]instrument.Asynchronous{cntr1}, tt, func(ctx context.Context, obs metric.Observer) error { + obs.ObserveInt64(cntr2, called) called++ + return nil }) require.NoError(t, err) @@ -222,8 +242,8 @@ func TestCallbackInstrumentUndeclaredForCalback(t *testing.T) { // run the callback once legitimately cb.Run(context.Background(), state) - cntr1.inst.SnapshotAndProcess(state) - cntr2.inst.SnapshotAndProcess(state) + cntr1.SnapshotAndProcess(state) + cntr2.SnapshotAndProcess(state) require.Equal(t, int64(1), called) require.Equal(t, 1, len(*errors)) @@ -237,39 +257,10 @@ func TestCallbackInstrumentUndeclaredForCalback(t *testing.T) { testSequence, ), test.Instrument( - cntr1.inst.descriptor, - ), - test.Instrument( - cntr2.inst.descriptor, - ), - ) -} - -func TestInstrumentUseOutsideCallback(t *testing.T) { - errors := test.OTelErrors() - - tt := testAsync("test") - - cntr := testObserver[float64, number.Float64Traits](tt, "cntr", sdkinstrument.AsyncCounter) - - cntr.Observe(context.Background(), 1000) - - state := testState(0) - - cntr.inst.SnapshotAndProcess(state) - - require.Equal(t, 1, len(*errors)) - require.Contains(t, (*errors)[0].Error(), "async instrument used outside of callback") - - test.RequireEqualMetrics( - t, - test.CollectScope( - t, - tt.compilers[0].Collectors(), - testSequence, + cntr1.descriptor, ), test.Instrument( - cntr.inst.descriptor, + cntr2.descriptor, ), ) } @@ -295,14 +286,15 @@ func TestCallbackDisabledInstrument(t *testing.T) { }, ) - cntrDrop1 := testObserver[float64, number.Float64Traits](tt, "drop1", sdkinstrument.AsyncCounter) - cntrDrop2 := testObserver[float64, number.Float64Traits](tt, "drop2", sdkinstrument.AsyncCounter) - cntrKeep := testObserver[float64, number.Float64Traits](tt, "keep", sdkinstrument.AsyncCounter) + cntrDrop1 := testFloatObserver(tt, "drop1", sdkinstrument.AsyncCounter) + cntrDrop2 := testFloatObserver(tt, "drop2", sdkinstrument.AsyncCounter) + cntrKeep := testFloatObserver(tt, "keep", sdkinstrument.AsyncCounter) - cb, _ := NewCallback([]instrument.Asynchronous{cntrDrop1, cntrDrop2, cntrKeep}, tt, func(ctx context.Context) { - cntrKeep.Observe(ctx, 1000) - cntrDrop1.Observe(ctx, 1001) - cntrDrop2.Observe(ctx, 1002) + cb, _ := NewCallback([]instrument.Asynchronous{cntrDrop1, cntrDrop2, cntrKeep}, tt, func(ctx context.Context, obs metric.Observer) error { + obs.ObserveFloat64(cntrKeep, 1000) + obs.ObserveFloat64(cntrDrop1, 1001) + obs.ObserveFloat64(cntrDrop2, 1002) + return nil }) runFor := func(num int) { @@ -310,9 +302,9 @@ func TestCallbackDisabledInstrument(t *testing.T) { cb.Run(context.Background(), state) - cntrKeep.inst.SnapshotAndProcess(state) - cntrDrop1.inst.SnapshotAndProcess(state) - cntrDrop2.inst.SnapshotAndProcess(state) + cntrKeep.SnapshotAndProcess(state) + cntrDrop1.SnapshotAndProcess(state) + cntrDrop2.SnapshotAndProcess(state) } runFor(0) @@ -326,7 +318,7 @@ func TestCallbackDisabledInstrument(t *testing.T) { testSequence, ), test.Instrument( - cntrKeep.inst.descriptor, + cntrKeep.descriptor, test.Point(startTime, endTime, sum.NewMonotonicFloat64(1000), aggregation.CumulativeTemporality), ), ) @@ -338,11 +330,11 @@ func TestCallbackDisabledInstrument(t *testing.T) { testSequence, ), test.Instrument( - cntrDrop1.inst.descriptor, + cntrDrop1.descriptor, test.Point(startTime, endTime, sum.NewMonotonicFloat64(1001), aggregation.CumulativeTemporality), ), test.Instrument( - cntrKeep.inst.descriptor, + cntrKeep.descriptor, test.Point(startTime, endTime, sum.NewMonotonicFloat64(1000), aggregation.CumulativeTemporality), ), ) @@ -353,19 +345,20 @@ func TestOutOfRangeValues(t *testing.T) { tt := testAsync("test") - c := testObserver[float64, number.Float64Traits](tt, "testPatternC", sdkinstrument.AsyncCounter) - u := testObserver[float64, number.Float64Traits](tt, "testPatternU", sdkinstrument.AsyncUpDownCounter) - g := testObserver[float64, number.Float64Traits](tt, "testPatternG", sdkinstrument.AsyncGauge) + c := testFloatObserver(tt, "testPatternC", sdkinstrument.AsyncCounter) + u := testFloatObserver(tt, "testPatternU", sdkinstrument.AsyncUpDownCounter) + g := testFloatObserver(tt, "testPatternG", sdkinstrument.AsyncGauge) cb, _ := NewCallback([]instrument.Asynchronous{ c, u, g, - }, tt, func(ctx context.Context) { - c.Observe(ctx, math.NaN()) - c.Observe(ctx, math.Inf(+1)) - u.Observe(ctx, math.NaN()) - u.Observe(ctx, math.Inf(+1)) - g.Observe(ctx, math.NaN()) - g.Observe(ctx, math.Inf(+1)) + }, tt, func(ctx context.Context, obs metric.Observer) error { + obs.ObserveFloat64(c, math.NaN()) + obs.ObserveFloat64(c, math.Inf(+1)) + obs.ObserveFloat64(u, math.NaN()) + obs.ObserveFloat64(u, math.Inf(+1)) + obs.ObserveFloat64(g, math.NaN()) + obs.ObserveFloat64(g, math.Inf(+1)) + return nil }) runFor := func(num int) { @@ -373,9 +366,9 @@ func TestOutOfRangeValues(t *testing.T) { cb.Run(context.Background(), state) - c.inst.SnapshotAndProcess(state) - u.inst.SnapshotAndProcess(state) - g.inst.SnapshotAndProcess(state) + c.SnapshotAndProcess(state) + u.SnapshotAndProcess(state) + g.SnapshotAndProcess(state) } for i := 0; i < 2; i++ { @@ -389,13 +382,13 @@ func TestOutOfRangeValues(t *testing.T) { testSequence, ), test.Instrument( - c.inst.descriptor, + c.descriptor, ), test.Instrument( - u.inst.descriptor, + u.descriptor, ), test.Instrument( - g.inst.descriptor, + g.descriptor, ), ) } diff --git a/lightstep/sdk/metric/internal/asyncstate/callback.go b/lightstep/sdk/metric/internal/asyncstate/callback.go index 22fd7b79..06c39f72 100644 --- a/lightstep/sdk/metric/internal/asyncstate/callback.go +++ b/lightstep/sdk/metric/internal/asyncstate/callback.go @@ -19,6 +19,9 @@ import ( "fmt" "sync" + "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/instrument" ) @@ -26,16 +29,16 @@ import ( // asynchronous callback. type Callback struct { // function is the user-provided callback function. - function func(context.Context) + function metric.Callback // instruments are the set of instruments permitted to be used // inside this callback. - instruments map[*Instrument]struct{} + instruments map[*Observer]struct{} } // NewCallback returns a new Callback; this checks that each of the // provided instruments belongs to the same meter provider. -func NewCallback(instruments []instrument.Asynchronous, opaque interface{}, function func(context.Context)) (*Callback, error) { +func NewCallback(instruments []instrument.Asynchronous, opaque interface{}, function metric.Callback) (*Callback, error) { if len(instruments) == 0 { return nil, fmt.Errorf("asynchronous callback without instruments") } @@ -45,15 +48,15 @@ func NewCallback(instruments []instrument.Asynchronous, opaque interface{}, func cb := &Callback{ function: function, - instruments: map[*Instrument]struct{}{}, + instruments: map[*Observer]struct{}{}, } for _, inst := range instruments { - ai, ok := inst.(memberInstrument) + thisInstImpl, ok := inst.(implementation) if !ok { return nil, fmt.Errorf("asynchronous instrument does not belong to this SDK: %T", inst) } - thisInst := ai.instrument() + thisInst := thisInstImpl.get() if thisInst.opaque != opaque { return nil, fmt.Errorf("asynchronous instrument belongs to a different meter") } @@ -71,7 +74,7 @@ func (c *Callback) Run(ctx context.Context, state *State) { callback: c, state: state, } - c.function(context.WithValue(ctx, contextKey{}, cp)) + c.function(ctx, cp) cp.invalidate() } @@ -89,14 +92,22 @@ type callbackState struct { state *State } -func (cp *callbackState) invalidate() { - cp.lock.Lock() - defer cp.lock.Unlock() - cp.callback = nil +func (cs *callbackState) invalidate() { + cs.lock.Lock() + defer cs.lock.Unlock() + cs.callback = nil } -func (cp *callbackState) getCallback() *Callback { - cp.lock.Lock() - defer cp.lock.Unlock() - return cp.callback +func (cs *callbackState) getCallback() *Callback { + cs.lock.Lock() + defer cs.lock.Unlock() + return cs.callback +} + +func (cs *callbackState) ObserveFloat64(obsrv instrument.Float64Observable, value float64, attributes ...attribute.KeyValue) { + Observe[float64, number.Float64Traits](obsrv, cs, value, attributes) +} + +func (cs *callbackState) ObserveInt64(obsrv instrument.Int64Observable, value int64, attributes ...attribute.KeyValue) { + Observe[int64, number.Int64Traits](obsrv, cs, value, attributes) } diff --git a/lightstep/sdk/metric/internal/asyncstate/observer.go b/lightstep/sdk/metric/internal/asyncstate/observer.go deleted file mode 100644 index a746a6df..00000000 --- a/lightstep/sdk/metric/internal/asyncstate/observer.go +++ /dev/null @@ -1,66 +0,0 @@ -// 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 asyncstate // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/asyncstate" - -import ( - "context" - - "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/asyncfloat64" - "go.opentelemetry.io/otel/metric/instrument/asyncint64" -) - -// Observer is a generic (int64 or float64) instrument which -// satisfies any of the asynchronous instrument API interfaces. -type Observer[N number.Any, Traits number.Traits[N]] struct { - instrument.Asynchronous // Note: wasted space - - inst *Instrument -} - -// Observer implements 6 instruments and memberInstrument. -var ( - _ asyncint64.Counter = Observer[int64, number.Int64Traits]{} - _ asyncint64.UpDownCounter = Observer[int64, number.Int64Traits]{} - _ asyncint64.Gauge = Observer[int64, number.Int64Traits]{} - _ memberInstrument = Observer[int64, number.Int64Traits]{} - - _ asyncfloat64.Counter = Observer[float64, number.Float64Traits]{} - _ asyncfloat64.UpDownCounter = Observer[float64, number.Float64Traits]{} - _ asyncfloat64.Gauge = Observer[float64, number.Float64Traits]{} - _ memberInstrument = Observer[float64, number.Float64Traits]{} -) - -// memberInstrument indicates whether a user-provided -// instrument was returned by this SDK. -type memberInstrument interface { - instrument() *Instrument -} - -// NewObserver returns an generic value suitable for use as any of the -// asynchronous instrument APIs. -func NewObserver[N number.Any, Traits number.Traits[N]](inst *Instrument) Observer[N, Traits] { - return Observer[N, Traits]{inst: inst} -} - -func (o Observer[N, Traits]) instrument() *Instrument { - return o.inst -} - -func (o Observer[N, Traits]) Observe(ctx context.Context, value N, attrs ...attribute.KeyValue) { - capture[N, Traits](ctx, o.inst, value, attrs) -} diff --git a/lightstep/sdk/metric/internal/syncstate/counter.go b/lightstep/sdk/metric/internal/syncstate/counter.go deleted file mode 100644 index 66fcfb84..00000000 --- a/lightstep/sdk/metric/internal/syncstate/counter.go +++ /dev/null @@ -1,50 +0,0 @@ -// 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 syncstate // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/syncstate" - -import ( - "context" - - "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/syncfloat64" - "go.opentelemetry.io/otel/metric/instrument/syncint64" -) - -// Counter is a synchronous instrument having an Add() method. -type Counter[N number.Any, Traits number.Traits[N]] struct { - instrument.Synchronous // Note: wasted space - - inst *Instrument -} - -// Counter satisfies 4 instrument APIs. -var ( - _ syncint64.Counter = Counter[int64, number.Int64Traits]{} - _ syncint64.UpDownCounter = Counter[int64, number.Int64Traits]{} - _ syncfloat64.Counter = Counter[float64, number.Float64Traits]{} - _ syncfloat64.UpDownCounter = Counter[float64, number.Float64Traits]{} -) - -// NewCounter returns a value that implements the Counter and UpDownCounter APIs. -func NewCounter[N number.Any, Traits number.Traits[N]](inst *Instrument) Counter[N, Traits] { - return Counter[N, Traits]{inst: inst} -} - -// Add increments a Counter or UpDownCounter. -func (c Counter[N, Traits]) Add(ctx context.Context, incr N, attrs ...attribute.KeyValue) { - capture[N, Traits](ctx, c.inst, incr, attrs) -} diff --git a/lightstep/sdk/metric/internal/syncstate/histogram.go b/lightstep/sdk/metric/internal/syncstate/histogram.go deleted file mode 100644 index a35b90e3..00000000 --- a/lightstep/sdk/metric/internal/syncstate/histogram.go +++ /dev/null @@ -1,48 +0,0 @@ -// 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 syncstate // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/syncstate" - -import ( - "context" - - "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/syncfloat64" - "go.opentelemetry.io/otel/metric/instrument/syncint64" -) - -// Histogram is a synchronous instrument having a Record() method. -type Histogram[N number.Any, Traits number.Traits[N]] struct { - instrument.Synchronous // Note: wasted space - - inst *Instrument -} - -// Histogram satisfies 2 instrument APIs. -var ( - _ syncint64.Histogram = Histogram[int64, number.Int64Traits]{} - _ syncfloat64.Histogram = Histogram[float64, number.Float64Traits]{} -) - -// NewCounter returns a value that implements the Histogram API. -func NewHistogram[N number.Any, Traits number.Traits[N]](inst *Instrument) Histogram[N, Traits] { - return Histogram[N, Traits]{inst: inst} -} - -// Record records a Histogram observation. -func (h Histogram[N, Traits]) Record(ctx context.Context, incr N, attrs ...attribute.KeyValue) { - capture[N, Traits](ctx, h.inst, incr, attrs) -} diff --git a/lightstep/sdk/metric/internal/syncstate/sync.go b/lightstep/sdk/metric/internal/syncstate/sync.go index 45a89f0f..b4ff4908 100644 --- a/lightstep/sdk/metric/internal/syncstate/sync.go +++ b/lightstep/sdk/metric/internal/syncstate/sync.go @@ -27,6 +27,7 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric/instrument" ) var sortableAttributesPool = sync.Pool{ @@ -42,7 +43,9 @@ var sortableAttributesPool = sync.Pool{ // Entries in the map have their accumulator's SnapshotAndProcess() // method called whenever they are removed from the map, which can // happen when any reader collects the instrument. -type Instrument struct { +type Observer struct { + instrument.Synchronous + // descriptor is the API-provided descriptor for the // instrument, unmodified by views. descriptor sdkinstrument.Descriptor @@ -60,11 +63,11 @@ type Instrument struct { current map[uint64]*record } -// NewInstruments builds a new synchronous instrument given the +// New builds a new synchronous instrument given the // per-pipeline instrument-views compiled. Note that the unused // second parameter is an opaque value used in the asyncstate package, // passed here to make these two packages generalize. -func NewInstrument(desc sdkinstrument.Descriptor, _ interface{}, compiled pipeline.Register[viewstate.Instrument]) *Instrument { +func New(desc sdkinstrument.Descriptor, _ interface{}, compiled pipeline.Register[viewstate.Instrument]) *Observer { var nonnil []viewstate.Instrument for _, comp := range compiled { if comp != nil { @@ -75,7 +78,7 @@ func NewInstrument(desc sdkinstrument.Descriptor, _ interface{}, compiled pipeli // When no readers enable the instrument, no need for an instrument. return nil } - return &Instrument{ + return &Observer{ descriptor: desc, current: map[uint64]*record{}, @@ -94,7 +97,7 @@ func NewInstrument(desc sdkinstrument.Descriptor, _ interface{}, compiled pipeli // SnapshotAndProcess calls SnapshotAndProcess() for all live // accumulators of this instrument. Inactive accumulators will be // subsequently removed from the map. -func (inst *Instrument) SnapshotAndProcess() { +func (inst *Observer) SnapshotAndProcess() { inst.lock.Lock() defer inst.lock.Unlock() @@ -143,7 +146,7 @@ func (inst *Instrument) SnapshotAndProcess() { } // singleSnapshotAndProcess -func (inst *Instrument) singleSnapshotAndProcess(fp uint64, rec *record) bool { +func (inst *Observer) singleSnapshotAndProcess(fp uint64, rec *record) bool { if rec.conditionalSnapshotAndProcess(false) { return true } @@ -218,8 +221,16 @@ func (rec *record) conditionalSnapshotAndProcess(release bool) bool { return true } -// capture performs a single update for any synchronous instrument. -func capture[N number.Any, Traits number.Traits[N]](_ context.Context, inst *Instrument, num N, attrs []attribute.KeyValue) { +func (inst *Observer) ObserveInt64(ctx context.Context, num int64, attrs ...attribute.KeyValue) { + Observe[int64, number.Int64Traits](ctx, inst, num, attrs...) +} + +func (inst *Observer) ObserveFloat64(ctx context.Context, num float64, attrs ...attribute.KeyValue) { + Observe[float64, number.Float64Traits](ctx, inst, num, attrs...) +} + +// Observe performs a generic update for any synchronous instrument. +func Observe[N number.Any, Traits number.Traits[N]](_ context.Context, inst *Observer, num N, attrs ...attribute.KeyValue) { if inst == nil { // Instrument was completely disabled by the view. return @@ -335,7 +346,7 @@ func attributesEqual(a, b []attribute.KeyValue) bool { } // acquireRead acquires the read lock and searches for a `*record`. -func acquireRead(inst *Instrument, fp uint64, attrs []attribute.KeyValue) *record { +func acquireRead(inst *Observer, fp uint64, attrs []attribute.KeyValue) *record { inst.lock.Lock() defer inst.lock.Unlock() @@ -359,7 +370,7 @@ func acquireRead(inst *Instrument, fp uint64, attrs []attribute.KeyValue) *recor // acquireRecord gets or creates a `*record` corresponding to `attrs`, // the input attributes. -func acquireRecord[N number.Any](inst *Instrument, attrs []attribute.KeyValue) *record { +func acquireRecord[N number.Any](inst *Observer, attrs []attribute.KeyValue) *record { fp := fingerprintAttributes(attrs) rec := acquireRead(inst, fp, attrs) @@ -404,7 +415,7 @@ func acquireRecord[N number.Any](inst *Instrument, attrs []attribute.KeyValue) * } // acquireWrite acquires the write lock and gets or sets a `*record`. -func acquireWrite(inst *Instrument, fp uint64, newRec *record) (*record, bool) { +func acquireWrite(inst *Observer, fp uint64, newRec *record) (*record, bool) { inst.lock.Lock() defer inst.lock.Unlock() diff --git a/lightstep/sdk/metric/internal/syncstate/sync_test.go b/lightstep/sdk/metric/internal/syncstate/sync_test.go index ad17659b..47abff31 100644 --- a/lightstep/sdk/metric/internal/syncstate/sync_test.go +++ b/lightstep/sdk/metric/internal/syncstate/sync_test.go @@ -37,7 +37,6 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/view" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric/instrument" "go.opentelemetry.io/otel/sdk/instrumentation" ) @@ -143,12 +142,9 @@ func testSyncStateConcurrency[N number.Any, Traits number.Traits[N]](t *testing. pipes[vci], _ = vcs[vci].Compile(desc) } - inst := NewInstrument(desc, nil, pipes) + inst := New(desc, nil, pipes) require.NotNil(t, inst) - cntr := NewCounter[N, Traits](inst) - require.NotNil(t, cntr) - ctx, cancel := context.WithCancel(context.Background()) partialCounts := make([]map[attribute.Set]N, numReaders) @@ -203,7 +199,7 @@ func testSyncStateConcurrency[N number.Any, Traits number.Traits[N]](t *testing. rnd := rand.New(rand.NewSource(rand.Int63())) for j := 0; j < numUpdates/numRoutines; j++ { - cntr.Add(ctx, 1, attrs[rnd.Intn(len(attrs))]) + Observe[N, Traits](ctx, inst, 1, attrs[rnd.Intn(len(attrs))]) } }() } @@ -245,15 +241,12 @@ func TestSyncStatePartialNoopInstrument(t *testing.T) { require.Nil(t, pipes[0]) require.NotNil(t, pipes[1]) - inst := NewInstrument(desc, nil, pipes) + inst := New(desc, nil, pipes) require.NotNil(t, inst) - hist := NewHistogram[float64, number.Float64Traits](inst) - require.NotNil(t, hist) - - hist.Record(ctx, 1) - hist.Record(ctx, 2) - hist.Record(ctx, 3) + inst.ObserveFloat64(ctx, 1) + inst.ObserveFloat64(ctx, 2) + inst.ObserveFloat64(ctx, 3) inst.SnapshotAndProcess() @@ -316,15 +309,12 @@ func TestSyncStateFullNoopInstrument(t *testing.T) { require.Nil(t, pipes[0]) require.Nil(t, pipes[1]) - inst := NewInstrument(desc, nil, pipes) + inst := New(desc, nil, pipes) require.Nil(t, inst) - hist := NewHistogram[float64, number.Float64Traits](inst) - require.NotNil(t, hist) - - hist.Record(ctx, 1) - hist.Record(ctx, 2) - hist.Record(ctx, 3) + inst.ObserveFloat64(ctx, 1) + inst.ObserveFloat64(ctx, 2) + inst.ObserveFloat64(ctx, 3) // There's no instrument, nothing to Snapshot require.Equal(t, 0, len(vcs[0].Collectors())) @@ -352,23 +342,19 @@ func TestOutOfRangeValues(t *testing.T) { pipes := make(pipeline.Register[viewstate.Instrument], 1) pipes[0], _ = vcs[0].Compile(desc) - inst := NewInstrument(desc, nil, pipes) + inst := New(desc, nil, pipes) require.NotNil(t, inst) var negOne aggregation.Aggregation if desc.NumberKind == number.Float64Kind { - cntr := NewCounter[float64, number.Float64Traits](inst) - - cntr.Add(ctx, -1) - cntr.Add(ctx, math.NaN()) - cntr.Add(ctx, math.Inf(+1)) - cntr.Add(ctx, math.Inf(-1)) + inst.ObserveFloat64(ctx, -1) + inst.ObserveFloat64(ctx, math.NaN()) + inst.ObserveFloat64(ctx, math.Inf(+1)) + inst.ObserveFloat64(ctx, math.Inf(-1)) negOne = sum.NewNonMonotonicFloat64(-1) } else { - cntr := NewCounter[int64, number.Int64Traits](inst) - - cntr.Add(ctx, -1) + inst.ObserveInt64(ctx, -1) negOne = sum.NewNonMonotonicInt64(-1) } @@ -439,33 +425,29 @@ func TestSyncGaugeDeltaInstrument(t *testing.T) { indesc := test.Descriptor( "syncgauge", sdkinstrument.SyncUpDownCounter, - number.Float64Kind, - instrument.WithDescription(`{ + number.Float64Kind) + indesc.Description = `{ "aggregation": "gauge", "description": "incredible" -}`)) +}` outdesc := test.Descriptor( "syncgauge", sdkinstrument.SyncUpDownCounter, - number.Float64Kind, - instrument.WithDescription("incredible"), - ) + number.Float64Kind) + outdesc.Description = "incredible" pipes := make(pipeline.Register[viewstate.Instrument], 1) pipes[0], _ = vcs[0].Compile(indesc) require.NotNil(t, pipes[0]) - inst := NewInstrument(indesc, nil, pipes) + inst := New(indesc, nil, pipes) require.NotNil(t, inst) - sg := NewCounter[float64, number.Float64Traits](inst) - require.NotNil(t, sg) - - sg.Add(ctx, 1) - sg.Add(ctx, 2) - sg.Add(ctx, 3) + inst.ObserveFloat64(ctx, 1) + inst.ObserveFloat64(ctx, 2) + inst.ObserveFloat64(ctx, 3) inst.SnapshotAndProcess() test.RequireEqualMetrics( @@ -499,8 +481,8 @@ func TestSyncGaugeDeltaInstrument(t *testing.T) { ) // Set again - sg.Add(ctx, 172) - sg.Add(ctx, 175) + inst.ObserveFloat64(ctx, 172) + inst.ObserveFloat64(ctx, 175) inst.SnapshotAndProcess() test.RequireEqualMetrics( @@ -520,8 +502,8 @@ func TestSyncGaugeDeltaInstrument(t *testing.T) { ) // Set different attribute sets, leave the first (empty set) unused. - sg.Add(ctx, 1333, attribute.String("A", "B")) - sg.Add(ctx, 1337, attribute.String("C", "D")) + inst.ObserveFloat64(ctx, 1333, attribute.String("A", "B")) + inst.ObserveFloat64(ctx, 1337, attribute.String("C", "D")) inst.SnapshotAndProcess() test.RequireEqualMetrics( @@ -550,10 +532,10 @@ func TestSyncGaugeDeltaInstrument(t *testing.T) { // sequence number (as opposed to random choice, which would // happen naturally b/c of map iteration). for i := 0; i < 1000; i++ { - sg.Add(ctx, float64(i), attribute.Int("ignored", i), attribute.String("A", "B")) + inst.ObserveFloat64(ctx, float64(i), attribute.Int("ignored", i), attribute.String("A", "B")) } for i := 1000; i > 0; i-- { - sg.Add(ctx, float64(i), attribute.Int("ignored", i), attribute.String("C", "D")) + inst.ObserveFloat64(ctx, float64(i), attribute.Int("ignored", i), attribute.String("C", "D")) } inst.SnapshotAndProcess() @@ -755,17 +737,14 @@ func TestDuplicateFingerprint(t *testing.T) { require.NotNil(t, pipes[0]) require.NotNil(t, pipes[1]) - inst := NewInstrument(desc, nil, pipes) + inst := New(desc, nil, pipes) require.NotNil(t, inst) - sg := NewCounter[float64, number.Float64Traits](inst) - require.NotNil(t, sg) - attr1 := attribute.Int64(fpKey, fpInt1) attr2 := attribute.Int64(fpKey, fpInt2) - sg.Add(ctx, 1, attr1) - sg.Add(ctx, 2, attr2) + inst.ObserveFloat64(ctx, 1, attr1) + inst.ObserveFloat64(ctx, 2, attr2) // collect reader 0 inst.SnapshotAndProcess() @@ -812,8 +791,8 @@ func TestDuplicateFingerprint(t *testing.T) { require.Equal(t, 0, vcs[0].Collectors()[0].Size()) // Use both again, collect reader 0 again - sg.Add(ctx, 5, attr1) - sg.Add(ctx, 6, attr2) + inst.ObserveFloat64(ctx, 5, attr1) + inst.ObserveFloat64(ctx, 6, attr2) inst.SnapshotAndProcess() test.RequireEqualMetrics( @@ -842,7 +821,7 @@ func TestDuplicateFingerprint(t *testing.T) { require.Equal(t, 2, vcs[0].Collectors()[0].Size()) // Update attr1, collect reader 0 - sg.Add(ctx, 25, attr1) + inst.ObserveFloat64(ctx, 25, attr1) inst.SnapshotAndProcess() test.RequireEqualMetrics( @@ -866,7 +845,7 @@ func TestDuplicateFingerprint(t *testing.T) { require.Equal(t, 1, vcs[0].Collectors()[0].Size()) // Update attr2, collect reader 0 - sg.Add(ctx, 32, attr2) + inst.ObserveFloat64(ctx, 32, attr2) inst.SnapshotAndProcess() test.RequireEqualMetrics( diff --git a/lightstep/sdk/metric/internal/test/test.go b/lightstep/sdk/metric/internal/test/test.go index 5a900479..346dc03b 100644 --- a/lightstep/sdk/metric/internal/test/test.go +++ b/lightstep/sdk/metric/internal/test/test.go @@ -28,14 +28,17 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/instrument" + "go.opentelemetry.io/otel/metric/unit" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/resource" ) -func Descriptor(name string, ik sdkinstrument.Kind, nk number.Kind, opts ...instrument.Option) sdkinstrument.Descriptor { - cfg := instrument.NewConfig(opts...) - return sdkinstrument.NewDescriptor(name, ik, nk, cfg.Description(), cfg.Unit()) +func Descriptor(name string, ik sdkinstrument.Kind, nk number.Kind) sdkinstrument.Descriptor { + return sdkinstrument.NewDescriptor(name, ik, nk, "", "") +} + +func DescriptorDescUnit(name string, ik sdkinstrument.Kind, nk number.Kind, desc string, unit unit.Unit) sdkinstrument.Descriptor { + return sdkinstrument.NewDescriptor(name, ik, nk, desc, unit) } func Point(start, end time.Time, agg aggregation.Aggregation, tempo aggregation.Temporality, kvs ...attribute.KeyValue) data.Point { diff --git a/lightstep/sdk/metric/internal/viewstate/viewstate_test.go b/lightstep/sdk/metric/internal/viewstate/viewstate_test.go index 83ff5fca..1c01ce80 100644 --- a/lightstep/sdk/metric/internal/viewstate/viewstate_test.go +++ b/lightstep/sdk/metric/internal/viewstate/viewstate_test.go @@ -37,7 +37,7 @@ import ( "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/view" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric/instrument" + "go.opentelemetry.io/otel/metric/unit" "go.opentelemetry.io/otel/sdk/instrumentation" ) @@ -120,8 +120,12 @@ const ( delta = aggregation.DeltaTemporality ) -func testCompile(vc *Compiler, name string, ik sdkinstrument.Kind, nk number.Kind, opts ...instrument.Option) (Instrument, error) { - inst, conflicts := vc.Compile(test.Descriptor(name, ik, nk, opts...)) +func testCompile(vc *Compiler, name string, ik sdkinstrument.Kind, nk number.Kind) (Instrument, error) { + return testCompileDescUnit(vc, name, ik, nk, "", "") +} + +func testCompileDescUnit(vc *Compiler, name string, ik sdkinstrument.Kind, nk number.Kind, desc string, unit unit.Unit) (Instrument, error) { + inst, conflicts := vc.Compile(sdkinstrument.NewDescriptor(name, ik, nk, desc, unit)) return inst, conflicts.AsError() } @@ -227,11 +231,11 @@ func TestDuplicateSyncAsyncConflict(t *testing.T) { func TestDuplicateUnitConflict(t *testing.T) { vc := New(testLib, view.New("test")) - inst1, err1 := testCompile(vc, "foo", sdkinstrument.SyncCounter, number.Float64Kind, instrument.WithUnit("gal_us")) + inst1, err1 := testCompileDescUnit(vc, "foo", sdkinstrument.SyncCounter, number.Float64Kind, "", "gal_us") require.NoError(t, err1) require.NotNil(t, inst1) - inst2, err2 := testCompile(vc, "foo", sdkinstrument.SyncCounter, number.Float64Kind, instrument.WithUnit("cft_i")) + inst2, err2 := testCompileDescUnit(vc, "foo", sdkinstrument.SyncCounter, number.Float64Kind, "", "cft_i") require.Error(t, err2) require.NotNil(t, inst2) require.True(t, errors.Is(err2, ViewConflictsError{})) @@ -418,11 +422,11 @@ func TestDuplicatesMergeDescriptor(t *testing.T) { require.NotNil(t, inst1) // This is the winning description: - inst2, err2 := testCompile(vc, "foo", sdkinstrument.SyncCounter, number.Int64Kind, instrument.WithDescription("very long")) + inst2, err2 := testCompileDescUnit(vc, "foo", sdkinstrument.SyncCounter, number.Int64Kind, "very long", "") require.NoError(t, err2) require.NotNil(t, inst2) - inst3, err3 := testCompile(vc, "foo", sdkinstrument.SyncCounter, number.Int64Kind, instrument.WithDescription("shorter")) + inst3, err3 := testCompileDescUnit(vc, "foo", sdkinstrument.SyncCounter, number.Int64Kind, "shorter", "") require.NoError(t, err3) require.NotNil(t, inst3) @@ -438,7 +442,7 @@ func TestDuplicatesMergeDescriptor(t *testing.T) { require.Equal(t, 1, len(output)) require.Equal(t, test.Instrument( - test.Descriptor("bar", sdkinstrument.SyncCounter, number.Int64Kind, instrument.WithDescription("very long")), + sdkinstrument.NewDescriptor("bar", sdkinstrument.SyncCounter, number.Int64Kind, "very long", ""), test.Point(startTime, endTime, sum.NewMonotonicInt64(1), cumulative)), output[0], ) } @@ -455,9 +459,9 @@ func TestViewDescription(t *testing.T) { vc := New(testLib, views) - inst1, err1 := testCompile(vc, + inst1, err1 := testCompileDescUnit(vc, "foo", sdkinstrument.SyncCounter, number.Int64Kind, - instrument.WithDescription("other description"), + "other description", "", ) require.NoError(t, err1) require.NotNil(t, inst1) @@ -475,9 +479,9 @@ func TestViewDescription(t *testing.T) { require.Equal(t, 1, len(output)) require.Equal(t, test.Instrument( - test.Descriptor( + sdkinstrument.NewDescriptor( "foo", sdkinstrument.SyncCounter, number.Int64Kind, - instrument.WithDescription("something helpful"), + "something helpful", "", ), test.Point(startTime, endTime, sum.NewMonotonicInt64(1), cumulative, attribute.String("K", "V")), ), @@ -1096,16 +1100,16 @@ func TestDeltaTemporalitySyncGauge(t *testing.T) { return aggregation.DeltaTemporality }), ) - asGauge := instrument.WithDescription(`{ + const asGaugeDesc = `{ "aggregation": "gauge" -}`) +}` vc := New(testLib, views) - instF, err := testCompile(vc, "gaugeF", sdkinstrument.SyncUpDownCounter, number.Float64Kind, asGauge) + instF, err := testCompileDescUnit(vc, "gaugeF", sdkinstrument.SyncUpDownCounter, number.Float64Kind, asGaugeDesc, "") require.NoError(t, err) - instI, err := testCompile(vc, "gaugeI", sdkinstrument.SyncUpDownCounter, number.Int64Kind, asGauge) + instI, err := testCompileDescUnit(vc, "gaugeI", sdkinstrument.SyncUpDownCounter, number.Int64Kind, asGaugeDesc, "") require.NoError(t, err) set := attribute.NewSet() @@ -1505,41 +1509,45 @@ func TestViewHints(t *testing.T) { vc := New(testLib, views) otelErrs := test.OTelErrors() - histo, err := testCompile( + histo, err := testCompileDescUnit( vc, "histo", sdkinstrument.SyncCounter, // counter->small histogram number.Float64Kind, - instrument.WithDescription(`{ + `{ "aggregation": "histogram", "config": { "histogram": { "max_size": 3 } } -}`)) +}`, + "") require.NoError(t, err) - mmsc, err := testCompile( + mmsc, err := testCompileDescUnit( vc, "mmsc", sdkinstrument.SyncHistogram, // histogram->minmaxsumcount number.Float64Kind, - instrument.WithDescription(`{ + `{ "description": "heyyy", "aggregation": "minmaxsumcount" -}`)) +}`, + "") require.NoError(t, err) - gg, err := testCompile( + gg, err := testCompileDescUnit( vc, "gauge", sdkinstrument.SyncUpDownCounter, // updowncounter->gauge number.Float64Kind, - instrument.WithDescription(`{ + `{ "description": "check it", "aggregation": "gauge" -}`)) +}`, + "", + ) require.NoError(t, err) set := attribute.NewSet(attribute.String("test", "attr")) @@ -1568,11 +1576,11 @@ func TestViewHints(t *testing.T) { test.Point(seq.Start, seq.Now, histogram.NewFloat64(histogram.NewConfig(histogram.WithMaxSize(3)), inputs...), cumulative, set.ToSlice()...), ), test.Instrument( - test.Descriptor("mmsc", sdkinstrument.SyncHistogram, number.Float64Kind, instrument.WithDescription("heyyy")), + test.DescriptorDescUnit("mmsc", sdkinstrument.SyncHistogram, number.Float64Kind, "heyyy", ""), test.Point(seq.Start, seq.Now, minmaxsumcount.NewFloat64(inputs...), cumulative, set.ToSlice()...), ), test.Instrument( - test.Descriptor("gauge", sdkinstrument.SyncUpDownCounter, number.Float64Kind, instrument.WithDescription("check it")), + test.DescriptorDescUnit("gauge", sdkinstrument.SyncUpDownCounter, number.Float64Kind, "check it", ""), test.Point(seq.Start, seq.Now, gauge.NewFloat64(inputs[numInputs-1]), cumulative, set.ToSlice()...), ), ) @@ -1585,47 +1593,52 @@ func TestViewHintErrors(t *testing.T) { vc := New(testLib, views) otelErrs := test.OTelErrors() - _, err := testCompile( + _, err := testCompileDescUnit( vc, "extra_comma", sdkinstrument.SyncCounter, number.Float64Kind, - instrument.WithDescription(`{ + `{ "aggregation": "histogram", -}`)) +}`, + "", + ) require.NoError(t, err) - _, err = testCompile( + _, err = testCompileDescUnit( vc, "accidental_json_parse", sdkinstrument.SyncHistogram, number.Float64Kind, - instrument.WithDescription("accidental { parse")) + "accidental { parse", "") require.NoError(t, err) - _, err = testCompile( + _, err = testCompileDescUnit( vc, "invalid_aggregation", sdkinstrument.SyncUpDownCounter, number.Float64Kind, - instrument.WithDescription(`{ + `{ "aggregation": "cardinality" -}`)) +}`, + "") require.NoError(t, err) - _, err = testCompile( + _, err = testCompileDescUnit( vc, "bad_max_size", sdkinstrument.SyncCounter, number.Float64Kind, - instrument.WithDescription(`{ + `{ "aggregation": "histogram", "config": { "histogram": { "max_size": -3 } } -}`)) +}`, + "", + ) require.NoError(t, err) require.Equal(t, 4, len(*otelErrs)) @@ -1649,15 +1662,16 @@ func TestViewHintNoOverrideEmpty(t *testing.T) { vc := New(testLib, views) otelErrs := test.OTelErrors() - inst, err := testCompile( + inst, err := testCompileDescUnit( vc, "histo", sdkinstrument.SyncCounter, // sdkinstrument.SyncHistogram, number.Float64Kind, - instrument.WithDescription(`{ + `{ "aggregation": "histogram" -}`), +}`, + "", ) // note empty config require.NoError(t, err) diff --git a/lightstep/sdk/metric/meter.go b/lightstep/sdk/metric/meter.go index bdc9d91d..b4c01fcd 100644 --- a/lightstep/sdk/metric/meter.go +++ b/lightstep/sdk/metric/meter.go @@ -15,7 +15,7 @@ package metric // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric" import ( - "context" + "fmt" "sync" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/asyncstate" @@ -27,63 +27,88 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/asyncfloat64" - "go.opentelemetry.io/otel/metric/instrument/asyncint64" - "go.opentelemetry.io/otel/metric/instrument/syncfloat64" - "go.opentelemetry.io/otel/metric/instrument/syncint64" + "go.opentelemetry.io/otel/metric/unit" "go.opentelemetry.io/otel/sdk/instrumentation" ) -// meter handles the creation and coordination of all metric instruments. A -// meter represents a single instrumentation scope; all metric telemetry -// produced by an instrumentation scope will use metric instruments from a -// single meter. -type meter struct { - library instrumentation.Library - provider *MeterProvider - compilers pipeline.Register[*viewstate.Compiler] - - lock sync.Mutex - byDesc map[sdkinstrument.Descriptor]interface{} - syncInsts []*syncstate.Instrument - asyncInsts []*asyncstate.Instrument - callbacks []*asyncstate.Callback -} +type ( + // meter handles the creation and coordination of all metric instruments. A + // meter represents a single instrumentation scope; all metric telemetry + // produced by an instrumentation scope will use metric instruments from a + // single meter. + meter struct { + library instrumentation.Library + provider *MeterProvider + compilers pipeline.Register[*viewstate.Compiler] + + lock sync.Mutex + byDesc map[sdkinstrument.Descriptor]interface{} + syncInsts []*syncstate.Observer + asyncInsts []*asyncstate.Observer + callbacks []*asyncstate.Callback + } + + // metricRegistration implements metric.Registration + metricRegistration struct { + lock sync.Mutex + meter *meter + callback *asyncstate.Callback + } + + // instConfig generalizes the float/int-specific + // instrument.Config interfaces. + instConfig interface { + Description() string + Unit() unit.Unit + } +) // Compile-time check meter implements metric.Meter. var _ metric.Meter = (*meter)(nil) -// AsyncInt64 returns the asynchronous integer instrument provider. -func (m *meter) AsyncInt64() asyncint64.InstrumentProvider { - return asyncint64Instruments{m} -} - -// AsyncFloat64 returns the asynchronous floating-point instrument provider. -func (m *meter) AsyncFloat64() asyncfloat64.InstrumentProvider { - return asyncfloat64Instruments{m} -} +var ErrAlreadyUnregistered = fmt.Errorf("callback was already unregistered") // RegisterCallback registers the function f to be called when any of the // insts Collect method is called. -func (m *meter) RegisterCallback(insts []instrument.Asynchronous, f func(context.Context)) error { - cb, err := asyncstate.NewCallback(insts, m, f) +func (m *meter) RegisterCallback(function metric.Callback, instruments ...instrument.Asynchronous) (metric.Registration, error) { + cb, err := asyncstate.NewCallback(instruments, m, function) + var reg metric.Registration if err == nil { m.lock.Lock() defer m.lock.Unlock() m.callbacks = append(m.callbacks, cb) + reg = &metricRegistration{ + meter: m, + callback: cb, + } } - return err + return reg, err } -// SyncInt64 returns the synchronous integer instrument provider. -func (m *meter) SyncInt64() syncint64.InstrumentProvider { - return syncint64Instruments{m} -} +// Unregister prevents the callback from being invoked in the future. +func (mr *metricRegistration) Unregister() error { + mr.lock.Lock() + defer mr.lock.Unlock() + + if mr.callback == nil { + return ErrAlreadyUnregistered + } + + mycb := mr.callback + cbs := mr.meter.callbacks + + for i := 0; i < len(cbs); i++ { + if mycb == cbs[i] { + cbs[i] = cbs[len(cbs)-1] + mr.meter.callbacks = cbs[:len(cbs)-1] + break + } + } + + mr.callback = nil -// SyncFloat64 returns the synchronous floating-point instrument provider. -func (m *meter) SyncFloat64() syncfloat64.InstrumentProvider { - return syncfloat64Instruments{m} + return nil } // instrumentConstructor refers to either the syncstate or asyncstate @@ -103,14 +128,13 @@ type instrumentConstructor[T any] func( func configureInstrument[T any]( m *meter, name string, - opts []instrument.Option, + cfg instConfig, nk number.Kind, ik sdkinstrument.Kind, listPtr *[]*T, ctor instrumentConstructor[T], ) (*T, error) { // Compute the instrument descriptor - cfg := instrument.NewConfig(opts...) desc := sdkinstrument.NewDescriptor(name, ik, nk, cfg.Description(), cfg.Unit()) m.lock.Lock() @@ -156,11 +180,11 @@ func configureInstrument[T any]( } // synchronousInstrument configures a synchronous instrument. -func (m *meter) synchronousInstrument(name string, opts []instrument.Option, nk number.Kind, ik sdkinstrument.Kind) (*syncstate.Instrument, error) { - return configureInstrument(m, name, opts, nk, ik, &m.syncInsts, syncstate.NewInstrument) +func (m *meter) synchronousInstrument(name string, cfg instConfig, nk number.Kind, ik sdkinstrument.Kind) (*syncstate.Observer, error) { + return configureInstrument(m, name, cfg, nk, ik, &m.syncInsts, syncstate.New) } // synchronousInstrument configures an asynchronous instrument. -func (m *meter) asynchronousInstrument(name string, opts []instrument.Option, nk number.Kind, ik sdkinstrument.Kind) (*asyncstate.Instrument, error) { - return configureInstrument(m, name, opts, nk, ik, &m.asyncInsts, asyncstate.NewInstrument) +func (m *meter) asynchronousInstrument(name string, cfg instConfig, nk number.Kind, ik sdkinstrument.Kind) (*asyncstate.Observer, error) { + return configureInstrument(m, name, cfg, nk, ik, &m.asyncInsts, asyncstate.New) } diff --git a/lightstep/sdk/metric/provider_test.go b/lightstep/sdk/metric/provider_test.go index a0904ed3..abe6ab17 100644 --- a/lightstep/sdk/metric/provider_test.go +++ b/lightstep/sdk/metric/provider_test.go @@ -48,7 +48,7 @@ func TestOutputReuse(t *testing.T) { res := resource.Empty() provider := NewMeterProvider(WithReader(rdr), WithResource(res)) - cntr := must(provider.Meter("test").SyncInt64().Counter("hello")) + cntr := must(provider.Meter("test").Int64Counter("hello")) var reuse data.Metrics var notime time.Time @@ -132,7 +132,7 @@ func TestOutputReuse(t *testing.T) { // >1 after (but still the same point addresses). require.Equal(t, 1, cap(reuse.Scopes)) - fcntr := must(provider.Meter("real").SyncFloat64().Counter("goodbye")) + fcntr := must(provider.Meter("real").Float64Counter("goodbye")) fcntr.Add(ctx, 2, attr) @@ -278,8 +278,8 @@ func TestDuplicateInstrumentConflict(t *testing.T) { provider := NewMeterProvider(WithReader(rdr), WithResource(res)) // int64/float64 conflicting registration - icntr := must(provider.Meter("test").SyncInt64().Counter("counter")) - fcntr, err := provider.Meter("test").SyncFloat64().Counter("counter") + icntr := must(provider.Meter("test").Int64Counter("counter")) + fcntr, err := provider.Meter("test").Float64Counter("counter") require.NotNil(t, icntr) require.NotNil(t, fcntr) @@ -291,7 +291,7 @@ func TestDuplicateInstrumentConflict(t *testing.T) { require.Contains(t, err.Error(), expected) // re-register the first instrument, get a failure - icntr2, err := provider.Meter("test").SyncInt64().Counter("counter") + icntr2, err := provider.Meter("test").Int64Counter("counter") require.Error(t, err) require.Contains(t, err.Error(), expected) require.Equal(t, icntr, icntr2) diff --git a/lightstep/sdk/metric/syncinst.go b/lightstep/sdk/metric/syncinst.go index a1b03884..d6fb73c3 100644 --- a/lightstep/sdk/metric/syncinst.go +++ b/lightstep/sdk/metric/syncinst.go @@ -15,45 +15,72 @@ package metric // import "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric" import ( + "context" + "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/internal/syncstate" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/number" "github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/sdkinstrument" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric/instrument" - "go.opentelemetry.io/otel/metric/instrument/syncfloat64" - "go.opentelemetry.io/otel/metric/instrument/syncint64" ) type ( - syncint64Instruments struct{ *meter } - syncfloat64Instruments struct{ *meter } + int64AnyCounter struct { + *syncstate.Observer + } + int64Histogram struct { + *syncstate.Observer + } + float64AnyCounter struct { + *syncstate.Observer + } + float64Histogram struct { + *syncstate.Observer + } ) -func (i syncint64Instruments) Counter(name string, opts ...instrument.Option) (syncint64.Counter, error) { - inst, err := i.synchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.SyncCounter) - return syncstate.NewCounter[int64, number.Int64Traits](inst), err +func (i int64AnyCounter) Add(ctx context.Context, value int64, attrs ...attribute.KeyValue) { + i.ObserveInt64(ctx, value, attrs...) +} + +func (i int64Histogram) Record(ctx context.Context, value int64, attrs ...attribute.KeyValue) { + i.ObserveInt64(ctx, value, attrs...) +} + +func (i float64AnyCounter) Add(ctx context.Context, value float64, attrs ...attribute.KeyValue) { + i.ObserveFloat64(ctx, value, attrs...) +} + +func (i float64Histogram) Record(ctx context.Context, value float64, attrs ...attribute.KeyValue) { + i.ObserveFloat64(ctx, value, attrs...) +} + +func (m *meter) Int64Counter(name string, opts ...instrument.Int64Option) (instrument.Int64Counter, error) { + inst, err := m.synchronousInstrument(name, instrument.NewInt64Config(opts...), number.Int64Kind, sdkinstrument.SyncCounter) + return int64AnyCounter{Observer: inst}, err } -func (i syncint64Instruments) UpDownCounter(name string, opts ...instrument.Option) (syncint64.UpDownCounter, error) { - inst, err := i.synchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.SyncUpDownCounter) - return syncstate.NewCounter[int64, number.Int64Traits](inst), err +func (m *meter) Int64UpDownCounter(name string, opts ...instrument.Int64Option) (instrument.Int64UpDownCounter, error) { + inst, err := m.synchronousInstrument(name, instrument.NewInt64Config(opts...), number.Int64Kind, sdkinstrument.SyncUpDownCounter) + return int64AnyCounter{Observer: inst}, err } -func (i syncint64Instruments) Histogram(name string, opts ...instrument.Option) (syncint64.Histogram, error) { - inst, err := i.synchronousInstrument(name, opts, number.Int64Kind, sdkinstrument.SyncHistogram) - return syncstate.NewHistogram[int64, number.Int64Traits](inst), err +func (m *meter) Int64Histogram(name string, opts ...instrument.Int64Option) (instrument.Int64Histogram, error) { + inst, err := m.synchronousInstrument(name, instrument.NewInt64Config(opts...), number.Int64Kind, sdkinstrument.SyncHistogram) + return int64Histogram{Observer: inst}, err } -func (f syncfloat64Instruments) Counter(name string, opts ...instrument.Option) (syncfloat64.Counter, error) { - inst, err := f.synchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.SyncCounter) - return syncstate.NewCounter[float64, number.Float64Traits](inst), err +func (m *meter) Float64Counter(name string, opts ...instrument.Float64Option) (instrument.Float64Counter, error) { + inst, err := m.synchronousInstrument(name, instrument.NewFloat64Config(opts...), number.Float64Kind, sdkinstrument.SyncCounter) + return float64AnyCounter{Observer: inst}, err } -func (f syncfloat64Instruments) UpDownCounter(name string, opts ...instrument.Option) (syncfloat64.UpDownCounter, error) { - inst, err := f.synchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.SyncUpDownCounter) - return syncstate.NewCounter[float64, number.Float64Traits](inst), err +func (m *meter) Float64UpDownCounter(name string, opts ...instrument.Float64Option) (instrument.Float64UpDownCounter, error) { + inst, err := m.synchronousInstrument(name, instrument.NewFloat64Config(opts...), number.Float64Kind, sdkinstrument.SyncUpDownCounter) + return float64AnyCounter{Observer: inst}, err } -func (f syncfloat64Instruments) Histogram(name string, opts ...instrument.Option) (syncfloat64.Histogram, error) { - inst, err := f.synchronousInstrument(name, opts, number.Float64Kind, sdkinstrument.SyncHistogram) - return syncstate.NewHistogram[float64, number.Float64Traits](inst), err +func (m *meter) Float64Histogram(name string, opts ...instrument.Float64Option) (instrument.Float64Histogram, error) { + inst, err := m.synchronousInstrument(name, instrument.NewFloat64Config(opts...), number.Float64Kind, sdkinstrument.SyncHistogram) + return float64Histogram{Observer: inst}, err } diff --git a/lightstep/sdk/metric/syncinst_test.go b/lightstep/sdk/metric/syncinst_test.go index 129cec6e..da24e6d1 100644 --- a/lightstep/sdk/metric/syncinst_test.go +++ b/lightstep/sdk/metric/syncinst_test.go @@ -51,12 +51,12 @@ func TestSyncInsts(t *testing.T) { ), ) - ci := must(provider.Meter("test").SyncInt64().Counter("icount")) - cf := must(provider.Meter("test").SyncFloat64().Counter("fcount")) - ui := must(provider.Meter("test").SyncInt64().UpDownCounter("iupcount")) - uf := must(provider.Meter("test").SyncFloat64().UpDownCounter("fupcount")) - hi := must(provider.Meter("test").SyncInt64().Histogram("ihistogram")) - hf := must(provider.Meter("test").SyncFloat64().Histogram("fhistogram")) + ci := must(provider.Meter("test").Int64Counter("icount")) + cf := must(provider.Meter("test").Float64Counter("fcount")) + ui := must(provider.Meter("test").Int64UpDownCounter("iupcount")) + uf := must(provider.Meter("test").Float64UpDownCounter("fupcount")) + hi := must(provider.Meter("test").Int64Histogram("ihistogram")) + hf := must(provider.Meter("test").Float64Histogram("fhistogram")) attr := attribute.String("a", "B") diff --git a/pipelines/go.mod b/pipelines/go.mod index 11bbe7bd..4b99d411 100644 --- a/pipelines/go.mod +++ b/pipelines/go.mod @@ -3,27 +3,24 @@ module github.com/lightstep/otel-launcher-go/pipelines go 1.18 require ( - // Lightstep-alternate metric SDK - github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.12.1 - // Host and runtime instrumentation - go.opentelemetry.io/contrib/instrumentation/host v0.36.4 - go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4 + go.opentelemetry.io/contrib/instrumentation/host v0.38.0 + go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0 // b3 and opentracing propagators - go.opentelemetry.io/contrib/propagators/b3 v1.12.0 - go.opentelemetry.io/contrib/propagators/ot v1.12.0 - go.opentelemetry.io/otel v1.11.2 + go.opentelemetry.io/contrib/propagators/b3 v1.13.0 + go.opentelemetry.io/contrib/propagators/ot v1.13.0 + go.opentelemetry.io/otel v1.12.0 // Standard trace SDK and gRPC OTLP exporter - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 - go.opentelemetry.io/otel/metric v0.34.0 - go.opentelemetry.io/otel/sdk v1.11.2 - go.opentelemetry.io/otel/sdk/metric v0.34.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0 + go.opentelemetry.io/otel/metric v0.35.0 + go.opentelemetry.io/otel/sdk v1.12.0 + go.opentelemetry.io/otel/sdk/metric v0.35.0 // gRPC - google.golang.org/grpc v1.51.0 + google.golang.org/grpc v1.52.3 ) require ( @@ -35,27 +32,28 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/shirou/gopsutil/v3 v3.22.9 // indirect + github.com/shirou/gopsutil/v3 v3.23.1 // indirect github.com/stretchr/testify v1.8.1 - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect - go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0 // indirect + go.opentelemetry.io/otel/trace v1.12.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/net v0.2.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.5.0 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect google.golang.org/protobuf v1.28.1 ) require ( - github.com/lightstep/otel-launcher-go/lightstep/instrumentation v1.12.1 - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 + github.com/lightstep/otel-launcher-go/lightstep/instrumentation v1.13.0 + github.com/lightstep/otel-launcher-go/lightstep/sdk/metric v1.13.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0 ) require ( diff --git a/pipelines/go.sum b/pipelines/go.sum index c2f235b0..a3407800 100644 --- a/pipelines/go.sum +++ b/pipelines/go.sum @@ -50,7 +50,6 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -64,7 +63,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -161,8 +159,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4= +github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -175,10 +173,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -189,42 +187,42 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/contrib/instrumentation/host v0.36.4 h1:2D0q/69KewnkCkOI9I9uXgi1XQXvwQIfMebMcPft0no= -go.opentelemetry.io/contrib/instrumentation/host v0.36.4/go.mod h1:IQdse+GFHec/g2M4wtj6cE4uA5PJGQjjXP/602LjHBQ= -go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4 h1:7AY5NdRzyU5s1ek3E4VK3FBnPtQ6La1i7sIn9hNgjsk= -go.opentelemetry.io/contrib/instrumentation/runtime v0.36.4/go.mod h1:yFSLOnffweT7Es+IzY1DF5KP0xa2Wl15SJfKqAyDXq8= -go.opentelemetry.io/contrib/propagators/b3 v1.12.0 h1:OtfTF8bneN8qTeo/j92kcvc0iDDm4bm/c3RzaUJfiu0= -go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= -go.opentelemetry.io/contrib/propagators/ot v1.12.0 h1:6yNXAAQW08uIwgQKQvGC/0/5KkUCZmOcwSjj8zYg1ZU= -go.opentelemetry.io/contrib/propagators/ot v1.12.0/go.mod h1:t2n1RTxGm14/AEMSELd0jJo3NBjeEHnDtCRYXKTl0Ak= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 h1:fqR1kli93643au1RKo0Uma3d2aPQKT+WBKfTSBaKbOc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLDX+sYK64rHb1FPhpn0UtxF+ouX1uhyJE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 h1:ERwKPn9Aer7Gxsc0+ZlutlH1bEEAUXAUhqm3Y45ABbk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY= -go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= -go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= -go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/contrib/instrumentation/host v0.38.0 h1:UAL4VwsGD8I87v0PUnlNvNoDK9biur6BavY6hZyHRtE= +go.opentelemetry.io/contrib/instrumentation/host v0.38.0/go.mod h1:tVaeBxRJPU0PrChJnlb4kWolV8jgzNLonwFoa1j8JAM= +go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0 h1:uTd4XAyfZ51V5w+ZOCFPiNgzVN2Yp3ibNYKvZ7hWViM= +go.opentelemetry.io/contrib/instrumentation/runtime v0.38.0/go.mod h1:LYI0Tb+eGfyp/IRpjSSERc3rv/3FT/IjqUeNNTZdJRQ= +go.opentelemetry.io/contrib/propagators/b3 v1.13.0 h1:f17PBmZK60RoHvOpJVqEka8oS2EXjpjHquESD/8zZ50= +go.opentelemetry.io/contrib/propagators/b3 v1.13.0/go.mod h1:zy2hz1TpGUoJzSwlBchVGvVAFQS8s2pglKLbrAFZ+Sc= +go.opentelemetry.io/contrib/propagators/ot v1.13.0 h1:tHWNd0WRS6w9keZoZg9aF3zYohdaBacQfojPYZJgATQ= +go.opentelemetry.io/contrib/propagators/ot v1.13.0/go.mod h1:R6Op9T6LxNaMRVlGD0wVwz40LSsAq296CXiEydKLQBU= +go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= +go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 h1:pa05sNT/P8OsIQ8mPZKTIyiBuzS/xDGLVx+DCt0y6Vs= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0 h1:KPV7w2qbszG6XnudnWDffM4CI+KjCYajryGrhoReBR4= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.35.0/go.mod h1:HKkSo2BOMO2CUdoIUuc/e4aLeMbeZaj+gNgjBj/Qdzk= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0 h1:QgnDVvLLDiLloTGHyP8wIyWtDXMx/ZHg9qNQaofry2s= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.35.0/go.mod h1:BTWTNRCV2jdeEaKP+QJWD9g86QnFzxhZfsQZ1w7cSx4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 h1:ZVqtSAxrR4+ofzayuww0/EKamCjjnwnXTMRZzMudJoU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0/go.mod h1:IlaGLENJkAl9+Xoo3J0unkdOwtL+rmqZ3ryMjUtYA94= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0 h1:+tsVdWosoqDfX6cdHAeacZozjQS94ySBd+aUXFwnNKA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.12.0/go.mod h1:jSqjV+Knu1Jyvh+l3fx7V210Ev3HHgNQAi8YqpXaQP8= +go.opentelemetry.io/otel/metric v0.35.0 h1:aPT5jk/w7F9zW51L7WgRqNKDElBdyRLGuBtI5MX34e8= +go.opentelemetry.io/otel/metric v0.35.0/go.mod h1:qAcbhaTRFU6uG8QM7dDo7XvFsWcugziq/5YI065TokQ= +go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= +go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= +go.opentelemetry.io/otel/sdk/metric v0.35.0 h1:gryV4W5GzpOhKK48/lZb8ldyWIs3DRugSVlQZmCwELA= +go.opentelemetry.io/otel/sdk/metric v0.35.0/go.mod h1:eDyp1GxSiwV98kr7w4pzrszQh/eze9MqBqPd2bCPmyE= +go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= +go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -286,10 +284,9 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -331,16 +328,13 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -348,8 +342,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -450,8 +444,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -468,9 +462,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -484,7 +477,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -494,7 +486,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pipelines/metrics_test.go b/pipelines/metrics_test.go index 69948f5a..8a0f222e 100644 --- a/pipelines/metrics_test.go +++ b/pipelines/metrics_test.go @@ -75,7 +75,7 @@ func testInsecureMetrics(t *testing.T, lightstepSDK, builtins bool) { assert.NoError(t, err) meter := metricglobal.Meter("test-library") - counter, err := meter.SyncFloat64().Counter("test-counter") + counter, err := meter.Float64Counter("test-counter") assert.NoError(t, err) counter.Add(context.Background(), 1) @@ -124,7 +124,7 @@ func testSecureMetrics(t *testing.T, lightstepSDK, builtins bool) { assert.NoError(t, err) meter := metricglobal.Meter("test-library") - counter, err := meter.SyncFloat64().Counter("test-counter") + counter, err := meter.Float64Counter("test-counter") assert.NoError(t, err) counter.Add(context.Background(), 1)