@@ -3,8 +3,6 @@ package middlewares
33import (
44 "context"
55 "fmt"
6- "strconv"
7- "strings"
86
97 "github.com/NdoleStudio/httpsms/pkg/telemetry"
108 "github.com/gofiber/fiber/v2"
@@ -21,21 +19,10 @@ const (
2119// OtelTraceContext adds a trace for an HTTP request
2220func OtelTraceContext (tracer telemetry.Tracer , logger telemetry.Logger , header string , namespace string ) fiber.Handler {
2321 return func (c * fiber.Ctx ) error {
24- // Get the Context from the request
25- spanContext , errors := spanContextFromHeader (c .Get (header ))
26- if len (errors ) != 0 {
27- logger .Error (stacktrace .NewError (strings .Join (errors , "\n " )))
28- }
29-
30- if ! spanContext .IsValid () {
31- if c .Get (header ) != "" {
32- logger .Error (stacktrace .NewError ("invalid trace context %s creating new context" , c .Get (header )))
33- }
34- otelTracer := otel .Tracer (namespace )
35- _ , span := otelTracer .Start (context .Background (), fmt .Sprintf ("%s %s" , c .Method (), c .OriginalURL ()))
36- defer span .End ()
37- spanContext = span .SpanContext ()
38- }
22+ otelTracer := otel .Tracer (namespace )
23+ _ , span := otelTracer .Start (context .Background (), fmt .Sprintf ("%s %s" , c .Method (), c .OriginalURL ()))
24+ defer span .End ()
25+ spanContext := span .SpanContext ()
3926
4027 logger .WithSpan (spanContext ).
4128 WithString ("http.method" , c .Method ()).
@@ -46,8 +33,7 @@ func OtelTraceContext(tracer telemetry.Tracer, logger telemetry.Logger, header s
4633 defer span .End ()
4734
4835 ctxLogger := tracer .CtxLogger (logger , span )
49- traceID := spanContext .TraceID ().String ()
50- span .SetAttributes (attribute .Key ("traceID" ).String (traceID ))
36+ span .SetAttributes (attribute .Key ("traceID" ).String (span .SpanContext ().TraceID ().String ()))
5137 span .SetAttributes (attribute .Key ("SpanID" ).String (span .SpanContext ().SpanID ().String ()))
5238 span .SetAttributes (attribute .Key ("traceFlags" ).String (spanContext .TraceFlags ().String ()))
5339 span .SetAttributes (attribute .Key ("clientVersion" ).String (c .Get (clientVersionHeader )))
@@ -58,7 +44,7 @@ func OtelTraceContext(tracer telemetry.Tracer, logger telemetry.Logger, header s
5844 response := c .Next ()
5945
6046 statusCode := c .Response ().StatusCode ()
61- span .AddEvent (fmt .Sprintf ("finished handling request with traceID: [%s], statusCode: [%d]" , traceID , statusCode ))
47+ span .AddEvent (fmt .Sprintf ("finished handling request with traceID: [%s], statusCode: [%d]" , span . SpanContext (). TraceID (). String () , statusCode ))
6248
6349 if statusCode >= 300 && len (c .Request ().Body ()) > 0 {
6450 ctxLogger .Warn (stacktrace .NewError (fmt .Sprintf ("http.status [%d], body [%s]" , statusCode , string (c .Request ().Body ()))))
@@ -67,49 +53,3 @@ func OtelTraceContext(tracer telemetry.Tracer, logger telemetry.Logger, header s
6753 return response
6854 }
6955}
70-
71- func spanContextFromHeader (parentContext string ) (trace.SpanContext , []string ) {
72- result := trace .NewSpanContext (trace.SpanContextConfig {
73- TraceID : trace.TraceID {},
74- SpanID : trace.SpanID {},
75- TraceState : trace.TraceState {},
76- Remote : true ,
77- })
78-
79- parts := strings .Split (parentContext , "/" )
80- var errors []string
81- if len (parts ) == 2 {
82- traceID , err := trace .TraceIDFromHex (parts [0 ])
83- if err != nil {
84- errors = append (errors , fmt .Sprintf ("could not get trace id %v" , err ))
85- return result , errors
86- }
87- result = result .WithTraceID (traceID )
88-
89- spanParts := strings .Split (parts [1 ], ";" )
90- if len (spanParts ) == 1 {
91- spanParts = append (spanParts , "" )
92- }
93-
94- if len (spanParts ) == 2 {
95- val , err := strconv .ParseUint (spanParts [0 ], 10 , 64 )
96- if err != nil {
97- errors = append (errors , fmt .Sprintf ("could not get trace id %v" , err ))
98- return result , errors
99- }
100-
101- spanID , err := trace .SpanIDFromHex (fmt .Sprintf ("%016x" , val ))
102- if err != nil {
103- errors = append (errors , fmt .Sprintf ("could not get span trace id %v" , err ))
104- return result , errors
105- }
106- result = result .WithSpanID (spanID )
107-
108- if spanParts [1 ] == "o=1" {
109- result = result .WithTraceFlags (trace .FlagsSampled )
110- }
111- }
112- }
113-
114- return result , errors
115- }
0 commit comments