Skip to content

Commit

Permalink
feat(prose/filter): inject span context in w3c format for presidio
Browse files Browse the repository at this point in the history
  • Loading branch information
qlonik committed Apr 29, 2024
1 parent f9e543c commit 5dfc77a
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package common

import (
"fmt"

"github.com/openzipkin/zipkin-go/model"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)

var GlobalOtelPropagator = propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{},
propagation.Baggage{},
)

func otelSpanContextFromZipkin(span model.SpanContext) (trace.SpanContext, error) {
traceFlags := trace.TraceFlags(0)
if span.Sampled == nil {
traceFlags = traceFlags.WithSampled(false)
} else {
traceFlags = traceFlags.WithSampled(*span.Sampled)
}

traceID, err := trace.TraceIDFromHex(fmt.Sprintf("%032s", span.TraceID.String()))
if err != nil {
return trace.NewSpanContext(
trace.SpanContextConfig{
TraceFlags: traceFlags,
TraceState: trace.TraceState{},
Remote: false,
},
), fmt.Errorf("invalid trace ID: %w", err)
}

spanID, err := trace.SpanIDFromHex(span.ID.String())
if err != nil {
return trace.NewSpanContext(
trace.SpanContextConfig{
TraceID: traceID,
TraceFlags: traceFlags,
TraceState: trace.TraceState{},
Remote: false,
},
), fmt.Errorf("invalid span ID: %w", err)
}

return trace.NewSpanContext(
trace.SpanContextConfig{
TraceID: traceID,
SpanID: spanID,
TraceFlags: traceFlags,
TraceState: trace.TraceState{},
Remote: false,
},
), nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import (
"fmt"
"io"
"net/http"

"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)

type PresidioDataFormat struct {
Expand All @@ -18,6 +21,13 @@ func PiiAnalysis(ctx context.Context, presidioSvcURL string, svcName string, buf
span, ctx := GlobalTracer.StartSpanFromContext(ctx, "PiiAnalysis")
defer span.Finish()

otelSpanCtx, err := otelSpanContextFromZipkin(span.Context())
if err != nil {
fmt.Printf("Error converting span context: %v\n", err)
}

ctx = trace.ContextWithSpanContext(ctx, otelSpanCtx)

empty := []string{}

msgString, err := json.Marshal(
Expand All @@ -30,7 +40,15 @@ func PiiAnalysis(ctx context.Context, presidioSvcURL string, svcName string, buf
return empty, fmt.Errorf("could not convert data for presidio into json: %w", err)
}

resp, err := http.Post(presidioSvcURL, "application/json", bytes.NewBuffer(msgString))
req, err := http.NewRequest("POST", presidioSvcURL, bytes.NewBuffer(msgString))
if err != nil {
return empty, fmt.Errorf("could not create new request object: %w", err)
}

req.Header.Set("Content-Type", "application/json")
GlobalOtelPropagator.Inject(ctx, propagation.HeaderCarrier(req.Header))

resp, err := http.DefaultClient.Do(req)
if err != nil {
return empty, fmt.Errorf("presidio post error: %w", err)
}
Expand Down

0 comments on commit 5dfc77a

Please sign in to comment.