42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using FinalFactory.Rendezvous.Server.Provisioning;
|
|
using FinalFactory.Rendezvous.Server.State;
|
|
using FinalFactory.Rendezvous.Server.Transport;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace FinalFactory.Rendezvous.Server.Observability;
|
|
|
|
internal sealed class RendezvousReadiness(
|
|
UdpMediatorService mediator,
|
|
ProvisioningReadiness provisioning,
|
|
IEphemeralRendezvousStore state,
|
|
IOptions<UdpMediatorOptions> udpOptions)
|
|
{
|
|
public ReadinessSnapshot GetSnapshot()
|
|
{
|
|
bool ipv6Required = !string.IsNullOrWhiteSpace(udpOptions.Value.Ipv6ListenAddress);
|
|
return new ReadinessSnapshot(
|
|
HttpListenerReady: true,
|
|
UdpIpv4ListenerReady: mediator.LocalEndpoint is not null,
|
|
UdpIpv6ListenerReady: !ipv6Required || mediator.LocalIpv6Endpoint is not null,
|
|
ProvisioningReady: provisioning.IsReady,
|
|
StoreAvailable: state.IsAvailable,
|
|
Draining: state.IsDraining);
|
|
}
|
|
}
|
|
|
|
internal sealed record ReadinessSnapshot(
|
|
bool HttpListenerReady,
|
|
bool UdpIpv4ListenerReady,
|
|
bool UdpIpv6ListenerReady,
|
|
bool ProvisioningReady,
|
|
bool StoreAvailable,
|
|
bool Draining)
|
|
{
|
|
public bool IsReady => HttpListenerReady
|
|
&& UdpIpv4ListenerReady
|
|
&& UdpIpv6ListenerReady
|
|
&& ProvisioningReady
|
|
&& StoreAvailable
|
|
&& !Draining;
|
|
}
|