e84df1db08
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.
42 lines
1.0 KiB
Go
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)
|
|
}
|