From e6c579b7566bc20f72704ce592072360ab51f13f Mon Sep 17 00:00:00 2001 From: Vadim Hatsura Date: Mon, 28 Jun 2021 17:55:27 +0200 Subject: [PATCH] check current execution segment on null (#5) --- .../Extensions/ApmAgentExtensions.cs | 8 ++++++-- .../HotChocolateDiagnosticListener.cs | 11 ++++++++--- src/Shared/TracerExtensions.cs | 6 +++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Elastic.Apm.GraphQL.HotChocolate/Extensions/ApmAgentExtensions.cs b/src/Elastic.Apm.GraphQL.HotChocolate/Extensions/ApmAgentExtensions.cs index e95000f..b4b6994 100644 --- a/src/Elastic.Apm.GraphQL.HotChocolate/Extensions/ApmAgentExtensions.cs +++ b/src/Elastic.Apm.GraphQL.HotChocolate/Extensions/ApmAgentExtensions.cs @@ -12,7 +12,9 @@ internal static void CaptureError(this IApmAgent apmAgent, IReadOnlyList { try { - IExecutionSegment executionSegment = apmAgent.Tracer.GetExecutionSegment(); + IExecutionSegment? executionSegment = apmAgent.Tracer.GetExecutionSegment(); + if (executionSegment == null) return; + foreach (IError error in errors) { var path = error.Path?.ToString(); @@ -33,7 +35,9 @@ internal static void CaptureException(this IApmAgent apmAgent, Exception excepti { try { - IExecutionSegment executionSegment = apmAgent.Tracer.GetExecutionSegment(); + IExecutionSegment? executionSegment = apmAgent.Tracer.GetExecutionSegment(); + if (executionSegment == null) return; + executionSegment.CaptureException(exception); // TODO: Use application ILogger ? diff --git a/src/Elastic.Apm.GraphQL.HotChocolate/HotChocolateDiagnosticListener.cs b/src/Elastic.Apm.GraphQL.HotChocolate/HotChocolateDiagnosticListener.cs index 3545007..2be17e2 100644 --- a/src/Elastic.Apm.GraphQL.HotChocolate/HotChocolateDiagnosticListener.cs +++ b/src/Elastic.Apm.GraphQL.HotChocolate/HotChocolateDiagnosticListener.cs @@ -29,8 +29,10 @@ internal HotChocolateDiagnosticListener( public override IActivityScope ExecuteRequest(IRequestContext context) { - ITransaction transaction = _apmAgent.Tracer.CurrentTransaction; - return new RequestActivityScope(context, transaction, _apmAgent); + ITransaction? transaction = _apmAgent.Tracer.CurrentTransaction; + return transaction != null + ? new RequestActivityScope(context, transaction, _apmAgent) + : EmptyScope; } public override IActivityScope ResolveFieldValue(IMiddlewareContext context) @@ -46,7 +48,10 @@ public override IActivityScope ResolveFieldValue(IMiddlewareContext context) context.Document.Definitions.Count == 1 && context.Document.Definitions[0] is OperationDefinitionNode { Name: { Value: "exec_batch" } }) { - IExecutionSegment executionSegment = _apmAgent.Tracer.GetExecutionSegment(); + IExecutionSegment? executionSegment = _apmAgent.Tracer.GetExecutionSegment(); + + if (executionSegment == null) return EmptyScope; + ISpan span = executionSegment.StartSpan( context.Field.Name!.Value, ApiConstants.TypeRequest, Constants.Apm.SubType); diff --git a/src/Shared/TracerExtensions.cs b/src/Shared/TracerExtensions.cs index c5136d2..b65e48a 100644 --- a/src/Shared/TracerExtensions.cs +++ b/src/Shared/TracerExtensions.cs @@ -4,10 +4,10 @@ namespace Elastic.Apm { internal static class TracerExtensions { - public static IExecutionSegment GetExecutionSegment(this ITracer tracer) + public static IExecutionSegment? GetExecutionSegment(this ITracer tracer) { - ITransaction transaction = tracer.CurrentTransaction; - return tracer.CurrentSpan ?? (IExecutionSegment)transaction; + ITransaction? transaction = tracer.CurrentTransaction; + return tracer.CurrentSpan ?? (IExecutionSegment?)transaction; } } }