Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pr-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
make deps

- name: Lint files
uses: golangci/golangci-lint-action@v3.3.1
uses: golangci/golangci-lint-action@v3.4.0
with:
# Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
version: v1.50.1
Expand Down
1 change: 1 addition & 0 deletions config/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@ var defaultConfig = agentconfig.AgentConfig{
},
Telemetry: &agentconfig.Telemetry{
StartupSpanEnabled: agentconfig.Bool(true),
MetricsEnabled: agentconfig.Bool(true),
},
}
14 changes: 10 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ go 1.17
require (
contrib.go.opencensus.io/exporter/zipkin v0.1.2
github.com/gin-gonic/gin v1.7.2
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.2
github.com/google/uuid v1.1.2
github.com/gorilla/mux v1.8.0
github.com/hypertrace/agent-config/gen/go v0.0.0-20221206162312-4a295cabd009
github.com/hypertrace/agent-config/gen/go v0.0.0-20230126205246-bd4d81e696a6
github.com/json-iterator/go v1.1.11 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/mattn/go-sqlite3 v1.14.4
Expand All @@ -23,13 +25,19 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0
go.opentelemetry.io/otel/exporters/zipkin v1.10.0
go.opentelemetry.io/otel/metric v0.31.0
go.opentelemetry.io/otel/sdk v1.10.0
go.opentelemetry.io/otel/trace v1.10.0
google.golang.org/grpc v1.49.0
google.golang.org/protobuf v1.28.1
)

require github.com/google/uuid v1.1.2
require (
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.31.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.31.0
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.31.0
go.opentelemetry.io/otel/sdk/metric v0.31.0
)

require (
cloud.google.com/go v0.81.0 // indirect
Expand All @@ -39,7 +47,6 @@ require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.4.1 // indirect
Expand All @@ -52,7 +59,6 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 // indirect
go.opentelemetry.io/otel/metric v0.31.0 // indirect
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
golang.org/x/crypto v0.0.0-20210920023735-84f357641f63 // indirect
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect
Expand Down
17 changes: 15 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fT
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
Expand Down Expand Up @@ -201,8 +203,8 @@ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hypertrace/agent-config/gen/go v0.0.0-20221206162312-4a295cabd009 h1:a2Y5RfRQC3Fomz+HF3FdqdvNNMCtV/lc/N1Xuf5+au0=
github.com/hypertrace/agent-config/gen/go v0.0.0-20221206162312-4a295cabd009/go.mod h1:WRbKE44DNsSbRnHja1VpU+dUSrTIuduePGhZ+bXmvDw=
github.com/hypertrace/agent-config/gen/go v0.0.0-20230126205246-bd4d81e696a6 h1:MuiFiuigCk2NwMM5HOvI7FJUTZEsGeqA25c4acBjdEs=
github.com/hypertrace/agent-config/gen/go v0.0.0-20230126205246-bd4d81e696a6/go.mod h1:WRbKE44DNsSbRnHja1VpU+dUSrTIuduePGhZ+bXmvDw=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
Expand Down Expand Up @@ -315,24 +317,35 @@ go.opentelemetry.io/contrib/propagators/b3 v1.10.0/go.mod h1:oxvamQ/mTDFQVugml/u
go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM=
go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=
go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ=
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.8.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY=
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 h1:TaB+1rQhddO1sF71MpZOZAuSPW1klK2M8XxfrBMfK7Y=
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.31.0 h1:H0+xwv4shKw0gfj/ZqR13qO2N/dBQogB1OcRjJjV39Y=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.31.0/go.mod h1:nkenGD8vcvs0uN6WhR90ZVHQlgDsRmXicnNadMnk+XQ=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.31.0 h1:BaQ2xM5cPmldVCMvbLoy5tcLUhXCtIhItDYBNw83B7Y=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.31.0/go.mod h1:VRr8tlXQEsTdesDCh0qBe2iKDWhpi3ZqDYw6VlZ8MhI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 h1:pDDYmo0QadUPal5fwXoY1pmMpFcdyhXOmL5drCrI3vU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 h1:KtiUEhQmj/Pa874bVYKGNVdq8NPKiacPbaRRtgXi+t4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.31.0 h1:fu/wxbXqjgIRZYzQNrF175qtwrJx+oQSFhZpTIbNQLc=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.31.0/go.mod h1:a80IJcYgCLVXJurhoyPjMBiNI5gPrWXLBTAwOp8N6Vw=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0 h1:c9UtMu/qnbLlVwTwt+ABrURrioEruapIslTDYZHJe2w=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0/go.mod h1:h3Lrh9t3Dnqp3NPwAZx7i37UFX7xrfnO1D+fuClREOA=
go.opentelemetry.io/otel/exporters/zipkin v1.10.0 h1:HcPAFsFpEBKF+G5NIOA+gBsxifd3Ej+wb+KsdBLa15E=
go.opentelemetry.io/otel/exporters/zipkin v1.10.0/go.mod h1:HdfvgwcOoCB0+zzrTHycW6btjK0zNpkz2oTGO815SCI=
go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs=
go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A=
go.opentelemetry.io/otel/sdk v1.8.0/go.mod h1:uPSfc+yfDH2StDM/Rm35WE8gXSNdvCg023J6HeGNO0c=
go.opentelemetry.io/otel/sdk v1.10.0 h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY=
go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE=
go.opentelemetry.io/otel/sdk/metric v0.31.0 h1:2sZx4R43ZMhJdteKAlKoHvRgrMp53V1aRxvEf5lCq8Q=
go.opentelemetry.io/otel/sdk/metric v0.31.0/go.mod h1:fl0SmNnX9mN9xgU6OLYLMBMrNAsaZQi7qBwprwO3abk=
go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4=
go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E=
go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.opentelemetry.io/proto/otlp v0.18.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
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/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
Expand Down
2 changes: 1 addition & 1 deletion instrumentation/hypertrace/net/hyperhttp/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func NewHandler(base http.Handler, operation string, opts ...Option) http.Handle
}

