Skip to content
This repository was archived by the owner on Sep 10, 2024. It is now read-only.

Commit 84f75db

Browse files
authored
fix: remove invalid exn handling (#132)
* fix: remove invalid exn handling * pr-fix: update w custom exn handling strategy
1 parent a9bbcd1 commit 84f75db

File tree

4 files changed

+55
-58
lines changed

4 files changed

+55
-58
lines changed

src/Arcus.BackgroundJobs.AzureActiveDirectory/ClientSecretExpirationJob.cs

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -70,36 +70,52 @@ public ClientSecretExpirationJob(
7070
/// </returns>
7171
public async Task ExecuteAsync(CancellationToken stoppingToken)
7272
{
73-
_logger.LogTrace("Executing {Name}", nameof(ClientSecretExpirationJob));
74-
var graphServiceClient = new GraphServiceClient(new DefaultAzureCredential());
75-
_logger.LogTrace("Token retrieved, getting a list of applications with expired or about to expire secrets.");
76-
77-
var clientSecretExpirationInfoProvider = new ClientSecretExpirationInfoProvider(graphServiceClient, _logger);
78-
IEnumerable<AzureApplication> applications =
79-
await clientSecretExpirationInfoProvider.GetApplicationsWithPotentialExpiredSecrets(_options.UserOptions.ExpirationThreshold);
80-
81-
foreach (AzureApplication application in applications)
73+
try
8274
{
83-
var telemetryContext = new Dictionary<string, object>();
84-
telemetryContext.Add("KeyId", application.KeyId);
85-
telemetryContext.Add("ApplicationName", application.Name);
86-
telemetryContext.Add("RemainingValidDays", application.RemainingValidDays);
75+
_logger.LogTrace("Executing {Name}", nameof(ClientSecretExpirationJob));
76+
var graphServiceClient = new GraphServiceClient(new DefaultAzureCredential());
77+
_logger.LogTrace("Token retrieved, getting a list of applications with expired or about to expire secrets");
8778

88-
var eventType = ClientSecretExpirationEventType.ClientSecretAboutToExpire;
89-
if (application.RemainingValidDays < 0)
90-
{
91-
eventType = ClientSecretExpirationEventType.ClientSecretExpired;
92-
_logger.LogEvent($"The secret {application.KeyId} for Azure Active Directory application {application.Name} has expired.", telemetryContext);
93-
}
94-
else
79+
var clientSecretExpirationInfoProvider = new ClientSecretExpirationInfoProvider(graphServiceClient, _logger);
80+
IEnumerable<AzureApplication> applications =
81+
await clientSecretExpirationInfoProvider.GetApplicationsWithPotentialExpiredSecrets(_options.UserOptions.ExpirationThreshold);
82+
83+
foreach (AzureApplication application in applications)
9584
{
96-
_logger.LogEvent($"The secret {application.KeyId} for Azure Active Directory application {application.Name} will expire within {application.RemainingValidDays} days.", telemetryContext);
85+
ClientSecretExpirationEventType eventType = DetermineExpirationEventType(application);
86+
87+
CloudEvent @event = _options.UserOptions.CreateEvent(application, eventType, _options.UserOptions.EventUri);
88+
await _eventGridPublisher.PublishAsync(@event);
9789
}
90+
_logger.LogTrace("Executing {Name} finished", nameof(ClientSecretExpirationJob));
91+
}
92+
catch (Exception exception)
93+
{
94+
_logger.LogCritical(exception, "Could not correctly publish Azure EventGrid events for potential expired client secrets in the Azure Active Directory due to an exception");
95+
}
96+
}
97+
98+
private ClientSecretExpirationEventType DetermineExpirationEventType(AzureApplication application)
99+
{
100+
var telemetryContext = new Dictionary<string, object>
101+
{
102+
{ "KeyId", application.KeyId },
103+
{ "ApplicationName", application.Name },
104+
{ "RemainingValidDays", application.RemainingValidDays }
105+
};
98106

99-
CloudEvent @event = _options.UserOptions.CreateEvent(application, eventType, _options.UserOptions.EventUri);
100-
await _eventGridPublisher.PublishAsync(@event);
107+
var eventType = ClientSecretExpirationEventType.ClientSecretAboutToExpire;
108+
if (application.RemainingValidDays < 0)
109+
{
110+
eventType = ClientSecretExpirationEventType.ClientSecretExpired;
111+
_logger.LogEvent($"The secret {application.KeyId} for Azure Active Directory application {application.Name} has expired.", telemetryContext);
112+
}
113+
else
114+
{
115+
_logger.LogEvent($"The secret {application.KeyId} for Azure Active Directory application {application.Name} will expire within {application.RemainingValidDays} days.", telemetryContext);
101116
}
102-
_logger.LogTrace("Executing {Name} finished", nameof(ClientSecretExpirationJob));
117+
118+
return eventType;
103119
}
104120
}
105121
}

