Files
schemas/monitoring/graphql.go
T
argoyle e84df1db08 refactor: remove Sentry integration and replace with OpenTelemetry
Remove Sentry dependencies and configuration. Introduce monitoring 
setup for OpenTelemetry. Update logging to include log format 
options, and replace Sentry error handling middleware with 
monitoring handlers for GraphQL playground. Adjust environment 
variable handling to enhance configuration clarity and flexibility.
2025-06-13 11:00:52 +02:00

42 lines
1.0 KiB
Go

package monitoring
import (
"context"
"fmt"
"github.com/99designs/gqlgen/graphql"
"go.opentelemetry.io/otel/trace"
)
func AroundOperations(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler {
op := graphql.GetOperationContext(ctx)
spanName := fmt.Sprintf("graphql:operation:%s", op.OperationName)
// Span always injected in the http handler above
sp := trace.SpanFromContext(ctx)
if sp != nil {
sp.SetName(spanName)
}
return next(ctx)
}
func AroundRootFields(ctx context.Context, next graphql.RootResolver) graphql.Marshaler {
oc := graphql.GetRootFieldContext(ctx)
spanCtx, span := StartSpan(ctx, fmt.Sprintf("graphql:rootfield:%s", oc.Field.Name))
defer span.Finish()
return next(spanCtx)
}
func AroundFields(ctx context.Context, next graphql.Resolver) (res any, err error) {
oc := graphql.GetFieldContext(ctx)
var span Span
if oc.IsResolver {
ctx, span = StartSpan(ctx, fmt.Sprintf("graphql:field:%s", oc.Field.Name))
}
defer func() {
if span != nil {
span.Finish()
}
}()
return next(ctx)
}