Files
grafana/pkg/registry/apis/ofrep/static.go
T
Tania 82e5b81a30 OpenFeature: Fix instrumentation in OFREP API (#112845)
OpenFeature: Fix instrumentation in ofrep api
2025-10-23 10:09:41 +00:00

58 lines
1.6 KiB
Go

package ofrep
import (
"context"
"net/http"
"github.com/grafana/grafana/pkg/infra/tracing"
goffmodel "github.com/thomaspoignant/go-feature-flag/cmd/relayproxy/model"
"go.opentelemetry.io/otel/attribute"
)
func (b *APIBuilder) evalAllFlagsStatic(ctx context.Context, isAuthedUser bool, w http.ResponseWriter) {
_, span := tracing.Start(ctx, "ofrep.static.evalAllFlags")
defer span.End()
result, err := b.staticEvaluator.EvalAllFlags(ctx)
if err != nil {
err = tracing.Error(span, err)
b.logger.Error("Failed to evaluate all static flags", "error", err)
http.Error(w, "failed to evaluate flags", http.StatusInternalServerError)
return
}
span.SetAttributes(attribute.Int("total_flags_count", len(result.Flags)))
if !isAuthedUser {
var publicOnly []goffmodel.OFREPFlagBulkEvaluateSuccessResponse
for _, flag := range result.Flags {
if isPublicFlag(flag.Key) {
publicOnly = append(publicOnly, flag)
}
}
result.Flags = publicOnly
span.SetAttributes(attribute.Int("public_flags_count", len(publicOnly)))
}
writeResponse(http.StatusOK, result, b.logger, w)
}
func (b *APIBuilder) evalFlagStatic(ctx context.Context, flagKey string, w http.ResponseWriter) {
_, span := tracing.Start(ctx, "ofrep.static.evalFlag")
defer span.End()
span.SetAttributes(attribute.String("flag_key", flagKey))
result, err := b.staticEvaluator.EvalFlag(ctx, flagKey)
if err != nil {
err = tracing.Error(span, err)
b.logger.Error("Failed to evaluate static flag", "key", flagKey, "error", err)
http.Error(w, "failed to evaluate flag", http.StatusInternalServerError)
return
}
writeResponse(http.StatusOK, result, b.logger, w)
}