Add tags to HealthReportEntry if an exception occurs

This commit is contained in:
Miroslav Jezik 2020-03-27 00:15:17 +01:00 committed by Ryan Nowak
parent 15d5ffebca
commit d1d9b97f77
2 changed files with 45 additions and 2 deletions

View File

@ -125,7 +125,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
description: "A timeout occurred while running check.", description: "A timeout occurred while running check.",
duration: duration, duration: duration,
exception: ex, exception: ex,
data: null); data: null,
tags: registration.Tags);
Log.HealthCheckError(_logger, registration, ex, duration); Log.HealthCheckError(_logger, registration, ex, duration);
} }
@ -139,7 +140,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
description: ex.Message, description: ex.Message,
duration: duration, duration: duration,
exception: ex, exception: ex,
data: null); data: null,
tags: registration.Tags);
Log.HealthCheckError(_logger, registration, ex, duration); Log.HealthCheckError(_logger, registration, ex, duration);
} }

View File

@ -113,6 +113,47 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
}); });
} }
[Fact]
public async Task CheckAsync_TagsArePresentInHealthReportEntryIfExceptionOccurs()
{
const string ExceptionMessage = "exception-message";
const string OperationCancelledMessage = "operation-cancelled-message";
var exceptionTags = new[] { "unhealthy-check-tag" };
var operationExceptionTags = new[] { "degraded-check-tag" };
// Arrange
var service = CreateHealthChecksService(b =>
{
b.AddAsyncCheck("ExceptionCheck", _ => throw new Exception(ExceptionMessage), exceptionTags);
b.AddAsyncCheck("OperationExceptionCheck", _ => throw new OperationCanceledException(OperationCancelledMessage), operationExceptionTags);
});
// Act
var results = await service.CheckHealthAsync();
// Assert
Assert.Collection(
results.Entries.OrderBy(kvp => kvp.Key),
actual =>
{
Assert.Equal("ExceptionCheck", actual.Key);
Assert.Equal(ExceptionMessage, actual.Value.Description);
Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status);
Assert.Equal(ExceptionMessage, actual.Value.Exception.Message);
Assert.Empty(actual.Value.Data);
Assert.Equal(actual.Value.Tags, exceptionTags);
},
actual =>
{
Assert.Equal("OperationExceptionCheck", actual.Key);
Assert.Equal("A timeout occurred while running check.", actual.Value.Description);
Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status);
Assert.Equal(OperationCancelledMessage, actual.Value.Exception.Message);
Assert.Empty(actual.Value.Data);
Assert.Equal(actual.Value.Tags, operationExceptionTags);
});
}
[Fact] [Fact]
public async Task CheckAsync_RunsFilteredChecksAndAggregatesResultsAsync() public async Task CheckAsync_RunsFilteredChecksAndAggregatesResultsAsync()
{ {