Skip to content

Commit

Permalink
Update OtlpExporter options (#1781)
Browse files Browse the repository at this point in the history
* Modify OtlpExporterOptions

* Updated CHANGELOG.md

* Address PR comments

* Address PR comments

* Updated the Timeout property summary

* Updated CHANGELOG.md

Co-authored-by: Cijo Thomas <cithomas@microsoft.com>
  • Loading branch information
utpilla and cijothomas committed Feb 3, 2021
1 parent fbfdb70 commit e0bcc80
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool
Expand Down
8 changes: 6 additions & 2 deletions src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@
`OpenTelemetry.Exporter` namespace.
([#1770](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1770))
* Changed default port for OTLP Exporter from 55680 to 4317
* Default ServiceName, if not found in Resource, is obtained from SDK
using GetDefaultResource().
* Default ServiceName, if not found in Resource, is obtained from SDK using
GetDefaultResource().
* Modified the data type of Headers option to string; Added a new option called
TimeoutMilliseconds for computing the `deadline` to be used by gRPC client for
`Export`
([#1781](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1781))

## 1.0.0-rc2

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,15 @@ public class OtlpExporterOptions
#endif

/// <summary>
/// Gets or sets optional headers for the connection.
/// Gets or sets optional headers for the connection. Refer to the <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#specifying-headers-via-environment-variables">
/// specification</a> for information on the expected format for Headers.
/// </summary>
public Metadata Headers { get; set; } = new Metadata();
public string Headers { get; set; }

/// <summary>
/// Gets or sets the max waiting time (in milliseconds) for the backend to process each span batch. The default value is 10000.
/// </summary>
public int TimeoutMilliseconds { get; set; } = 10000;

/// <summary>
/// Gets or sets the export processor type to be used with the OpenTelemetry Protocol Exporter.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class OtlpTraceExporter : BaseExporter<Activity>
#endif
private readonly OtlpCollector.TraceService.ITraceServiceClient traceClient;
private readonly Metadata headers;
private DateTime deadline;

/// <summary>
/// Initializes a new instance of the <see cref="OtlpTraceExporter"/> class.
Expand All @@ -63,7 +64,12 @@ public OtlpTraceExporter(OtlpExporterOptions options)
internal OtlpTraceExporter(OtlpExporterOptions options, OtlpCollector.TraceService.ITraceServiceClient traceServiceClient = null)
{
this.options = options ?? throw new ArgumentNullException(nameof(options));
this.headers = options.Headers ?? throw new ArgumentException("Headers were not provided on options.", nameof(options));
this.headers = GetMetadataFromHeaders(options.Headers);
if (this.options.TimeoutMilliseconds <= 0)
{
throw new ArgumentException("Timeout value provided is not a positive number.", nameof(this.options.TimeoutMilliseconds));
}

if (traceServiceClient != null)
{
this.traceClient = traceServiceClient;
Expand Down Expand Up @@ -97,10 +103,11 @@ public override ExportResult Export(in Batch<Activity> activityBatch)
OtlpCollector.ExportTraceServiceRequest request = new OtlpCollector.ExportTraceServiceRequest();

request.AddBatch(this.ProcessResource, activityBatch);
this.deadline = DateTime.UtcNow.AddMilliseconds(this.options.TimeoutMilliseconds);

try
{
this.traceClient.Export(request, headers: this.headers);
this.traceClient.Export(request, headers: this.headers, deadline: this.deadline);
}
catch (RpcException ex)
{
Expand Down Expand Up @@ -159,5 +166,29 @@ protected override bool OnShutdown(int timeoutMilliseconds)

return Task.WaitAny(new Task[] { this.channel.ShutdownAsync(), Task.Delay(timeoutMilliseconds) }) == 0;
}

private static Metadata GetMetadataFromHeaders(string headers)
{
var metadata = new Metadata();
if (!string.IsNullOrEmpty(headers))
{
Array.ForEach(
headers.Split(','),
(pair) =>
{
var keyValueData = pair.Split('=');
if (keyValueData.Length != 2)
{
throw new ArgumentException("Headers provided in an invalid format.");
}
var key = keyValueData[0].Trim();
var value = keyValueData[1].Trim();
metadata.Add(key, value);
});
}

return metadata;
}
}
}

0 comments on commit e0bcc80

Please sign in to comment.