Skip to content

Commit 981b927

Browse files
committed
feat: add traces to ofrep endpoint
Signed-off-by: Simon Schrottner <[email protected]>
1 parent 6a13796 commit 981b927

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

flagd/pkg/service/flag-evaluation/ofrep/handler.go

+17-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import (
55
"fmt"
66
"net/http"
77

8+
89
"github.com/gorilla/mux"
910
"github.com/open-feature/flagd/core/pkg/evaluator"
1011
"github.com/open-feature/flagd/core/pkg/logger"
1112
"github.com/open-feature/flagd/core/pkg/model"
1213
"github.com/open-feature/flagd/core/pkg/service/ofrep"
1314
"github.com/rs/xid"
15+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
16+
"go.opentelemetry.io/otel"
17+
"go.opentelemetry.io/otel/attribute"
18+
"go.opentelemetry.io/otel/trace"
1419
)
1520

1621
const (
@@ -23,25 +28,29 @@ type handler struct {
2328
Logger *logger.Logger
2429
evaluator evaluator.IEvaluator
2530
contextValues map[string]any
31+
tracer trace.Tracer
2632
}
2733

2834
func NewOfrepHandler(logger *logger.Logger, evaluator evaluator.IEvaluator, contextValues map[string]any) http.Handler {
2935
h := handler{
3036
Logger: logger,
3137
evaluator: evaluator,
3238
contextValues: contextValues,
39+
tracer: otel.Tracer("flagd.ofrep.v1"),
3340
}
3441

3542
router := mux.NewRouter()
3643
router.HandleFunc(singleEvaluation, h.HandleFlagEvaluation).Methods("POST")
3744
router.HandleFunc(bulkEvaluation, h.HandleBulkEvaluation).Methods("POST")
38-
return router
45+
return otelhttp.NewHandler(router, "flagd.ofrep")
3946
}
4047

4148
func (h *handler) HandleFlagEvaluation(w http.ResponseWriter, r *http.Request) {
4249
requestID := xid.New().String()
4350
defer h.Logger.ClearFields(requestID)
4451

52+
rCtx, span := h.tracer.Start(r.Context(), "flagEvaluation", trace.WithSpanKind(trace.SpanKindServer))
53+
defer span.End()
4554
// obtain flag key
4655
vars := mux.Vars(r)
4756
if vars == nil {
@@ -57,9 +66,10 @@ func (h *handler) HandleFlagEvaluation(w http.ResponseWriter, r *http.Request) {
5766
h.writeJSONToResponse(http.StatusBadRequest, ofrep.ContextErrorResponseFrom(flagKey), w)
5867
return
5968
}
60-
6169
context := flagdContext(h.Logger, requestID, request, h.contextValues)
62-
evaluation := h.evaluator.ResolveAsAnyValue(r.Context(), requestID, flagKey, context)
70+
evaluation := h.evaluator.ResolveAsAnyValue(rCtx, requestID, flagKey, context)
71+
span.SetAttributes(attribute.String("feature_flag.key", evaluation.FlagKey))
72+
span.SetAttributes(attribute.String("feature_flag.variant", evaluation.Variant))
6373
if evaluation.Error != nil {
6474
status, evaluationError := ofrep.EvaluationErrorResponseFrom(evaluation)
6575
h.writeJSONToResponse(status, evaluationError, w)
@@ -72,21 +82,24 @@ func (h *handler) HandleBulkEvaluation(w http.ResponseWriter, r *http.Request) {
7282
requestID := xid.New().String()
7383
defer h.Logger.ClearFields(requestID)
7484

85+
rCtx, span := h.tracer.Start(r.Context(), "bulkEvaluation", trace.WithSpanKind(trace.SpanKindServer))
86+
defer span.End()
7587
request, err := extractOfrepRequest(r)
7688
if err != nil {
7789
h.writeJSONToResponse(http.StatusBadRequest, ofrep.BulkEvaluationContextError(), w)
7890
return
7991
}
8092

8193
context := flagdContext(h.Logger, requestID, request, h.contextValues)
82-
evaluations, metadata, err := h.evaluator.ResolveAllValues(r.Context(), requestID, context)
94+
evaluations, metadata, err := h.evaluator.ResolveAllValues(rCtx, requestID, context)
8395
if err != nil {
8496
h.Logger.WarnWithID(requestID, fmt.Sprintf("error from resolver: %v", err))
8597

8698
res := ofrep.BulkEvaluationContextErrorFrom(model.GeneralErrorCode,
8799
fmt.Sprintf("Bulk evaluation failed. Tracking ID: %s", requestID))
88100
h.writeJSONToResponse(http.StatusInternalServerError, res, w)
89101
} else {
102+
span.SetAttributes(attribute.Int("feature_flag.count", len(evaluations)))
90103
h.writeJSONToResponse(http.StatusOK, ofrep.BulkEvaluationResponseFrom(evaluations, metadata), w)
91104
}
92105
}

0 commit comments

Comments
 (0)