Skip to content

Commit

Permalink
Generates a random traceparent when the tracer is from a NoopTracerPr…
Browse files Browse the repository at this point in the history
…ovider (#7)

* Generates a random traceparent when the tracer is from a NoopTracerProvider

* Fix test

* no ci lint cache
  • Loading branch information
corentinmusard authored Apr 11, 2024
1 parent c7a7cbc commit aca49c0
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
1 change: 1 addition & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,4 @@ jobs:
uses: golangci/golangci-lint-action@v4
with:
version: v1.57
skip-cache: true
33 changes: 32 additions & 1 deletion observability/observability.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package observability

import (
"context"
"crypto/rand"
"fmt"
"log/slog"

adapter "github.com/axiomhq/axiom-go/adapters/slog"
Expand Down Expand Up @@ -68,12 +70,41 @@ func tracerProvider(serviceName, serviceVersion string, exporters []trace.SpanEx
return trace.NewTracerProvider(opts...)
}

// generateTraceParent generates a random traceparent.
// ex: 00-51651128eabd3c6f7695b9e6ee0e337d-03e60705fdf5efe0-01
func generateTraceParent() (string, error) {
traceID := oteltrace.TraceID{}
_, err := rand.Read(traceID[:])
if err != nil {
return "", err
}

spanID := oteltrace.SpanID{}
_, err = rand.Read(spanID[:])
if err != nil {
return "", err
}

return fmt.Sprintf("00-%s-%s-01", traceID, spanID), nil
}

func GetTraceParentOfCurrentSpan(ctx context.Context) string {
carrier := propagation.MapCarrier{}

propagator.Inject(ctx, carrier)

return carrier.Get("traceparent")
traceparent := carrier.Get("traceparent")
if traceparent == "" {
// If the tracer is from a NoopTracerProvider, it will not generate a traceparent.
// In this case, we generate a random one.
traceparent, err := generateTraceParent()
if err != nil {
slog.ErrorContext(ctx, "failed to generate traceparent", "error", err)
return ""
}
return traceparent
}
return traceparent
}

func StartJobSpan[Result any](ctx context.Context, tracer oteltrace.Tracer, spanName string, job *workflowsv1.Job, f func(ctx context.Context) (Result, error)) (Result, error) {
Expand Down
6 changes: 5 additions & 1 deletion workflows/v1/jobs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,13 @@ func TestJobService_Submit(t *testing.T) {
if len(client.reqs) != 1 {
t.Fatalf("Submit() expected 1 request, got %d", len(client.reqs))
}
if !reflect.DeepEqual(client.reqs[0], tt.wantReq) {
if !reflect.DeepEqual(client.reqs[0].GetTasks(), tt.wantReq.GetTasks()) {
t.Errorf("Submit() request = %v, want %v", client.reqs[0], tt.wantReq)
}
if !reflect.DeepEqual(client.reqs[0].GetJobName(), tt.wantReq.GetJobName()) {
t.Errorf("Submit() request = %v, want %v", client.reqs[0], tt.wantReq)
}
// We don't compare traceparent because it's generated randomly
})
}
}

0 comments on commit aca49c0

Please sign in to comment.