public async Task StartAsync_WithPublishers_StartsTimer() { // Arrange var publishers = new IHealthCheckPublisher[] { new TestPublisher(), }; var service = CreateService(publishers); try { // Act await service.StartAsync(); // Assert Assert.True(service.IsTimerRunning); Assert.False(service.IsStopping); } finally { await service.StopAsync(); Assert.False(service.IsTimerRunning); Assert.True(service.IsStopping); } }
private async Task RunPublisherAsync(IHealthCheckPublisher publisher, HealthReport report, CancellationToken cancellationToken) { var duration = ValueStopwatch.StartNew(); try { Logger.HealthCheckPublisherBegin(_logger, publisher); await publisher.PublishAsync(report, cancellationToken).ConfigureAwait(false); Logger.HealthCheckPublisherEnd(_logger, publisher, duration.GetElapsedTime()); } catch (OperationCanceledException) when(IsStopping) { // This is a cancellation - if the app is shutting down we want to ignore it. Otherwise, it's // a timeout and we want to log it. } catch (OperationCanceledException) { Logger.HealthCheckPublisherTimeout(_logger, publisher, duration.GetElapsedTime()); throw; } catch (Exception ex) { Logger.HealthCheckPublisherError(_logger, publisher, duration.GetElapsedTime(), ex); throw; } }
private static partial void HealthCheckPublisherTimeout(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, double ElapsedMilliseconds);
public static void HealthCheckPublisherTimeout(ILogger logger, IHealthCheckPublisher publisher, TimeSpan duration) => HealthCheckPublisherTimeout(logger, publisher, duration.TotalMilliseconds);
private static partial void HealthCheckPublisherError(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, double ElapsedMilliseconds, Exception exception);
public static void HealthCheckPublisherError(ILogger logger, IHealthCheckPublisher publisher, TimeSpan duration, Exception exception) => HealthCheckPublisherError(logger, publisher, duration.TotalMilliseconds, exception);
public static void HealthCheckPublisherEnd(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, TimeSpan duration) => HealthCheckPublisherEnd(logger, HealthCheckPublisher, duration.TotalMilliseconds);
public static partial void HealthCheckPublisherBegin(ILogger logger, IHealthCheckPublisher HealthCheckPublisher);
public static void HealthCheckPublisherEnd(ILogger logger, IHealthCheckPublisher publisher, TimeSpan duration) { _healthCheckPublisherEnd(logger, publisher, duration.TotalMilliseconds, null); }
public static void HealthCheckPublisherBegin(ILogger logger, IHealthCheckPublisher publisher) { _healthCheckPublisherBegin(logger, publisher, null); }