Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/All.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Aspire/HotChocolate.Fusion.Aspire.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.AspNetCore/HotChocolate.Fusion.AspNetCore.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Composition/HotChocolate.Fusion.Composition.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Diagnostics/HotChocolate.Fusion.Diagnostics.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Execution.Types/HotChocolate.Fusion.Execution.Types.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Execution/HotChocolate.Fusion.Execution.csproj" />
<Project Path="HotChocolate/Fusion-vnext/src/Fusion.Language/HotChocolate.Fusion.Language.csproj" />
Expand All @@ -222,6 +223,7 @@
<Folder Name="/HotChocolate/Fusion-vnext/test/">
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.AspNetCore.Tests/HotChocolate.Fusion.AspNetCore.Tests.csproj" />
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.Composition.Tests/HotChocolate.Fusion.Composition.Tests.csproj" />
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.Diagnostics.Tests/HotChocolate.Fusion.Diagnostics.Tests.csproj" />
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.EventSources.Tests/HotChocolate.Fusion.EventSources.Tests.csproj" />
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.Execution.Tests/HotChocolate.Fusion.Execution.Tests.csproj" />
<Project Path="HotChocolate/Fusion-vnext/test/Fusion.Language.Tests/HotChocolate.Fusion.Language.Tests.csproj" />
Expand Down
35 changes: 7 additions & 28 deletions src/HotChocolate/Diagnostics/src/Diagnostics/ActivityEnricher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,7 @@ public virtual void EnrichSingleRequest(
if (request.Variables is not null
&& (_options.RequestDetails & RequestDetails.Variables) == RequestDetails.Variables)
{
var node = CreateVariablesNode(request.Variables);
EnrichRequestVariables(context, request, node, activity);
EnrichRequestVariables(context, request, request.Variables, activity);
}

if (request.Extensions is not null
Expand Down Expand Up @@ -175,8 +174,7 @@ public virtual void EnrichBatchRequest(
if (request.Variables is not null
&& (_options.RequestDetails & RequestDetails.Variables) == RequestDetails.Variables)
{
var node = CreateVariablesNode(request.Variables);
EnrichBatchVariables(context, request, node, i, activity);
EnrichBatchVariables(context, request, request.Variables, i, activity);
}

if (request.Extensions is not null
Expand Down Expand Up @@ -222,8 +220,7 @@ public virtual void EnrichOperationBatchRequest(
if (request.Variables is not null
&& (_options.RequestDetails & RequestDetails.Variables) == RequestDetails.Variables)
{
var node = CreateVariablesNode(request.Variables);
EnrichRequestVariables(context, request, node, activity);
EnrichRequestVariables(context, request, request.Variables, activity);
}

if (request.Extensions is not null
Expand All @@ -236,17 +233,17 @@ public virtual void EnrichOperationBatchRequest(
protected virtual void EnrichRequestVariables(
HttpContext context,
GraphQLRequest request,
Comment thread
tobias-tengler marked this conversation as resolved.
ISyntaxNode variables,
JsonDocument variables,
Activity activity)
=> activity.SetTag("graphql.http.request.variables", variables.Print(indented: false));
=> activity.SetTag("graphql.http.request.variables", variables.RootElement.ToString());

protected virtual void EnrichBatchVariables(
HttpContext context,
GraphQLRequest request,
ISyntaxNode variables,
JsonDocument variables,
int index,
Activity activity)
=> activity.SetTag($"graphql.http.request[{index}].variables", variables.Print(indented: false));
=> activity.SetTag($"graphql.http.request[{index}].variables", variables.RootElement.ToString());
Comment thread
tobias-tengler marked this conversation as resolved.

protected virtual void EnrichRequestExtensions(
HttpContext context,
Expand Down Expand Up @@ -616,24 +613,6 @@ protected virtual void EnrichError(IError error, Activity activity)

activity.AddEvent(new ActivityEvent(AttributeExceptionEventName, default, tags));
}

private static ISyntaxNode CreateVariablesNode(JsonDocument? variables)
{
if (variables is null)
{
return NullValueNode.Default;
}

var root = variables.RootElement;

if (root.ValueKind is not (JsonValueKind.Object or JsonValueKind.Array))
{
throw new InvalidOperationException();
}

var parser = new JsonValueParser();
return parser.Parse(root);
}
}

file static class SemanticConventions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,8 @@ public static IRequestExecutorBuilder AddInstrumentation(
return builder;
}

private sealed class InternalActivityEnricher : ActivityEnricher
{
public InternalActivityEnricher(
ObjectPool<StringBuilder> stringBuilderPool,
InstrumentationOptions options)
: base(stringBuilderPool, options)
{
}
}
private sealed class InternalActivityEnricher(
ObjectPool<StringBuilder> stringBuilderPool,
InstrumentationOptions options)
: ActivityEnricher(stringBuilderPool, options);
}
2 changes: 2 additions & 0 deletions src/HotChocolate/Fusion-vnext/HotChocolate.Fusion-vnext.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<Project Path="src/Fusion.Aspire/HotChocolate.Fusion.Aspire.csproj" />
<Project Path="src/Fusion.AspNetCore/HotChocolate.Fusion.AspNetCore.csproj" />
<Project Path="src/Fusion.Composition/HotChocolate.Fusion.Composition.csproj" />
<Project Path="src/Fusion.Diagnostics/HotChocolate.Fusion.Diagnostics.csproj" />
<Project Path="src/Fusion.Execution.Types/HotChocolate.Fusion.Execution.Types.csproj" />
<Project Path="src/Fusion.Execution/HotChocolate.Fusion.Execution.csproj" />
<Project Path="src/Fusion.Language/HotChocolate.Fusion.Language.csproj" />
Expand All @@ -16,6 +17,7 @@
<Folder Name="/test/">
<Project Path="test/Fusion.AspNetCore.Tests/HotChocolate.Fusion.AspNetCore.Tests.csproj" />
<Project Path="test/Fusion.Composition.Tests/HotChocolate.Fusion.Composition.Tests.csproj" />
<Project Path="test/Fusion.Diagnostics.Tests/HotChocolate.Fusion.Diagnostics.Tests.csproj" />
<Project Path="test/Fusion.EventSources.Tests/HotChocolate.Fusion.EventSources.Tests.csproj" />
<Project Path="test/Fusion.Execution.Tests/HotChocolate.Fusion.Execution.Tests.csproj" />
<Project Path="test/Fusion.Language.Tests/HotChocolate.Fusion.Language.Tests.csproj" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace HotChocolate.Fusion.Diagnostics;

internal static class ContextKeys
{
public const string HttpRequestActivity = "HotChocolate.Fusion.Diagnostics.HttpRequest";
public const string ParseHttpRequestActivity = "HotChocolate.Fusion.Diagnostics.ParseHttpRequest";
public const string FormatHttpResponseActivity = "HotChocolate.Fusion.Diagnostics.FormatHttpResponse";
public const string RequestActivity = "HotChocolate.Fusion.Diagnostics.Request";
public const string ValidateActivity = "HotChocolate.Fusion.Diagnostics.Validate";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using System.Text;
using HotChocolate.Fusion.Diagnostics;
using HotChocolate.Fusion.Diagnostics.Listeners;
using HotChocolate.Fusion.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.ObjectPool;

namespace Microsoft.Extensions.DependencyInjection;

public static class DiagnosticsFusionGatewayBuilderExtensions
{
public static IFusionGatewayBuilder AddInstrumentation(
this IFusionGatewayBuilder builder,
Action<InstrumentationOptions>? options = null)
=> AddInstrumentation(builder, (_, opt) => options?.Invoke(opt));

public static IFusionGatewayBuilder AddInstrumentation(
this IFusionGatewayBuilder builder,
Action<IServiceProvider, InstrumentationOptions> options)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(options);

builder.Services.TryAddSingleton(
sp =>
{
var optionInst = new InstrumentationOptions();
options(sp, optionInst);
return optionInst;
});

builder.Services.TryAddSingleton<InternalActivityEnricher>();

builder.AddApplicationService<InstrumentationOptions>();
builder.AddApplicationService<InternalActivityEnricher>();

builder.AddDiagnosticEventListener(
sp => new ActivityFusionExecutionDiagnosticEventListener(
sp.GetService<FusionActivityEnricher>() ??
sp.GetRequiredService<InternalActivityEnricher>(),
sp.GetRequiredService<InstrumentationOptions>()));

builder.AddDiagnosticEventListener(
sp => new ActivityServerDiagnosticListener(
sp.GetService<FusionActivityEnricher>() ??
sp.GetRequiredService<InternalActivityEnricher>(),
sp.GetRequiredService<InstrumentationOptions>()));

return builder;
}

private sealed class InternalActivityEnricher(
ObjectPool<StringBuilder> stringBuilderPool,
InstrumentationOptions options)
: FusionActivityEnricher(stringBuilderPool, options);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using HotChocolate.Fusion.Diagnostics;

namespace OpenTelemetry.Trace;

/// <summary>
/// Provides configuration methods to open-telemetry.
/// </summary>
public static class TracerProviderBuilderExtensions
{
/// <summary>
/// Adds the Hot Chocolate Fusion instrumentation to open-telemetry.
/// </summary>
/// <param name="builder">
/// The tracing builder.
/// </param>
/// <returns>
/// Returns the tracing builder for configuration chaining.
/// </returns>
public static TracerProviderBuilder AddHotChocolateFusionInstrumentation(
this TracerProviderBuilder builder)
{
ArgumentNullException.ThrowIfNull(builder);

builder.AddSource(HotChocolateFusionActivitySource.GetName());
return builder;
}
}
Loading
Loading