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