Skip to content

Commit bc695c7

Browse files
Address some native AoT warnings
Address some native AoT warnings with .NET 8. The only remaining warning is from the usage of `ReflectionHelper.CallStaticMethod()`.
1 parent 255f30a commit bc695c7

File tree

4 files changed

+79
-29
lines changed

4 files changed

+79
-29
lines changed

src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetryEventSource.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
using System.Diagnostics.Tracing;
88
using System.Text.Json;
99

10+
#if NET
11+
using System.Text.Json.Serialization;
12+
#endif
13+
1014
namespace Grafana.OpenTelemetry
1115
{
1216
[EventSource(Name = "OpenTelemetry-Grafana-Distribution")]
13-
internal sealed class GrafanaOpenTelemetryEventSource : EventSource
17+
internal sealed partial class GrafanaOpenTelemetryEventSource : EventSource
1418
{
1519
public static GrafanaOpenTelemetryEventSource Log = new GrafanaOpenTelemetryEventSource();
1620

@@ -53,7 +57,11 @@ public void FailureEnablingTracingInstrumentation(string instrumentationLibrary,
5357
[NonEvent]
5458
public void InitializeDistribution(GrafanaOpenTelemetrySettings settings)
5559
{
60+
#if NET
61+
var settingsJson = JsonSerializer.Serialize(settings, GrafanaJsonSerializerContext.Default.GrafanaOpenTelemetrySettings);
62+
#else
5663
var settingsJson = JsonSerializer.Serialize(settings);
64+
#endif
5765

5866
InitializeDistribution(settingsJson);
5967
}
@@ -75,5 +83,11 @@ public void FailureEnablingInstrumentation(string signal, string instrumentation
7583
{
7684
this.WriteEvent(3, signal, instrumentationLibrary, ex);
7785
}
86+
87+
#if NET
88+
[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
89+
[JsonSerializable(typeof(GrafanaOpenTelemetrySettings))]
90+
private sealed partial class GrafanaJsonSerializerContext : JsonSerializerContext;
91+
#endif
7892
}
7993
}

src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ public class GrafanaOpenTelemetrySettings
3838
///
3939
/// By default, all available instrumentations are activated.
4040
/// </summary>
41-
public HashSet<Instrumentation> Instrumentations { get; } = new HashSet<Instrumentation>((Instrumentation[])Enum.GetValues(typeof(Instrumentation)));
41+
public HashSet<Instrumentation> Instrumentations { get; } =
42+
#if NET
43+
[.. Enum.GetValues<Instrumentation>()];
44+
#else
45+
new HashSet<Instrumentation>((Instrumentation[])Enum.GetValues(typeof(Instrumentation)));
46+
#endif
4247

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

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

118124
if (!string.IsNullOrEmpty(disableInstrumentations))
119125
{
120-
foreach (var instrumentationStr in disableInstrumentations.Split(new char[] { ',', ':' }))
126+
foreach (var instrumentationStr in disableInstrumentations.Split(separators))
121127
{
122128
if (Enum.TryParse<Instrumentation>(instrumentationStr, out var instrumentation))
123129
{
@@ -132,7 +138,7 @@ internal GrafanaOpenTelemetrySettings(IConfiguration configuration)
132138
{
133139
ResourceDetectors.Clear();
134140

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

146152
if (!string.IsNullOrEmpty(disableResourceDetectors))
147153
{
148-
foreach (var resourceDetectorStr in disableResourceDetectors.Split(new char[] { ',', ':' }))
154+
foreach (var resourceDetectorStr in disableResourceDetectors.Split(separators))
149155
{
150156
if (Enum.TryParse<ResourceDetector>(resourceDetectorStr, out var resourceDetector))
151157
{

src/Grafana.OpenTelemetry.Base/Instrumentations/InstrumentationInitializer.cs

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,22 @@
44
//
55

66
using System;
7+
using System.Collections.Generic;
78
using OpenTelemetry.Metrics;
89
using OpenTelemetry.Trace;
910

11+
#if NET
12+
using System.Diagnostics.CodeAnalysis;
13+
using System.Runtime.CompilerServices;
14+
#endif
15+
1016
namespace Grafana.OpenTelemetry
1117
{
1218
internal abstract class InstrumentationInitializer
1319
{
14-
public static InstrumentationInitializer[] Initializers = new InstrumentationInitializer[]
15-
{
16-
#if NETFRAMEWORK
17-
new AspNetInitializer(),
18-
new OwinInitializer(),
19-
#endif
20-
new AspNetCoreInitializer(),
21-
new AWSInitializer(),
22-
new AWSLambdaInitializer(),
23-
new CassandraInitializer(),
24-
new ElasticsearchClientInitializer(),
25-
new EntityFrameworkCoreInitializer(),
26-
new GrpcNetClientInitializer(),
27-
new HangfireInitializer(),
28-
new HttpClientInitializer(),
29-
new MySqlDataInitializer(),
30-
new NetRuntimeMetricsInitializer(),
31-
new ProcessMetricsInitializer(),
32-
new QuartzInitializer(),
33-
new SqlClientInitializer(),
34-
new StackExchangeRedisInitializer(),
35-
new WcfInitializer(),
36-
};
20+
public static InstrumentationInitializer[] Initializers = GetDefaults();
3721

38-
abstract public Instrumentation Id { get; }
22+
public abstract Instrumentation Id { get; }
3923

4024
public void Initialize(TracerProviderBuilder builder)
4125
{
@@ -70,5 +54,48 @@ protected virtual void InitializeTracing(TracerProviderBuilder builder)
7054

7155
protected virtual void InitializeMetrics(MeterProviderBuilder builder)
7256
{ }
57+
58+
#if NET
59+
[UnconditionalSuppressMessage(
60+
"Trimming",
61+
"IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code",
62+
Justification = "Usage of is SqlClientInitializer guarded.")]
63+
#endif
64+
private static InstrumentationInitializer[] GetDefaults()
65+
{
66+
var initializers = new List<InstrumentationInitializer>
67+
{
68+
#if NETFRAMEWORK
69+
new AspNetInitializer(),
70+
new OwinInitializer(),
71+
#endif
72+
new AspNetCoreInitializer(),
73+
new AWSInitializer(),
74+
new AWSLambdaInitializer(),
75+
new CassandraInitializer(),
76+
new ElasticsearchClientInitializer(),
77+
new EntityFrameworkCoreInitializer(),
78+
new GrpcNetClientInitializer(),
79+
new HangfireInitializer(),
80+
new HttpClientInitializer(),
81+
new MySqlDataInitializer(),
82+
new NetRuntimeMetricsInitializer(),
83+
new ProcessMetricsInitializer(),
84+
new QuartzInitializer(),
85+
new StackExchangeRedisInitializer(),
86+
new WcfInitializer(),
87+
};
88+
89+
#if NET
90+
if (RuntimeFeature.IsDynamicCodeSupported)
91+
{
92+
initializers.Add(new SqlClientInitializer());
93+
}
94+
#else
95+
initializers.Add(new SqlClientInitializer());
96+
#endif
97+
98+
return initializers.ToArray();
99+
}
73100
}
74101
}

src/Grafana.OpenTelemetry.Base/Instrumentations/SqlClientInitializer.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
namespace Grafana.OpenTelemetry
99
{
10+
#if NET
11+
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Trimming is not yet supported with SqlClient instrumentation.")]
12+
#endif
1013
internal class SqlClientInitializer : InstrumentationInitializer
1114
{
1215
public override Instrumentation Id { get; } = Instrumentation.SqlClient;

0 commit comments

Comments
 (0)