diff --git a/pkg/handlers/activate.go b/pkg/handlers/activate.go index 2643706f..2768f919 100644 --- a/pkg/handlers/activate.go +++ b/pkg/handlers/activate.go @@ -23,7 +23,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" "github.com/optimizely/agent/pkg/optimizely" @@ -48,7 +47,6 @@ func Activate(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) uc, err := getUserContext(r) if err != nil { @@ -110,7 +108,7 @@ func Activate(w http.ResponseWriter, r *http.Request) { } decisions = filterDecisions(r, decisions) - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msgf("Made activate decisions for user %s", uc.ID) + logger.Info().Msgf("Made activate decisions for user %s", uc.ID) render.JSON(w, r, decisions) } diff --git a/pkg/handlers/decide.go b/pkg/handlers/decide.go index 606fc1a6..cb8908dd 100644 --- a/pkg/handlers/decide.go +++ b/pkg/handlers/decide.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" "github.com/optimizely/go-sdk/pkg/client" @@ -63,8 +62,6 @@ func Decide(w http.ResponseWriter, r *http.Request) { return } - span := trace.SpanFromContext(r.Context()) - db, err := getUserContextWithOptions(r) if err != nil { RenderError(err, http.StatusBadRequest, w, r) @@ -110,7 +107,7 @@ func Decide(w http.ResponseWriter, r *http.Request) { key := keys[0] logger.Debug().Str("featureKey", key).Msg("fetching feature decision") d := optimizelyUserContext.Decide(key, decideOptions) - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msgf("Feature %q is enabled for user %s? %t", d.FlagKey, d.UserContext.UserID, d.Enabled) + logger.Info().Msgf("Feature %q is enabled for user %s? %t", d.FlagKey, d.UserContext.UserID, d.Enabled) decideOut := DecideOut{d, d.Variables.ToMap()} render.JSON(w, r, decideOut) return @@ -123,7 +120,7 @@ func Decide(w http.ResponseWriter, r *http.Request) { for _, d := range decides { decideOut := DecideOut{d, d.Variables.ToMap()} decideOuts = append(decideOuts, decideOut) - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msgf("Feature %q is enabled for user %s? %t", d.FlagKey, d.UserContext.UserID, d.Enabled) + logger.Info().Msgf("Feature %q is enabled for user %s? %t", d.FlagKey, d.UserContext.UserID, d.Enabled) } render.JSON(w, r, decideOuts) } diff --git a/pkg/handlers/get_datafile.go b/pkg/handlers/get_datafile.go index 4c105223..d458cb1b 100644 --- a/pkg/handlers/get_datafile.go +++ b/pkg/handlers/get_datafile.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" ) @@ -36,7 +35,6 @@ func GetDatafile(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) datafile := optlyClient.GetOptimizelyConfig().GetDatafile() var raw map[string]interface{} @@ -45,6 +43,6 @@ func GetDatafile(w http.ResponseWriter, r *http.Request) { return } - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg("Successfully returned datafile") + logger.Info().Msg("Successfully returned datafile") render.JSON(w, r, raw) } diff --git a/pkg/handlers/lookup.go b/pkg/handlers/lookup.go index e0b5a7cb..30298d2c 100644 --- a/pkg/handlers/lookup.go +++ b/pkg/handlers/lookup.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" ) @@ -49,7 +48,6 @@ func Lookup(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) if optlyClient.UserProfileService == nil { RenderError(ErrNoUPS, http.StatusInternalServerError, w, r) @@ -79,6 +77,6 @@ func Lookup(w http.ResponseWriter, r *http.Request) { experimentBucketMap[k.ExperimentID] = map[string]interface{}{k.Field: v} } lookupResponse.ExperimentBucketMap = experimentBucketMap - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msgf("Looked up user profile for user %s", body.UserID) + logger.Info().Msgf("Looked up user profile for user %s", body.UserID) render.JSON(w, r, lookupResponse) } diff --git a/pkg/handlers/optimizely_config.go b/pkg/handlers/optimizely_config.go index 60267329..5ad19a4d 100644 --- a/pkg/handlers/optimizely_config.go +++ b/pkg/handlers/optimizely_config.go @@ -21,7 +21,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" ) @@ -35,9 +34,8 @@ func OptimizelyConfig(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) conf := optlyClient.GetOptimizelyConfig() - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg("Successfully returned OptimizelyConfig") + logger.Info().Msg("Successfully returned OptimizelyConfig") render.JSON(w, r, conf) } diff --git a/pkg/handlers/override.go b/pkg/handlers/override.go index 81294a3e..36cb3ec4 100644 --- a/pkg/handlers/override.go +++ b/pkg/handlers/override.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" ) @@ -43,8 +42,6 @@ func Override(w http.ResponseWriter, r *http.Request) { return } - span := trace.SpanFromContext(r.Context()) - var body OverrideBody if parseErr := ParseRequestBody(r, &body); parseErr != nil { RenderError(parseErr, http.StatusBadRequest, w, r) @@ -75,7 +72,7 @@ func Override(w http.ResponseWriter, r *http.Request) { if override, err := optlyClient.SetForcedVariation(r.Context(), experimentKey, body.UserID, body.VariationKey); err != nil { RenderError(err, http.StatusInternalServerError, w, r) } else { - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Str("experimentKey", experimentKey).Str("variationKey", body.VariationKey).Msg("Successfully set override") + logger.Info().Str("experimentKey", experimentKey).Str("variationKey", body.VariationKey).Msg("Successfully set override") render.JSON(w, r, override) } } diff --git a/pkg/handlers/save.go b/pkg/handlers/save.go index ac7a593f..2281aab7 100644 --- a/pkg/handlers/save.go +++ b/pkg/handlers/save.go @@ -21,7 +21,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" "github.com/optimizely/go-sdk/pkg/decision" @@ -40,7 +39,6 @@ func Save(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) if optlyClient.UserProfileService == nil { RenderError(ErrNoUPS, http.StatusInternalServerError, w, r) @@ -62,7 +60,7 @@ func Save(w http.ResponseWriter, r *http.Request) { convertedProfile := convertToUserProfile(body) optlyClient.UserProfileService.Save(convertedProfile) - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msgf("Saved user profile for user %s", body.UserID) + logger.Info().Msgf("Saved user profile for user %s", body.UserID) render.Status(r, http.StatusOK) } diff --git a/pkg/handlers/send_odp_event.go b/pkg/handlers/send_odp_event.go index 815467b2..d991afa9 100644 --- a/pkg/handlers/send_odp_event.go +++ b/pkg/handlers/send_odp_event.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" "github.com/optimizely/agent/pkg/optimizely" @@ -38,7 +37,6 @@ func SendOdpEvent(w http.ResponseWriter, r *http.Request) { } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) body, err := getRequestOdpEvent(r) if err != nil { @@ -56,7 +54,7 @@ func SendOdpEvent(w http.ResponseWriter, r *http.Request) { Success: true, } - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg("Successfully sent event to ODP platform") + logger.Info().Msg("Successfully sent event to ODP platform") render.JSON(w, r, returnResult) } diff --git a/pkg/handlers/track.go b/pkg/handlers/track.go index 7c01a3bb..010431df 100644 --- a/pkg/handlers/track.go +++ b/pkg/handlers/track.go @@ -22,7 +22,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" "github.com/optimizely/go-sdk/pkg/entities" @@ -42,7 +41,6 @@ func TrackEvent(w http.ResponseWriter, r *http.Request) { return } logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) var body trackBody err = ParseRequestBody(r, &body) @@ -69,6 +67,6 @@ func TrackEvent(w http.ResponseWriter, r *http.Request) { return } - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Str("eventKey", eventKey).Msg("tracked event") + logger.Info().Str("eventKey", eventKey).Msg("tracked event") render.JSON(w, r, track) } diff --git a/pkg/handlers/utils.go b/pkg/handlers/utils.go index bbbb6ae6..e632fb1c 100644 --- a/pkg/handlers/utils.go +++ b/pkg/handlers/utils.go @@ -24,7 +24,6 @@ import ( "net/http" "github.com/go-chi/render" - "go.opentelemetry.io/otel/trace" "github.com/optimizely/agent/pkg/middleware" ) @@ -36,8 +35,7 @@ type ErrorResponse struct { // RenderError sets the request status and renders the error message. func RenderError(err error, status int, w http.ResponseWriter, r *http.Request) { - span := trace.SpanFromContext(r.Context()) - middleware.GetLogger(r).Err(err).Int("status", status).Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg("render error") + middleware.GetLogger(r).Err(err).Int("status", status).Msg("render error") render.Status(r, status) render.JSON(w, r, ErrorResponse{Error: err.Error()}) } @@ -47,24 +45,23 @@ func RenderError(err error, status int, w http.ResponseWriter, r *http.Request) // so that it is not leaked back to the requestor. func ParseRequestBody(r *http.Request, v interface{}) error { logger := middleware.GetLogger(r) - span := trace.SpanFromContext(r.Context()) body, err := io.ReadAll(r.Body) if err != nil { msg := "error reading request body" - logger.Err(err).Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg(msg) + logger.Err(err).Msg(msg) return fmt.Errorf("%s", msg) } if len(body) == 0 { - logger.Info().Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg("body was empty skip JSON unmarshal") + logger.Info().Msg("body was empty skip JSON unmarshal") return nil } err = json.Unmarshal(body, &v) if err != nil { msg := "error parsing request body" - logger.Err(err).Str("traceID", span.SpanContext().TraceID().String()).Str("spanID", span.SpanContext().SpanID().String()).Msg(msg) + logger.Err(err).Msg(msg) return fmt.Errorf("%s", msg) } diff --git a/pkg/middleware/utils.go b/pkg/middleware/utils.go index 24940c83..cf45b041 100644 --- a/pkg/middleware/utils.go +++ b/pkg/middleware/utils.go @@ -23,13 +23,13 @@ import ( "strconv" "strings" - "github.com/optimizely/agent/pkg/optimizely" - - "github.com/optimizely/go-sdk/pkg/config" - "github.com/go-chi/render" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "go.opentelemetry.io/otel/trace" + + "github.com/optimizely/agent/pkg/optimizely" + "github.com/optimizely/go-sdk/pkg/config" ) // ErrorResponse Model @@ -52,6 +52,12 @@ func GetLogger(r *http.Request) *zerolog.Logger { reqID := r.Header.Get(OptlyRequestHeader) logger := log.With().Str("requestId", reqID).Logger() + span := trace.SpanFromContext(r.Context()) + if span.SpanContext().TraceID().IsValid() { + logger = logger.With().Str("traceId", span.SpanContext().TraceID().String()).Logger() + logger = logger.With().Str("spanId", span.SpanContext().SpanID().String()).Logger() + } + if optimizely.ShouldIncludeSDKKey { sdkKey := r.Header.Get(OptlySDKHeader) sdkKeySplit := strings.Split(sdkKey, ":")