From 8a7bab120e612b94ffac1571850b6788352db0d6 Mon Sep 17 00:00:00 2001 From: Alan West <3676547+alanwest@users.noreply.github.com> Date: Thu, 17 Mar 2022 17:14:51 -0700 Subject: [PATCH] Do not allow changes to OTLP exporter configuration after instantiation --- .../ExportClient/BaseOtlpGrpcExportClient.cs | 10 +++++++--- .../ExportClient/BaseOtlpHttpExportClient.cs | 9 +++++---- .../ExportClient/OtlpGrpcLogExportClient.cs | 4 ++-- .../ExportClient/OtlpGrpcMetricsExportClient.cs | 4 ++-- .../ExportClient/OtlpGrpcTraceExportClient.cs | 4 ++-- .../ExportClient/OtlpHttpMetricsExportClient.cs | 2 +- .../ExportClient/OtlpHttpTraceExportClient.cs | 2 +- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs index 12af999d820..49b60c1a97e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs @@ -14,6 +14,7 @@ // limitations under the License. // +using System; using System.Threading; using System.Threading.Tasks; using Grpc.Core; @@ -35,20 +36,23 @@ protected BaseOtlpGrpcExportClient(OtlpExporterOptions options) ExporterClientValidation.EnsureUnencryptedSupportIsEnabled(options); - this.Options = options; + this.Endpoint = new UriBuilder(options.Endpoint).Uri; this.Headers = options.GetMetadataFromHeaders(); + this.TimeoutMilliseconds = options.TimeoutMilliseconds; } - internal OtlpExporterOptions Options { get; } - #if NETSTANDARD2_1 || NET5_0_OR_GREATER internal GrpcChannel Channel { get; set; } #else internal Channel Channel { get; set; } #endif + internal Uri Endpoint { get; } + internal Metadata Headers { get; } + internal int TimeoutMilliseconds { get; } + /// public abstract bool SendExportRequest(TRequest request, CancellationToken cancellationToken = default); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs index 46f8dd5c748..5906b7f7798 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs @@ -14,6 +14,7 @@ // limitations under the License. // +using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; @@ -31,15 +32,15 @@ protected BaseOtlpHttpExportClient(OtlpExporterOptions options, HttpClient httpC Guard.ThrowIfNull(httpClient); Guard.ThrowIfInvalidTimeout(options.TimeoutMilliseconds); - this.Options = options; + this.Endpoint = new UriBuilder(options.Endpoint).Uri; this.Headers = options.GetHeaders>((d, k, v) => d.Add(k, v)); this.HttpClient = httpClient; } - internal OtlpExporterOptions Options { get; } - internal HttpClient HttpClient { get; } + internal Uri Endpoint { get; set; } + internal IReadOnlyDictionary Headers { get; } /// @@ -55,7 +56,7 @@ public bool SendExportRequest(TRequest request, CancellationToken cancellationTo } catch (HttpRequestException ex) { - OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Options.Endpoint, ex); + OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); return false; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs index aad3a2146fc..469ae690cb6 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs @@ -43,7 +43,7 @@ public OtlpGrpcLogExportClient(OtlpExporterOptions options, OtlpCollector.LogsSe /// public override bool SendExportRequest(OtlpCollector.ExportLogsServiceRequest request, CancellationToken cancellationToken = default) { - var deadline = DateTime.UtcNow.AddMilliseconds(this.Options.TimeoutMilliseconds); + var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { @@ -51,7 +51,7 @@ public override bool SendExportRequest(OtlpCollector.ExportLogsServiceRequest re } catch (RpcException ex) { - OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Options.Endpoint, ex); + OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); return false; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs index 45553cf7f84..a4980147742 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs @@ -43,7 +43,7 @@ public OtlpGrpcMetricsExportClient(OtlpExporterOptions options, OtlpCollector.Me /// public override bool SendExportRequest(OtlpCollector.ExportMetricsServiceRequest request, CancellationToken cancellationToken = default) { - var deadline = DateTime.UtcNow.AddMilliseconds(this.Options.TimeoutMilliseconds); + var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { @@ -51,7 +51,7 @@ public override bool SendExportRequest(OtlpCollector.ExportMetricsServiceRequest } catch (RpcException ex) { - OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Options.Endpoint, ex); + OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); return false; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs index c17f49c4fca..9846d0e1524 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs @@ -43,7 +43,7 @@ public OtlpGrpcTraceExportClient(OtlpExporterOptions options, OtlpCollector.Trac /// public override bool SendExportRequest(OtlpCollector.ExportTraceServiceRequest request, CancellationToken cancellationToken = default) { - var deadline = DateTime.UtcNow.AddMilliseconds(this.Options.TimeoutMilliseconds); + var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { @@ -51,7 +51,7 @@ public override bool SendExportRequest(OtlpCollector.ExportTraceServiceRequest r } catch (RpcException ex) { - OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Options.Endpoint, ex); + OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); return false; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpMetricsExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpMetricsExportClient.cs index 541e32f1b87..9be1ce51d50 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpMetricsExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpMetricsExportClient.cs @@ -38,7 +38,7 @@ internal sealed class OtlpHttpMetricsExportClient : BaseOtlpHttpExportClient