Healthchecks updated
This commit is contained in:
parent
dbbcc95c5e
commit
8daebced2f
@ -7,9 +7,18 @@ using System.Data.SqlClient;
|
||||
|
||||
namespace Microsoft.Extensions.HealthChecks
|
||||
{
|
||||
// REVIEW: What are the appropriate guards for these functions?
|
||||
|
||||
public static class HealthCheckBuilderSqlServerExtensions
|
||||
{
|
||||
public static HealthCheckBuilder AddSqlCheck(this HealthCheckBuilder builder, string name, string connectionString)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddSqlCheck(builder, name, connectionString, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddSqlCheck(this HealthCheckBuilder builder, string name, string connectionString, TimeSpan cacheDuration)
|
||||
{
|
||||
builder.AddCheck($"SqlCheck({name})", async () =>
|
||||
{
|
||||
@ -37,7 +46,7 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
{
|
||||
return HealthCheckResult.Unhealthy($"SqlCheck({name}): Exception during check: {ex.GetType().FullName}");
|
||||
}
|
||||
});
|
||||
}, cacheDuration);
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
@ -10,7 +10,14 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
{
|
||||
// Numeric checks
|
||||
|
||||
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc)
|
||||
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc) where T : IComparable<T>
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddMinValueCheck(builder, name, minValue, currentValueFunc, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddMinValueCheck<T>(this HealthCheckBuilder builder, string name, T minValue, Func<T> currentValueFunc, TimeSpan cacheDuration)
|
||||
where T : IComparable<T>
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
@ -26,12 +33,19 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
$"min={minValue}, current={currentValue}",
|
||||
new Dictionary<string, object> { { "min", minValue }, { "current", currentValue } }
|
||||
);
|
||||
});
|
||||
}, cacheDuration);
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc)
|
||||
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc) where T : IComparable<T>
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddMaxValueCheck(builder, name, maxValue, currentValueFunc, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddMaxValueCheck<T>(this HealthCheckBuilder builder, string name, T maxValue, Func<T> currentValueFunc, TimeSpan cacheDuration)
|
||||
where T : IComparable<T>
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
@ -47,7 +61,7 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
$"max={maxValue}, current={currentValue}",
|
||||
new Dictionary<string, object> { { "max", maxValue }, { "current", currentValue } }
|
||||
);
|
||||
});
|
||||
}, cacheDuration);
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Microsoft.Extensions.HealthChecks
|
||||
@ -12,10 +13,19 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
public static HealthCheckBuilder AddPrivateMemorySizeCheck(this HealthCheckBuilder builder, long maxSize)
|
||||
=> AddMaxValueCheck(builder, $"PrivateMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().PrivateMemorySize64);
|
||||
|
||||
public static HealthCheckBuilder AddPrivateMemorySizeCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
|
||||
=> AddMaxValueCheck(builder, $"PrivateMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().PrivateMemorySize64, cacheDuration);
|
||||
|
||||
public static HealthCheckBuilder AddVirtualMemorySizeCheck(this HealthCheckBuilder builder, long maxSize)
|
||||
=> AddMaxValueCheck(builder, $"VirtualMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().VirtualMemorySize64);
|
||||
|
||||
public static HealthCheckBuilder AddVirtualMemorySizeCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
|
||||
=> AddMaxValueCheck(builder, $"VirtualMemorySize({maxSize})", maxSize, () => Process.GetCurrentProcess().VirtualMemorySize64, cacheDuration);
|
||||
|
||||
public static HealthCheckBuilder AddWorkingSetCheck(this HealthCheckBuilder builder, long maxSize)
|
||||
=> AddMaxValueCheck(builder, $"WorkingSet({maxSize})", maxSize, () => Process.GetCurrentProcess().WorkingSet64);
|
||||
|
||||
public static HealthCheckBuilder AddWorkingSetCheck(this HealthCheckBuilder builder, long maxSize, TimeSpan cacheDuration)
|
||||
=> AddMaxValueCheck(builder, $"WorkingSet({maxSize})", maxSize, () => Process.GetCurrentProcess().WorkingSet64, cacheDuration);
|
||||
}
|
||||
}
|
||||
|
@ -10,36 +10,73 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
{
|
||||
public static partial class HealthCheckBuilderExtensions
|
||||
{
|
||||
// URL checks
|
||||
// Default URL check
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url)
|
||||
=> AddUrlCheck(builder, url, response => UrlChecker.DefaultUrlCheck(response));
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
|
||||
Func<HttpResponseMessage, IHealthCheckResult> checkFunc)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)));
|
||||
return AddUrlCheck(builder, url, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, TimeSpan cacheDuration)
|
||||
=> AddUrlCheck(builder, url, response => UrlChecker.DefaultUrlCheck(response), cacheDuration);
|
||||
|
||||
// Func returning IHealthCheckResult
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, IHealthCheckResult> checkFunc)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
|
||||
Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc)
|
||||
Func<HttpResponseMessage, IHealthCheckResult> checkFunc,
|
||||
TimeSpan cacheDuration)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
|
||||
|
||||
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)));
|
||||
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)), cacheDuration);
|
||||
}
|
||||
|
||||
// Func returning Task<IHealthCheckResult>
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
|
||||
Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc)
|
||||
Func<HttpResponseMessage, Task<IHealthCheckResult>> checkFunc,
|
||||
TimeSpan cacheDuration)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
|
||||
|
||||
return AddUrlCheck(builder, url, response => new ValueTask<IHealthCheckResult>(checkFunc(response)), cacheDuration);
|
||||
}
|
||||
|
||||
// Func returning ValueTask<IHealthCheckResult>
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url, Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
|
||||
return AddUrlCheck(builder, url, checkFunc, builder.DefaultCacheDuration);
|
||||
}
|
||||
|
||||
public static HealthCheckBuilder AddUrlCheck(this HealthCheckBuilder builder, string url,
|
||||
Func<HttpResponseMessage, ValueTask<IHealthCheckResult>> checkFunc,
|
||||
TimeSpan cacheDuration)
|
||||
{
|
||||
Guard.ArgumentNotNull(nameof(builder), builder);
|
||||
Guard.ArgumentNotNullOrEmpty(nameof(url), url);
|
||||
Guard.ArgumentNotNull(nameof(checkFunc), checkFunc);
|
||||
|
||||
var urlCheck = new UrlChecker(checkFunc, url);
|
||||
builder.AddCheck($"UrlCheck({url})", () => urlCheck.CheckAsync());
|
||||
builder.AddCheck($"UrlCheck({url})", () => urlCheck.CheckAsync(), cacheDuration);
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ namespace Microsoft.Extensions.HealthChecks
|
||||
[string.Empty] = _currentGroup
|
||||
};
|
||||
|
||||
DefaultCacheDuration = TimeSpan.FromMinutes(1);
|
||||
DefaultCacheDuration = TimeSpan.FromMinutes(5);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
Loading…
x
Reference in New Issue
Block a user