Skip to content

Commit 0668048

Browse files
committed
Healthchecks updated
1 parent f9e60c5 commit 0668048

5 files changed

Lines changed: 84 additions & 14 deletions

File tree

src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/HealthCheckBuilderSqlServerExtensions.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@
77

88
namespace Microsoft.Extensions.HealthChecks
99
{
10+
// REVIEW: What are the appropriate guards for these functions?
11+
1012
public static class HealthCheckBuilderSqlServerExtensions
1113
{
1214
public static HealthCheckBuilder AddSqlCheck(this HealthCheckBuilder builder, string name, string connectionString)
15+
{
16+
Guard.ArgumentNotNull(nameof(builder), builder);
17+
18+
return AddSqlCheck(builder, name, connectionString, builder.DefaultCacheDuration);
19+
}
20+
21+
public static HealthCheckBuilder AddSqlCheck(this HealthCheckBuilder builder, string name, string connectionString, TimeSpan cacheDuration)
1322
{
1423
builder.AddCheck($"SqlCheck({name})", async () =>
1524
{
@@ -37,7 +46,7 @@ public static HealthCheckBuilder AddSqlCheck(this HealthCheckBuilder builder, st
3746
{
3847
return HealthCheckResult.Unhealthy($"SqlCheck({name}): Exception during check: {ex.GetType().FullName}");
3948
}
40-
});
49+
}, cacheDuration);
4150

4251
return builder;
4352
}

src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Checks/NumericChecks.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ public static partial class HealthCheckBuilderExtensions
1010
{
1111
// Numeric checks
1212

13-
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc)
13+
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc) where T : IComparable<T>
14+
{
15+
Guard.ArgumentNotNull(nameof(builder), builder);
16+
17+
return AddMinValueCheck(builder, name, minValue, currentValueFunc, builder.DefaultCacheDuration);
18+
}
19+
20+
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc, TimeSpan cacheDuration)
1421
where T : IComparable<T>
1522
{
1623
Guard.ArgumentNotNull(nameof(builder), builder);
@@ -26,12 +33,19 @@ public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder bui
2633
$"min={minValue}, current={currentValue}",
2734
new Dictionary<string, object> { { "min", minValue }, { "current", currentValue } }
2835
);
29-
});
36+
}, cacheDuration);
3037

3138
return builder;
3239
}
3340

34-
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc)
41+
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc) where T : IComparable<T>
42+
{
43+
Guard.ArgumentNotNull(nameof(builder), builder);
44+
45+
return AddMaxValueCheck(builder, name, maxValue, currentValueFunc, builder.DefaultCacheDuration);
46+
}
47+
48+
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc, TimeSpan cacheDuration)
3549
where T : IComparable<T>
3650
{
3751
Guard.ArgumentNotNull(nameof(builder), builder);
@@ -47,7 +61,7 @@ public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder bui
4761
$"max={maxValue}, current={currentValue}",
4862
new Dictionary<string, object> { { "max", maxValue }, { "current", currentValue } }
4963
);
50-
});
64+
}, cacheDuration);
5165

5266
return builder;
5367
}

src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Checks/SystemChecks.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System;
45
using System.Diagnostics;
56

67
namespace Microsoft.Extensions.HealthChecks
@@ -12,10 +13,19 @@ public static partial class HealthCheckBuilderExtensions
1213
public static HealthCheckBuilder AddPrivateMemorySizeCheck(this HealthCheckBuilder builder, long maxSize)
1314
=> AddMaxValueCheck(builder, $"PrivateMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().PrivateMemorySize64);
1415

16+
public static HealthCheckBuilder AddPrivateMemorySizeCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
17+
=> AddMaxValueCheck(builder, $"PrivateMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().PrivateMemorySize64, cacheDuration);
18+
1519
public static HealthCheckBuilder AddVirtualMemorySizeCheck(this HealthCheckBuilder builder, long maxSize)
1620
=> AddMaxValueCheck(builder, $"VirtualMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().VirtualMemorySize64);
1721

22+
public static HealthCheckBuilder AddVirtualMemorySizeCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
23+
=> AddMaxValueCheck(builder, $"VirtualMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().VirtualMemorySize64, cacheDuration);
24+
1825
public static HealthCheckBuilder AddWorkingSetCheck(this HealthCheckBuilder builder, long maxSize)
1926
=> AddMaxValueCheck(builder, $"WorkingSet({maxSize})", maxSize, () => Process.GetCurrentProcess().WorkingSet64);
27+
28+
public static HealthCheckBuilder AddWorkingSetCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
29+
=> AddMaxValueCheck(builder, $"WorkingSet({maxSize})", maxSize, () => Process.GetCurrentProcess().WorkingSet64, cacheDuration);
2030
}
2131
}

src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Checks/UrlChecks.cs

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,73 @@ namespace Microsoft.Extensions.HealthChecks
1010
{
1111
public static partial class HealthCheckBuilderExtensions
1212
{
13-
// URL checks
13+
// Default URL check
1414

1515
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url)
16-
=> AddUrlCheck(builder, url, response => UrlChecker.DefaultUrlCheck(response));
16+
{
17+
Guard.ArgumentNotNull(nameof(builder), builder);
18+
19+
return AddUrlCheck(builder, url, builder.DefaultCacheDuration);
20+
}
21+
22+
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, TimeSpan cacheDuration)
23+
=> AddUrlCheck(builder, url, response => UrlChecker.DefaultUrlCheck(response), cacheDuration);
24+
25+
// Func returning IHealthCheckResult
26+
27+
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, IHealthCheckResult> checkFunc)
28+
{
29+
Guard.ArgumentNotNull(nameof(builder), builder);
30+
31+
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
32+
}
1733

1834
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
19-
Func<HttpResponseMessage, IHealthCheckResult> checkFunc)
35+
Func<HttpResponseMessage, IHealthCheckResult> checkFunc,
36+
TimeSpan cacheDuration)
2037
{
2138
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
2239

23-
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)));
40+
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)), cacheDuration);
41+
}
42+
43+
// Func returning Task<IHealthCheckResult>
44+
45+
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc)
46+
{
47+
Guard.ArgumentNotNull(nameof(builder), builder);
48+
49+
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
2450
}
2551

2652
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
27-
Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc)
53+
Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc,
54+
TimeSpan cacheDuration)
2855
{
2956
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
3057

31-
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)));
58+
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)), cacheDuration);
59+
}
60+
61+
// Func returning ValueTask<IHealthCheckResult>
62+
63+
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc)
64+
{
65+
Guard.ArgumentNotNull(nameof(builder), builder);
66+
67+
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
3268
}
3369

3470
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
35-
Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc)
71+
Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc,
72+
TimeSpan cacheDuration)
3673
{
3774
Guard.ArgumentNotNull(nameof(builder), builder);
3875
Guard.ArgumentNotNullOrEmpty(nameof(url), url);
3976
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
4077

4178
var urlCheck = new UrlChecker(checkFunc, url);
42-
builder.AddCheck($"UrlCheck({url})", () => urlCheck.CheckAsync());
79+
builder.AddCheck($"UrlCheck({url})", () => urlCheck.CheckAsync(), cacheDuration);
4380
return builder;
4481
}
4582
}

src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/HealthCheckBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public HealthCheckBuilder()
2121
[string.Empty] = _currentGroup
2222
};
2323

24-
DefaultCacheDuration = TimeSpan.FromMinutes(1);
24+
DefaultCacheDuration = TimeSpan.FromMinutes(5);
2525
}
2626

2727
/// <summary>

0 commit comments

Comments
 (0)