Skip to content

Commit

Permalink
use internal state to handle service name
Browse files Browse the repository at this point in the history
  • Loading branch information
swi-jared committed May 10, 2024
1 parent cd31590 commit 85cba6e
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 26 deletions.
2 changes: 2 additions & 0 deletions internal/reporter/reporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/solarwinds/apm-go/internal/metrics"
"github.com/solarwinds/apm-go/internal/oboe"
"github.com/solarwinds/apm-go/internal/rand"
"github.com/solarwinds/apm-go/internal/state"
"github.com/solarwinds/apm-go/internal/swotel/semconv"
"github.com/solarwinds/apm-go/internal/utils"
"go.opentelemetry.io/otel/attribute"
Expand Down Expand Up @@ -92,6 +93,7 @@ func initReporter(r *resource.Resource, registry metrics.LegacyRegistry, o oboe.
otelServiceName := ""
if sn, ok := r.Set().Value(semconv.ServiceNameKey); ok {
otelServiceName = strings.TrimSpace(sn.AsString())
state.SetServiceName(otelServiceName)
}
if rt == "none" {
return newNullReporter()
Expand Down
25 changes: 25 additions & 0 deletions internal/state/state.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// © 2023 SolarWinds Worldwide, LLC. All rights reserved.
//
// 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 state

var serviceName string

func SetServiceName(svc string) {
serviceName = svc
}

func GetServiceName() string {
return serviceName
}
13 changes: 7 additions & 6 deletions swo/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package swo
import (
"context"
"fmt"
"github.com/solarwinds/apm-go/internal/state"
"go.opentelemetry.io/otel/trace"
)

Expand All @@ -31,10 +32,11 @@ type LoggableTraceContext struct {
// Example: trace_id=d4261c67357f99f39958b14f99da7e6c span_id=1280450002ba77b3 trace_flags=01 resource.service.name=my-service
func (l LoggableTraceContext) String() string {
return fmt.Sprintf(
"trace_id=%s span_id=%s trace_flags=%s",
"trace_id=%s span_id=%s trace_flags=%s resource.service.name=%s",
l.TraceID,
l.SpanID,
l.TraceFlags,
l.ServiceName,
)
}

Expand All @@ -51,10 +53,9 @@ func LoggableTrace(ctx context.Context) LoggableTraceContext {
// LoggableTraceFromSpanContext returns a LoggableTraceContext from a given SpanContext and the configured service name
func LoggableTraceFromSpanContext(ctx trace.SpanContext) LoggableTraceContext {
return LoggableTraceContext{
TraceID: ctx.TraceID(),
SpanID: ctx.SpanID(),
TraceFlags: ctx.TraceFlags(),
// TODO FIXME
//ServiceName: reporter.GetServiceName(),
TraceID: ctx.TraceID(),
SpanID: ctx.SpanID(),
TraceFlags: ctx.TraceFlags(),
ServiceName: state.GetServiceName(),
}
}
39 changes: 19 additions & 20 deletions swo/log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,23 @@ package swo

import (
"context"
"github.com/solarwinds/apm-go/internal/oboe"
"github.com/solarwinds/apm-go/internal/oboetestutils"
"github.com/solarwinds/apm-go/internal/state"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/trace"
"testing"
)

func TestLoggableTraceIDFromContext(t *testing.T) {
o := oboe.NewOboe()
oboetestutils.AddDefaultSetting(o)

prev := state.GetServiceName()
state.SetServiceName("test-service")
defer state.SetServiceName(prev)
ctx := context.Background()
lt := LoggableTrace(ctx)
require.Equal(t, LoggableTraceContext{
TraceID: trace.TraceID{},
SpanID: trace.SpanID{},
TraceFlags: 0,
// ServiceName: "test-reporter-service",
TraceID: trace.TraceID{},
SpanID: trace.SpanID{},
TraceFlags: 0,
ServiceName: "test-service",
}, lt)
sc := trace.NewSpanContext(trace.SpanContextConfig{
TraceID: trace.TraceID{0x22},
Expand All @@ -42,20 +41,20 @@ func TestLoggableTraceIDFromContext(t *testing.T) {
})
require.False(t, lt.IsValid())
require.Equal(t,
"trace_id=00000000000000000000000000000000 span_id=0000000000000000 trace_flags=00",
"trace_id=00000000000000000000000000000000 span_id=0000000000000000 trace_flags=00 resource.service.name=test-service",
lt.String())

ctx = trace.ContextWithSpanContext(ctx, sc)
lt = LoggableTrace(ctx)
require.Equal(t, LoggableTraceContext{
TraceID: sc.TraceID(),
SpanID: sc.SpanID(),
TraceFlags: sc.TraceFlags(),
//ServiceName: "test-reporter-service",
TraceID: sc.TraceID(),
SpanID: sc.SpanID(),
TraceFlags: sc.TraceFlags(),
ServiceName: "test-service",
}, lt)
require.True(t, lt.IsValid())
require.Equal(t,
"trace_id=22000000000000000000000000000000 span_id=1100000000000000 trace_flags=01",
"trace_id=22000000000000000000000000000000 span_id=1100000000000000 trace_flags=01 resource.service.name=test-service",
lt.String())

sc = trace.NewSpanContext(trace.SpanContextConfig{
Expand All @@ -66,13 +65,13 @@ func TestLoggableTraceIDFromContext(t *testing.T) {
ctx = trace.ContextWithSpanContext(ctx, sc)
lt = LoggableTrace(ctx)
require.Equal(t, LoggableTraceContext{
TraceID: sc.TraceID(),
SpanID: sc.SpanID(),
TraceFlags: sc.TraceFlags(),
//ServiceName: "test-reporter-service",
TraceID: sc.TraceID(),
SpanID: sc.SpanID(),
TraceFlags: sc.TraceFlags(),
ServiceName: "test-service",
}, lt)
require.True(t, lt.IsValid())
require.Equal(t,
"trace_id=33000000000000000000000000000000 span_id=aa00000000000000 trace_flags=01",
"trace_id=33000000000000000000000000000000 span_id=aa00000000000000 trace_flags=01 resource.service.name=test-service",
lt.String())
}

0 comments on commit 85cba6e

Please sign in to comment.