Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@
using System.Diagnostics.Tracing;
using System.Text.Json;

#if NET
using System.Text.Json.Serialization;
#endif

namespace Grafana.OpenTelemetry
{
[EventSource(Name = "OpenTelemetry-Grafana-Distribution")]
internal sealed class GrafanaOpenTelemetryEventSource : EventSource
internal sealed partial class GrafanaOpenTelemetryEventSource : EventSource
{
public static GrafanaOpenTelemetryEventSource Log = new GrafanaOpenTelemetryEventSource();

Expand Down Expand Up @@ -53,7 +57,11 @@ public void FailureEnablingTracingInstrumentation(string instrumentationLibrary,
[NonEvent]
public void InitializeDistribution(GrafanaOpenTelemetrySettings settings)
{
#if NET
var settingsJson = JsonSerializer.Serialize(settings, GrafanaJsonSerializerContext.Default.GrafanaOpenTelemetrySettings);
#else
var settingsJson = JsonSerializer.Serialize(settings);
#endif

InitializeDistribution(settingsJson);
}
Expand All @@ -75,5 +83,11 @@ public void FailureEnablingInstrumentation(string signal, string instrumentation
{
this.WriteEvent(3, signal, instrumentationLibrary, ex);
}

#if NET
[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[JsonSerializable(typeof(GrafanaOpenTelemetrySettings))]
private sealed partial class GrafanaJsonSerializerContext : JsonSerializerContext;
#endif
}
}
14 changes: 10 additions & 4 deletions src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,12 @@ public class GrafanaOpenTelemetrySettings
///
/// By default, all available instrumentations are activated.
/// </summary>
public HashSet<Instrumentation> Instrumentations { get; } = new HashSet<Instrumentation>((Instrumentation[])Enum.GetValues(typeof(Instrumentation)));
public HashSet<Instrumentation> Instrumentations { get; } =
#if NET
[.. Enum.GetValues<Instrumentation>()];
#else
new HashSet<Instrumentation>((Instrumentation[])Enum.GetValues(typeof(Instrumentation)));
#endif

/// <summary>
/// Gets the list of resource detectors to be activated.
Expand Down Expand Up @@ -114,10 +119,11 @@ internal GrafanaOpenTelemetrySettings(IConfiguration configuration)
Instrumentations.Remove(Instrumentation.AWSLambda);

var disableInstrumentations = configuration[DisableInstrumentationsEnvVarName];
char[] separators = new char[] { ',', ':' };

if (!string.IsNullOrEmpty(disableInstrumentations))
{
foreach (var instrumentationStr in disableInstrumentations.Split(new char[] { ',', ':' }))
foreach (var instrumentationStr in disableInstrumentations.Split(separators))
{
if (Enum.TryParse<Instrumentation>(instrumentationStr, out var instrumentation))
{
Expand All @@ -132,7 +138,7 @@ internal GrafanaOpenTelemetrySettings(IConfiguration configuration)
{
ResourceDetectors.Clear();

foreach (var resourceDetectorStr in resourceDetectors.Split(new char[] { ',', ':' }))
foreach (var resourceDetectorStr in resourceDetectors.Split(separators))
{
if (Enum.TryParse<ResourceDetector>(resourceDetectorStr, out var resourceDetector))
{
Expand All @@ -145,7 +151,7 @@ internal GrafanaOpenTelemetrySettings(IConfiguration configuration)

if (!string.IsNullOrEmpty(disableResourceDetectors))
{
foreach (var resourceDetectorStr in disableResourceDetectors.Split(new char[] { ',', ':' }))
foreach (var resourceDetectorStr in disableResourceDetectors.Split(separators))
{
if (Enum.TryParse<ResourceDetector>(resourceDetectorStr, out var resourceDetector))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,22 @@
//

using System;
using System.Collections.Generic;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

#if NET
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
#endif

namespace Grafana.OpenTelemetry
{
internal abstract class InstrumentationInitializer
{
public static InstrumentationInitializer[] Initializers = new InstrumentationInitializer[]
{
#if NETFRAMEWORK
new AspNetInitializer(),
new OwinInitializer(),
#endif
new AspNetCoreInitializer(),
new AWSInitializer(),
new AWSLambdaInitializer(),
new CassandraInitializer(),
new ElasticsearchClientInitializer(),
new EntityFrameworkCoreInitializer(),
new GrpcNetClientInitializer(),
new HangfireInitializer(),
new HttpClientInitializer(),
new MySqlDataInitializer(),
new NetRuntimeMetricsInitializer(),
new ProcessMetricsInitializer(),
new QuartzInitializer(),
new SqlClientInitializer(),
new StackExchangeRedisInitializer(),
new WcfInitializer(),
};
public static InstrumentationInitializer[] Initializers = GetDefaults();

abstract public Instrumentation Id { get; }
public abstract Instrumentation Id { get; }

public void Initialize(TracerProviderBuilder builder)
{
Expand Down Expand Up @@ -70,5 +54,48 @@ protected virtual void InitializeTracing(TracerProviderBuilder builder)

protected virtual void InitializeMetrics(MeterProviderBuilder builder)
{ }

#if NET
[UnconditionalSuppressMessage(
"Trimming",
"IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code",
Justification = "Usage of is SqlClientInitializer guarded.")]
#endif
private static InstrumentationInitializer[] GetDefaults()
{
var initializers = new List<InstrumentationInitializer>
{
#if NETFRAMEWORK
new AspNetInitializer(),
new OwinInitializer(),
#endif
new AspNetCoreInitializer(),
new AWSInitializer(),
new AWSLambdaInitializer(),
new CassandraInitializer(),
new ElasticsearchClientInitializer(),
new EntityFrameworkCoreInitializer(),
new GrpcNetClientInitializer(),
new HangfireInitializer(),
new HttpClientInitializer(),
new MySqlDataInitializer(),
new NetRuntimeMetricsInitializer(),
new ProcessMetricsInitializer(),
new QuartzInitializer(),
new StackExchangeRedisInitializer(),
new WcfInitializer(),
};

#if NET
if (RuntimeFeature.IsDynamicCodeSupported)
{
initializers.Add(new SqlClientInitializer());
}
#else
initializers.Add(new SqlClientInitializer());
#endif

return initializers.ToArray();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@

namespace Grafana.OpenTelemetry
{
#if NET
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Trimming is not yet supported with SqlClient instrumentation.")]
#endif
internal class SqlClientInitializer : InstrumentationInitializer
{
public override Instrumentation Id { get; } = Instrumentation.SqlClient;
Expand Down
Loading