64e3fbe035
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public members surfaced by commentchecker — resolves 5,847 of 5,869 issues (99.6%) across three /fixdocs passes.
40 lines
1.8 KiB
C#
40 lines
1.8 KiB
C#
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
|
using ZB.MOM.WW.OtOpcUa.Commons.Interfaces;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Host.Health;
|
|
|
|
/// <summary>
|
|
/// Reports Healthy on the admin-role leader, Degraded on a non-leader admin member. Used by
|
|
/// the <c>/health/active</c> endpoint so external load balancers can route admin-singleton
|
|
/// traffic to the current leader (cookie sessions still work on either node — DataProtection
|
|
/// keys are shared).
|
|
/// </summary>
|
|
public sealed class AdminRoleLeaderHealthCheck : IHealthCheck
|
|
{
|
|
private readonly IClusterRoleInfo _roleInfo;
|
|
|
|
/// <summary>Initializes a new instance of the AdminRoleLeaderHealthCheck class.</summary>
|
|
/// <param name="roleInfo">The cluster role information provider.</param>
|
|
public AdminRoleLeaderHealthCheck(IClusterRoleInfo roleInfo)
|
|
{
|
|
_roleInfo = roleInfo;
|
|
}
|
|
|
|
/// <summary>Checks the health status of the admin role leader.</summary>
|
|
/// <param name="context">The health check context.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>A task representing the health check operation.</returns>
|
|
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
|
|
{
|
|
if (!_roleInfo.HasRole("admin"))
|
|
return Task.FromResult(HealthCheckResult.Healthy("Node does not carry admin role"));
|
|
|
|
var leader = _roleInfo.RoleLeader("admin");
|
|
var isLeader = leader is not null && leader.Value.Equals(_roleInfo.LocalNode);
|
|
|
|
return Task.FromResult(isLeader
|
|
? HealthCheckResult.Healthy($"Admin leader ({_roleInfo.LocalNode})")
|
|
: HealthCheckResult.Degraded($"Admin member but not leader (leader={leader?.Value ?? "<unknown>"})"));
|
|
}
|
|
}
|