Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Logging/Internal/TracingBuilder.cs
T
Jedd Morgan f84c4b2d31 Bump SDK and enforce msbuild warnings (#379)
* Bump SDK

* Updated Tekla structures nugets

* Tekla architecture targeting

* Fixed remaining warnings
2024-11-14 21:16:46 +00:00

51 lines
1.5 KiB
C#

using OpenTelemetry.Exporter;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
namespace Speckle.Connectors.Logging.Internal;
internal static class TracingBuilder
{
public static IDisposable Initialize(SpeckleTracing? logConfiguration, ResourceBuilder resourceBuilder)
{
var tracerProviderBuilder = OpenTelemetry
.Sdk.CreateTracerProviderBuilder()
.AddSource(Consts.TRACING_SOURCE)
.AddHttpClientInstrumentation();
foreach (var tracing in logConfiguration?.Otel ?? [])
{
tracerProviderBuilder = tracerProviderBuilder.AddOtlpExporter(x => ProcessOptions(tracing, x));
}
if (logConfiguration?.Console ?? false)
{
throw new NotImplementedException(
"Dependency on Console logging has been removed as it is not used, and causes a ILRepack warning"
);
// tracerProviderBuilder = tracerProviderBuilder.AddConsoleExporter();
}
tracerProviderBuilder = tracerProviderBuilder
.SetResourceBuilder(resourceBuilder)
.SetSampler<AlwaysOnSampler>()
.AddProcessor(new ActivityScopeActivityProcessor());
return tracerProviderBuilder.Build();
}
private static void ProcessOptions(SpeckleOtelTracing tracing, OtlpExporterOptions options)
{
options.Protocol = OtlpExportProtocol.HttpProtobuf;
var headers = string.Join(",", tracing.Headers?.Select(x => x.Key + "=" + x.Value) ?? []);
if (headers.Length != 0)
{
options.Headers = headers;
}
if (tracing.Endpoint is not null)
{
options.Endpoint = new Uri(tracing.Endpoint);
}
}
}