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);
            }
        }
예제 #2
0
    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;
        }
    }
예제 #3
0
 private static partial void HealthCheckPublisherTimeout(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, double ElapsedMilliseconds);
예제 #4
0
 public static void HealthCheckPublisherTimeout(ILogger logger, IHealthCheckPublisher publisher, TimeSpan duration) =>
 HealthCheckPublisherTimeout(logger, publisher, duration.TotalMilliseconds);
예제 #5
0
 private static partial void HealthCheckPublisherError(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, double ElapsedMilliseconds, Exception exception);
예제 #6
0
 public static void HealthCheckPublisherError(ILogger logger, IHealthCheckPublisher publisher, TimeSpan duration, Exception exception) =>
 HealthCheckPublisherError(logger, publisher, duration.TotalMilliseconds, exception);
예제 #7
0
 public static void HealthCheckPublisherEnd(ILogger logger, IHealthCheckPublisher HealthCheckPublisher, TimeSpan duration) =>
 HealthCheckPublisherEnd(logger, HealthCheckPublisher, duration.TotalMilliseconds);
예제 #8
0
 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);
 }