public static IQueryExecutionBuilder UseInstrumentation( this IQueryExecutionBuilder builder, TracingPreference tracingPreference) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } var listener = new DiagnosticListener(DiagnosticNames.Listener); builder .RemoveService <DiagnosticListener>() .RemoveService <DiagnosticSource>(); builder.Services .AddSingleton(listener) .AddSingleton <DiagnosticSource>(listener) .AddSingleton(sp => new QueryExecutionDiagnostics( sp.GetRequiredService <DiagnosticListener>(), sp.GetServices <IDiagnosticObserver>())); if (tracingPreference != TracingPreference.Never) { builder .AddDiagnosticObserver(new ApolloTracingDiagnosticObserver( tracingPreference)); } return(builder.Use <InstrumentationMiddleware>()); }
public ApolloTracingDiagnosticEventListener( TracingPreference tracingPreference = TracingPreference.OnDemand, ITimestampProvider?timestampProvider = null) { _tracingPreference = tracingPreference; _timestampProvider = timestampProvider ?? new DefaultTimestampProvider(); }
internal QueryExecutionDiagnostics( DiagnosticListener observable, IEnumerable <IDiagnosticObserver> observers, TracingPreference tracingPreference) { _source = observable ?? throw new ArgumentNullException(nameof(observable)); _tracingPreference = tracingPreference; Subscribe(observable, observers); }
public static IRequestExecutorBuilder AddApolloTracing( this IRequestExecutorBuilder builder, TracingPreference tracingPreference = TracingPreference.OnDemand, ITimestampProvider?timestampProvider = null) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } if (tracingPreference == TracingPreference.Never) { return(builder); } return(builder.AddDiagnosticEventListener( sp => new ApolloTracingDiagnosticEventListener( tracingPreference, timestampProvider ?? sp.GetService <ITimestampProvider>()))); }
internal ApolloTracingDiagnosticObserver( TracingPreference tracingPreference) { _tracingPreference = tracingPreference; }