57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using OpenTelemetry;
|
|
using OpenTelemetry.Metrics;
|
|
using OpenTelemetry.Trace;
|
|
|
|
namespace Microsoft.Extensions.Hosting;
|
|
|
|
public static class GodotServiceDefaults
|
|
{
|
|
private static TracerProvider _tracerProvider = null!;
|
|
private static MeterProvider _meterProvider = null!;
|
|
public static void AddServiceDefaults()
|
|
{
|
|
var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT");
|
|
if (endpoint is null)
|
|
{
|
|
Console.WriteLine("OTEL_EXPORTER_OTLP_ENDPOINT is not set, skipping OpenTelemetry setup.");
|
|
return;
|
|
}
|
|
var endpointUri = new Uri(endpoint);
|
|
|
|
_tracerProvider = Sdk.CreateTracerProviderBuilder()
|
|
.AddSource("SharpIde")
|
|
.AddOtlpExporter(options =>
|
|
{
|
|
options.Endpoint = endpointUri;
|
|
options.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
|
|
})
|
|
.Build();
|
|
|
|
_meterProvider = Sdk.CreateMeterProviderBuilder()
|
|
.AddMeter("SharpIde")
|
|
.AddRuntimeInstrumentation()
|
|
.AddOtlpExporter(options =>
|
|
{
|
|
options.Endpoint = endpointUri;
|
|
options.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
|
|
})
|
|
.Build();
|
|
}
|
|
|
|
public static void AddGodotOpenTelemetry(this IServiceCollection services)
|
|
{
|
|
services.AddOpenTelemetry();
|
|
services.AddOpenTelemetryExporters();
|
|
}
|
|
|
|
private static void AddOpenTelemetryExporters(this IServiceCollection services)
|
|
{
|
|
var useOtlpExporter = !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"));
|
|
if (useOtlpExporter)
|
|
{
|
|
services.AddOpenTelemetry().UseOtlpExporter();
|
|
}
|
|
}
|
|
}
|