src/Arcus.BackgroundJobs.AzureActiveDirectory/Extensions/IServiceCollectionExtensions.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
using System;
2-
using System.Linq;
3-
using System.Threading.Tasks;
42
using Arcus.BackgroundJobs.AzureActiveDirectory;
53
using GuardNet;
6-
using Microsoft.Extensions.Logging;
74

85
// ReSharper disable once CheckNamespace
96
namespace Microsoft.Extensions.DependencyInjection
@@ -36,17 +33,7 @@ public static IServiceCollection AddClientSecretExpirationJob(
3633

3734
options.SetUserOptions(additionalOptions);
3835
});
39-
builder.UnobservedTaskExceptionHandler = (sender, args) => UnobservedExceptionHandler(args, services);
4036
});
4137
}
42-
43-
private static void UnobservedExceptionHandler(UnobservedTaskExceptionEventArgs eventArgs, IServiceCollection services)
44-
{
45-
ServiceDescriptor logger = services.FirstOrDefault(service => service.ServiceType == typeof(ILogger));
46-
var loggerInstance = (ILogger) logger?.ImplementationInstance;
47-
48-
loggerInstance?.LogCritical(eventArgs.Exception, "Unhandled exception in job {JobName}", nameof(ClientSecretExpirationJob));
49-
eventArgs.SetObserved();
50-
}
5138
}
5239
}

src/Arcus.BackgroundJobs.Databricks/DatabricksJobMetricsJob.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,24 @@ public DatabricksJobMetricsJob(
6565
/// </returns>
6666
public async Task ExecuteAsync(CancellationToken stoppingToken)
6767
{
68-
using (DatabricksClient client = await _options.CreateDatabricksClientAsync(_secretProvider))
69-
using (var databricksInfoProvider = new DatabricksInfoProvider(client, _logger))
68+
try
7069
{
71-
(DateTimeOffset start, DateTimeOffset end) = _options.DetermineNextTimeWindow();
70+
using (DatabricksClient client = await _options.CreateDatabricksClientAsync(_secretProvider))
71+
using (var databricksInfoProvider = new DatabricksInfoProvider(client, _logger))
72+
{
73+
(DateTimeOffset start, DateTimeOffset end) = _options.DetermineNextTimeWindow();
7274

73-
_logger.LogInformation(
74-
"Job monitor for Databricks is starting at {TriggerTime} for time windows {WindowStart} - {WindowEnd}",
75-
DateTimeOffset.UtcNow, start, end);
75+
_logger.LogInformation(
76+
"Job monitor for Databricks is starting at {TriggerTime} for time windows {WindowStart} - {WindowEnd}",
77+
DateTimeOffset.UtcNow, start, end);
7678

77-
string metricName = _options.UserOptions.MetricName;
78-
await databricksInfoProvider.MeasureJobOutcomesAsync(metricName, start, end);
79+
string metricName = _options.UserOptions.MetricName;
80+
await databricksInfoProvider.MeasureJobOutcomesAsync(metricName, start, end);
81+
}
82+
}
83+
catch (Exception exception)
84+
{
85+
_logger.LogCritical(exception, "Could not measure the finished Databricks jobs due to an exception");
7986
}
8087
}
8188
}

src/Arcus.BackgroundJobs.Databricks/Extensions/IServiceCollectionExtensions.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
using System;
2-
using System.Linq;
3-
using System.Threading.Tasks;
42
using Arcus.BackgroundJobs.Databricks;
53
using GuardNet;
6-
using Microsoft.Extensions.Logging;
74

85
// ReSharper disable once CheckNamespace
96
namespace Microsoft.Extensions.DependencyInjection
@@ -45,17 +42,7 @@ public static IServiceCollection AddDatabricksJobMetricsJob(
4542
options.TokenSecretKey = tokenSecretKey;
4643
options.SetUserOptions(additionalOptions);
4744
});
48-
builder.UnobservedTaskExceptionHandler = (sender, args) => UnobservedExceptionHandler(args, services);
4945
});
5046
}
51-
52-
private static void UnobservedExceptionHandler(UnobservedTaskExceptionEventArgs eventArgs, IServiceCollection services)
53-
{
54-
ServiceDescriptor logger = services.FirstOrDefault(service => service.ServiceType == typeof(ILogger));
55-
var loggerInstance = (ILogger) logger?.ImplementationInstance;
56-
57-
loggerInstance?.LogCritical(eventArgs.Exception, "Unhandled exception in job {JobName}", nameof(DatabricksJobMetricsJob));
58-
eventArgs.SetObserved();
59-
}
6047
}
6148
}

0 commit comments

Comments
 (0)