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
19 changes: 10 additions & 9 deletions ddtrace/tracer/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,16 @@ func Start(opts ...StartOption) error {
return nil
}

if t.config.runtimeMetricsV2 {
l := slog.New(slogHandler{})
opts := &runtimemetrics.Options{Logger: l}
if t.runtimeMetrics, err = runtimemetrics.NewEmitter(t.statsd, opts); err == nil {
l.Debug("Runtime metrics v2 enabled.")
} else {
l.Error("Failed to enable runtime metrics v2", "err", err.Error())
}
}

// Start AppSec with remote configuration
cfg := remoteconfig.DefaultClientConfig()
cfg.AgentURL = t.config.agentURL.String()
Expand Down Expand Up @@ -454,15 +464,6 @@ func newTracer(opts ...StartOption) (*tracer, error) {
t.reportRuntimeMetrics(defaultMetricsReportInterval)
}()
}
if c.runtimeMetricsV2 {
l := slog.New(slogHandler{})
opts := &runtimemetrics.Options{Logger: l}
if t.runtimeMetrics, err = runtimemetrics.NewEmitter(t.statsd, opts); err == nil {
l.Debug("Runtime metrics v2 enabled.")
} else {
l.Error("Failed to enable runtime metrics v2", "err", err.Error())
}
}
if c.debugAbandonedSpans {
log.Info("Abandoned spans logs enabled.")
t.abandonedSpansDebugger = newAbandonedSpansDebugger()
Expand Down
16 changes: 16 additions & 0 deletions ddtrace/tracer/tracer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2924,3 +2924,19 @@ func TestNewUnstartedTracerDDAgentHostNotFound(t *testing.T) {
_, err := newUnstartedTracer()
assert.NoError(t, err)
}

func TestTracerTwiceStartRuntimeMetrics(t *testing.T) {
// This checks that starting the tracer twice properly shuts down the
// previous tracer, specifically the runtime metrics emitter.
tp := new(log.RecordLogger)
err := Start(WithLogger(tp))
require.NoError(t, err)
err = Start(WithLogger(tp))
require.NoError(t, err)
Stop()

// Check that runtime metrics emitters lifetimes did not overlap.
for _, logMsg := range tp.Logs() {
assert.NotContains(t, logMsg, "runtimemetrics has already been started")
}
}
Loading