| File: NatsHealthCheck.cs | Web Access |
| Project: src\src\Components\Aspire.NATS.Net\Aspire.NATS.Net.csproj (Aspire.NATS.Net) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Extensions.Diagnostics.HealthChecks; using NATS.Client.Core; namespace Aspire.NATS.Net; internal sealed class NatsHealthCheck(INatsConnection connection) : IHealthCheck { public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { var result = connection.ConnectionState switch { NatsConnectionState.Open => HealthCheckResult.Healthy(), NatsConnectionState.Connecting or NatsConnectionState.Reconnecting => HealthCheckResult.Degraded(), NatsConnectionState.Closed => await TryConnect(connection).ConfigureAwait(false), _ => new HealthCheckResult(context.Registration.FailureStatus) }; return result; } private static async Task<HealthCheckResult> TryConnect(INatsConnection natsConnection) { try { await natsConnection.ConnectAsync().ConfigureAwait(false); return HealthCheckResult.Healthy(); } catch (Exception) { return HealthCheckResult.Unhealthy(); } } }