return otelhttp.NewHandler(
sdkhttp.WrapHandler(base, opentelemetry.SpanFromContext, o.toSDKOptions(), map[string]string{}),
sdkhttp.WrapHandler(base, operation, opentelemetry.SpanFromContext, o.toSDKOptions(), map[string]string{}),
operation,
)
}
3 changes: 2 additions & 1 deletion instrumentation/opencensus/net/hyperhttp/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ import (
// WrapHandler returns a new http.Handler that should be passed to
// the *ochttp.Handler
func WrapHandler(delegate http.Handler, options *sdkhttp.Options) http.Handler {
return sdkhttp.WrapHandler(delegate, opencensus.SpanFromContext, options, map[string]string{})
// TODO: If I am doing this then I might have the metrics code in the wrong place.
return sdkhttp.WrapHandler(delegate, "", opencensus.SpanFromContext, options, map[string]string{})
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,16 @@ func spanNameFormatter(operation string, r *http.Request) (spanName string) {
func Middleware(options *sdkhttp.Options) gin.HandlerFunc {
return wrap(func(delegate http.Handler) http.Handler {
wrappedHandler, ok := delegate.(*nextRequestHandler)

ginOperationName := ""
// if we fail to extract the next request handler from delegate the route template won't be reported
if ok {
ginOperationName := wrappedHandler.c.FullPath()
rc := wrappedHandler.c.Request.Context()
ctx := context.WithValue(rc, hyperGinKey, ginRoute{route: wrappedHandler.c.FullPath()})
ctx := context.WithValue(rc, hyperGinKey, ginRoute{route: ginOperationName})
wrappedHandler.c.Request = wrappedHandler.c.Request.WithContext(ctx)
}
return otelhttp.NewHandler(
sdkhttp.WrapHandler(delegate, opentelemetry.SpanFromContext, options, map[string]string{}),
sdkhttp.WrapHandler(delegate, ginOperationName, opentelemetry.SpanFromContext, options, map[string]string{}),
"",
otelhttp.WithSpanNameFormatter(spanNameFormatter),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ func spanNameFormatter(operation string, r *http.Request) (spanName string) {

// NewMiddleware sets up a handler to start tracing the incoming requests.
func NewMiddleware(options *sdkhttp.Options) mux.MiddlewareFunc {
// TODO: Get a proper operation name for http gorilla mux
return func(delegate http.Handler) http.Handler {
return otelhttp.NewHandler(
sdkhttp.WrapHandler(delegate, opentelemetry.SpanFromContext, options, map[string]string{}),
sdkhttp.WrapHandler(delegate, "", opentelemetry.SpanFromContext, options, map[string]string{}),
"",
otelhttp.WithSpanNameFormatter(spanNameFormatter),
)
Expand Down
97 changes: 97 additions & 0 deletions instrumentation/opentelemetry/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"sync"
"time"

"go.opentelemetry.io/otel/exporters/otlp/otlpmetric"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/trace"

Expand All @@ -22,14 +23,22 @@ import (
config "github.com/hypertrace/agent-config/gen/go/v1"
"go.opentelemetry.io/otel/attribute"

"github.com/hypertrace/goagent/instrumentation/opentelemetry/internal/identifier"
sdkconfig "github.com/hypertrace/goagent/sdk/config"
"github.com/hypertrace/goagent/version"
"go.opentelemetry.io/contrib/propagators/b3"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
otlpgrpc "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/exporters/zipkin"
otelmetricglobal "go.opentelemetry.io/otel/metric/global"
"go.opentelemetry.io/otel/propagation"
controller "go.opentelemetry.io/otel/sdk/metric/controller/basic"
sdkmetricexport "go.opentelemetry.io/otel/sdk/metric/export"
processor "go.opentelemetry.io/otel/sdk/metric/processor/basic"
"go.opentelemetry.io/otel/sdk/metric/selector/simple"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
Expand Down Expand Up @@ -75,6 +84,53 @@ func removeProtocolPrefixForOTLP(endpoint string) string {
return pieces[1]
}

func makeMetricsExporterFactory(cfg *config.AgentConfig) func() (sdkmetricexport.Exporter, error) {
// We are only supporting logging and otlp metric exporters for now. We will add support for prometheus
// metrics later
switch cfg.Reporting.MetricReporterType {
case config.MetricReporterType_METRIC_REPORTER_TYPE_LOGGING:
// stdout exporter
return func() (sdkmetricexport.Exporter, error) {
// TODO: Define if endpoint could be a filepath to write into a file.
return stdoutmetric.New(stdoutmetric.WithPrettyPrint())
}
default:
endpoint := cfg.GetReporting().GetMetricEndpoint().GetValue()
if len(endpoint) == 0 {
endpoint = cfg.GetReporting().GetEndpoint().GetValue()
}

opts := []otlpmetricgrpc.Option{
otlpmetricgrpc.WithEndpoint(removeProtocolPrefixForOTLP(endpoint)),
}

if !cfg.GetReporting().GetSecure().GetValue() {
opts = append(opts, otlpmetricgrpc.WithInsecure())
}

certFile := cfg.GetReporting().GetCertFile().GetValue()
if len(certFile) > 0 {
if tlsCredentials, err := credentials.NewClientTLSFromFile(certFile, ""); err == nil {
opts = append(opts, otlpmetricgrpc.WithTLSCredentials(tlsCredentials))
} else {
log.Printf("error while creating tls credentials from cert path %s: %v", certFile, err)
}
}

if cfg.Reporting.GetEnableGrpcLoadbalancing().GetValue() {
resolver.SetDefaultScheme("dns")
opts = append(opts, otlpmetricgrpc.WithServiceConfig(`{"loadBalancingConfig": [ { "round_robin": {} } ]}`))
}

return func() (sdkmetricexport.Exporter, error) {
return otlpmetric.New(
context.Background(),
otlpmetricgrpc.NewClient(opts...),
)
}
}
}

func makeExporterFactory(cfg *config.AgentConfig) func() (sdktrace.SpanExporter, error) {
switch cfg.Reporting.TraceReporterType {
case config.TraceReporterType_ZIPKIN:
Expand Down Expand Up @@ -219,6 +275,9 @@ func InitWithSpanProcessorWrapper(cfg *config.AgentConfig, wrapper SpanProcessor

otel.SetTextMapPropagator(makePropagator(cfg.PropagationFormats))

// Initialize metrics
metricsShutdownFn := initializeMetrics(cfg)

traceProviders = make(map[string]*sdktrace.TracerProvider)
globalSampler = sampler
initialized = true
Expand Down Expand Up @@ -249,6 +308,8 @@ func InitWithSpanProcessorWrapper(cfg *config.AgentConfig, wrapper SpanProcessor
if err != nil {
log.Printf("error while shutting down default tracer provider: %v\n", err)
}

metricsShutdownFn()
initialized = false
enabled = false
sdkconfig.ResetConfig()
Expand Down Expand Up @@ -321,6 +382,42 @@ func RegisterServiceWithSpanProcessorWrapper(serviceName string, resourceAttribu
}), tp, nil
}

func initializeMetrics(cfg *config.AgentConfig) func() {
if cfg.GetTelemetry() == nil || !cfg.GetTelemetry().GetMetricsEnabled().GetValue() {
return func() {}
}

metricsExporterFactory := makeMetricsExporterFactory(cfg)
metricsExporter, err := metricsExporterFactory()
if err != nil {
log.Fatal(err)
Copy link
Copy Markdown
Collaborator

@ryanericson ryanericson Jan 27, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This means if metrics backend is down instrumented app won't be able to start? Better to fail silently?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the metrics/traces collector is down and you bring up the go app with this agent in it, it comes up without issue. You do get context deadline messages since you cannot export anything. After you bring up the collector the spans and metrics start being sent.

}

resourceKvps := createResources(cfg.GetServiceName().GetValue(), cfg.ResourceAttributes)
resourceKvps = append(resourceKvps, identifier.ServiceInstanceKeyValue)
metricResources, err := resource.New(context.Background(), resource.WithAttributes(resourceKvps...))
if err != nil {
log.Fatal(err)
}
metricsPusher := controller.New(
processor.NewFactory(
simple.NewWithInexpensiveDistribution(),
metricsExporter,
),
controller.WithExporter(metricsExporter),
controller.WithResource(metricResources),
)
if err := metricsPusher.Start(context.Background()); err != nil {
log.Fatalf("starting metrics push controller: %v", err)
}

otelmetricglobal.SetMeterProvider(metricsPusher)

return func() {
metricsPusher.Stop(context.Background())
}
}

// SpanProcessorWrapper wraps otel span processor
// and is responsible to delegate calls to the wrapped processor
type SpanProcessorWrapper interface {
Expand Down
5 changes: 3 additions & 2 deletions instrumentation/opentelemetry/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,10 @@ func TestMultipleTraceProviders(t *testing.T) {
assert.Equal(t, 0, count)
})

t.Run("test 2 requests after flush", func(t *testing.T) {
// 2 requests for spans and 1 for metrics.
t.Run("test 3 requests after flush", func(t *testing.T) {
shutdown()
assert.Equal(t, 2, count)
assert.Equal(t, 3, count)
assert.Equal(t, 0, len(traceProviders))
})
}
Expand Down
3 changes: 2 additions & 1 deletion instrumentation/opentelemetry/net/hyperhttp/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ import (
// WrapHandler returns a new round tripper instrumented that relies on the
// needs to be used with OTel instrumentation.
func WrapHandler(delegate http.Handler, options *sdkhttp.Options) http.Handler {
return sdkhttp.WrapHandler(delegate, opentelemetry.SpanFromContext, options, map[string]string{})
// TODO: Find another way to get the operation name
return sdkhttp.WrapHandler(delegate, "", opentelemetry.SpanFromContext, options, map[string]string{})
}
Loading