Skip to content

Commit b502723

Browse files
authored
Add configuration for tracing log (#531)
Signed-off-by: Yasumasa Suenaga <[email protected]>
1 parent ead82a2 commit b502723

File tree

5 files changed

+88
-20
lines changed

5 files changed

+88
-20
lines changed

casdk-docs/docs/tutorial-extras/configuration.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,16 @@ InstrumentationKey. For more details, please refer to
409409
AppInsights_InstrumentationKey="AppInsightsInstrumentationKey"
410410
```
411411

412+
#### Configuring telemetry log
413+
414+
WebAPI configures [console exporter of OpenTelemetry](https://opentelemetry.io/docs/languages/net/exporters/#console) by default.
415+
You can configure whether the exporter is enabled with `EnableTelemetryLogging`.
416+
Set `false` if you want to reduce the log.
417+
418+
```bash
419+
CarbonAwareVars__EnableTelemetryLogging=false
420+
```
421+
412422
### Prometheus exporter for emissions data
413423

414424
> DISCLAIMER: The `/metrics` Prometheus exporter is currently unsupported, and is used for internal GSF needs, and may change in the future. It will retrieve _all_ emissions data and create heavy load on your data API's. It is turned off by default.

src/CarbonAware.WebApi/src/Configuration/ServiceCollectionExtensions.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using Microsoft.Extensions.Options;
22
using CarbonAware.WebApi.Metrics;
33
using OpenTelemetry.Metrics;
4+
using OpenTelemetry.Resources;
5+
using OpenTelemetry.Trace;
46

57
namespace CarbonAware.WebApi.Configuration;
68

@@ -32,7 +34,23 @@ public static void AddMonitoringAndTelemetry(this IServiceCollection services, I
3234
// Can be extended in the future to support a different provider like Zipkin, Prometheus etc
3335
}
3436

37+
var enableTelemetryLogging = envVars?.EnableTelemetryLogging ?? true;
38+
if (enableTelemetryLogging)
39+
{
40+
const string serviceName = "CarbonAware.WebAPI";
41+
const string serviceVersion = "1.0.0";
3542

43+
services.AddOpenTelemetry()
44+
.WithTracing(tracerProviderBuilder =>
45+
tracerProviderBuilder
46+
.AddConsoleExporter()
47+
.AddSource(serviceName)
48+
.SetResourceBuilder(
49+
ResourceBuilder.CreateDefault()
50+
.AddService(serviceName: serviceName, serviceVersion: serviceVersion))
51+
.AddHttpClientInstrumentation()
52+
.AddAspNetCoreInstrumentation());
53+
}
3654
}
3755

3856
public static IServiceCollection AddCarbonExporter(this IServiceCollection services, IConfiguration configuration)

src/CarbonAware.WebApi/src/Program.cs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,11 @@
55
using GSF.CarbonAware.Configuration;
66
using GSF.CarbonAware.Exceptions;
77
using Microsoft.OpenApi.Models;
8-
using OpenTelemetry.Resources;
9-
using OpenTelemetry.Trace;
10-
using OpenTelemetry.Metrics;
118
using Swashbuckle.AspNetCore.SwaggerGen;
129
using System.Reflection;
1310

14-
// Define constants to initialize tracing with
15-
var serviceName = "CarbonAware.WebAPI";
16-
var serviceVersion = "1.0.0";
17-
1811
var builder = WebApplication.CreateBuilder(args);
1912

20-
builder.Services.AddOpenTelemetry()
21-
.WithTracing(tracerProviderBuilder =>
22-
tracerProviderBuilder
23-
.AddConsoleExporter()
24-
.AddSource(serviceName)
25-
.SetResourceBuilder(
26-
ResourceBuilder.CreateDefault()
27-
.AddService(serviceName: serviceName, serviceVersion: serviceVersion))
28-
.AddHttpClientInstrumentation()
29-
.AddAspNetCoreInstrumentation());
30-
3113
// Add services to the container.
3214
builder.Services.AddControllers(options =>
3315
{

src/CarbonAware.WebApi/test/unitTests/Configuration/ServiceCollectionExtensionsTests.cs

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using Microsoft.Extensions.DependencyInjection;
44
using Microsoft.Extensions.Configuration;
55
using NUnit.Framework.Internal;
6+
using OpenTelemetry.Trace;
7+
using Microsoft.ApplicationInsights;
68

79
namespace CarbonAware.WepApi.UnitTests;
810

@@ -79,8 +81,8 @@ public void AddMonitoringAndTelemetry_DoesNotAddServices_WithoutTelemetryProvide
7981

8082
// Act & Assert
8183
Assert.DoesNotThrow(() => services.AddMonitoringAndTelemetry(configuration));
82-
Assert.That(services.Count, Is.EqualTo(0));
83-
}
84+
Assert.Null(services.BuildServiceProvider().GetService<TelemetryClient>());
85+
}
8486

8587
[Test]
8688
public void AddCarbonExporter_AddsServices_IsEnabledInConfiguration()
@@ -156,4 +158,58 @@ public void CreateConsoleLogger_ReturnsILogger()
156158
// Assert
157159
Assert.That(logger, Is.Not.Null);
158160
}
161+
162+
[Test]
163+
public void EnableTelemetryLogging_AddsServices_WithoutConfiguration()
164+
{
165+
// Arrange
166+
var services = new ServiceCollection();
167+
168+
var inMemorySettings = new Dictionary<string, string> { };
169+
var configuration = new ConfigurationBuilder()
170+
.AddInMemoryCollection(inMemorySettings)
171+
.Build();
172+
173+
// Act & Assert
174+
Assert.DoesNotThrow(() => services.AddMonitoringAndTelemetry(configuration));
175+
Assert.NotNull(services.BuildServiceProvider().GetService<TracerProvider>());
176+
}
177+
178+
[Test]
179+
public void EnableTelemetryLogging_AddsServices_IsEnabledInConfiguration()
180+
{
181+
// Arrange
182+
var services = new ServiceCollection();
183+
184+
var inMemorySettings = new Dictionary<string, string>
185+
{
186+
{ "CarbonAwareVars:EnableTelemetryLogging", "true" }
187+
};
188+
var configuration = new ConfigurationBuilder()
189+
.AddInMemoryCollection(inMemorySettings)
190+
.Build();
191+
192+
// Act & Assert
193+
Assert.DoesNotThrow(() => services.AddMonitoringAndTelemetry(configuration));
194+
Assert.NotNull(services.BuildServiceProvider().GetService<TracerProvider>());
195+
}
196+
197+
[Test]
198+
public void EnableTelemetryLogging_AddsServices_IsDisabledInConfiguration()
199+
{
200+
// Arrange
201+
var services = new ServiceCollection();
202+
203+
var inMemorySettings = new Dictionary<string, string>
204+
{
205+
{ "CarbonAwareVars:EnableTelemetryLogging", "false" }
206+
};
207+
var configuration = new ConfigurationBuilder()
208+
.AddInMemoryCollection(inMemorySettings)
209+
.Build();
210+
211+
// Act & Assert
212+
Assert.DoesNotThrow(() => services.AddMonitoringAndTelemetry(configuration));
213+
Assert.Null(services.BuildServiceProvider().GetService<TracerProvider>());
214+
}
159215
}

src/CarbonAware/src/CarbonAwareVariablesConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ internal class CarbonAwareVariablesConfiguration
3636

3737
public string TelemetryProvider { get; set; }
3838

39+
public Boolean EnableTelemetryLogging { get; set; }
40+
3941
public Boolean EnableCarbonExporter { get;set; }
4042

4143
public Boolean VerboseApi {get; set;}

0 commit comments

Comments
 (0)