Skip to content

Commit 1013eba

Browse files
CopilotJFenderson
andcommitted
Add NoOpTelemetryService and conditional registration logic
Co-authored-by: JFenderson <24466206+JFenderson@users.noreply.github.com>
1 parent da3411e commit 1013eba

File tree

3 files changed

+68
-4
lines changed

3 files changed

+68
-4
lines changed

Backend/Podium/Podium.API/Extensions/MonitoringExtensions.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,27 @@ public static IServiceCollection AddPodiumApplicationInsights(this IServiceColle
4848

4949
/// <summary>
5050
/// Adds custom telemetry tracking services.
51+
/// Conditionally registers real or no-op implementations based on Application Insights configuration.
5152
/// </summary>
52-
public static IServiceCollection AddPodiumTelemetryServices(this IServiceCollection services)
53+
public static IServiceCollection AddPodiumTelemetryServices(this IServiceCollection services, IConfiguration configuration)
5354
{
54-
services.AddScoped<ITelemetryService, TelemetryService>();
55-
services.AddScoped<MetricsService>();
55+
var connectionString = configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]
56+
?? configuration["ApplicationInsights:ConnectionString"];
57+
var isEnabled = configuration.GetValue<bool>("ENABLE_APPLICATION_INSIGHTS", true);
58+
59+
if (!string.IsNullOrWhiteSpace(connectionString) && isEnabled)
60+
{
61+
// Application Insights is enabled - register real implementations
62+
services.AddScoped<ITelemetryService, TelemetryService>();
63+
services.AddScoped<MetricsService>();
64+
Console.WriteLine("Telemetry services registered (Application Insights enabled)");
65+
}
66+
else
67+
{
68+
// Application Insights is disabled - register no-op implementation
69+
services.AddScoped<ITelemetryService, NoOpTelemetryService>();
70+
Console.WriteLine("No-op telemetry service registered (Application Insights disabled)");
71+
}
5672

5773
return services;
5874
}

Backend/Podium/Podium.API/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
// MONITORING: Application Insights, Health Checks, Telemetry
7979
// ---------------------------------------------------------
8080
builder.Services.AddPodiumApplicationInsights(builder.Configuration);
81-
builder.Services.AddPodiumTelemetryServices();
81+
builder.Services.AddPodiumTelemetryServices(builder.Configuration);
8282
builder.Services.AddPodiumHealthChecks(builder.Configuration);
8383
// ---------------------------------------------------------
8484

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using Microsoft.Extensions.Logging;
2+
using Podium.Core.Interfaces;
3+
4+
namespace Podium.Infrastructure.Telemetry;
5+
6+
/// <summary>
7+
/// No-op implementation of telemetry service used when Application Insights is disabled.
8+
/// All methods log at debug level and perform no actual telemetry tracking.
9+
/// </summary>
10+
public class NoOpTelemetryService : ITelemetryService
11+
{
12+
private readonly ILogger<NoOpTelemetryService> _logger;
13+
14+
public NoOpTelemetryService(ILogger<NoOpTelemetryService> logger)
15+
{
16+
_logger = logger;
17+
}
18+
19+
/// <inheritdoc/>
20+
public void TrackAuthenticationAttempt(string userId, bool success, string reason)
21+
{
22+
_logger.LogDebug("Application Insights disabled - skipping authentication attempt telemetry for user {UserId}", userId);
23+
}
24+
25+
/// <inheritdoc/>
26+
public void TrackVideoUpload(string userId, long fileSizeBytes, TimeSpan duration, bool success)
27+
{
28+
_logger.LogDebug("Application Insights disabled - skipping video upload telemetry for user {UserId}", userId);
29+
}
30+
31+
/// <inheritdoc/>
32+
public void TrackDatabaseQuery(string queryName, TimeSpan duration)
33+
{
34+
_logger.LogDebug("Application Insights disabled - skipping database query telemetry for {QueryName}", queryName);
35+
}
36+
37+
/// <inheritdoc/>
38+
public void TrackApiEndpoint(string endpoint, TimeSpan responseTime, int statusCode)
39+
{
40+
_logger.LogDebug("Application Insights disabled - skipping API endpoint telemetry for {Endpoint}", endpoint);
41+
}
42+
43+
/// <inheritdoc/>
44+
public void TrackException(Exception ex, Dictionary<string, string> properties)
45+
{
46+
_logger.LogDebug("Application Insights disabled - skipping exception telemetry for {ExceptionType}", ex.GetType().Name);
47+
}
48+
}

0 commit comments

Comments
 (0)