This commit is contained in:
		
							
								
								
									
										55
									
								
								src/StellaOps.Notify.Queue/NotifyDeliveryQueueHealthCheck.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/StellaOps.Notify.Queue/NotifyDeliveryQueueHealthCheck.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| using System; | ||||
| using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.Extensions.Diagnostics.HealthChecks; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using StellaOps.Notify.Queue.Nats; | ||||
| using StellaOps.Notify.Queue.Redis; | ||||
|  | ||||
| namespace StellaOps.Notify.Queue; | ||||
|  | ||||
| public sealed class NotifyDeliveryQueueHealthCheck : IHealthCheck | ||||
| { | ||||
|     private readonly INotifyDeliveryQueue _queue; | ||||
|     private readonly ILogger<NotifyDeliveryQueueHealthCheck> _logger; | ||||
|  | ||||
|     public NotifyDeliveryQueueHealthCheck( | ||||
|         INotifyDeliveryQueue queue, | ||||
|         ILogger<NotifyDeliveryQueueHealthCheck> logger) | ||||
|     { | ||||
|         _queue = queue ?? throw new ArgumentNullException(nameof(queue)); | ||||
|         _logger = logger ?? throw new ArgumentNullException(nameof(logger)); | ||||
|     } | ||||
|  | ||||
|     public async Task<HealthCheckResult> CheckHealthAsync( | ||||
|         HealthCheckContext context, | ||||
|         CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         cancellationToken.ThrowIfCancellationRequested(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             switch (_queue) | ||||
|             { | ||||
|                 case RedisNotifyDeliveryQueue redisQueue: | ||||
|                     await redisQueue.PingAsync(cancellationToken).ConfigureAwait(false); | ||||
|                     return HealthCheckResult.Healthy("Redis Notify delivery queue reachable."); | ||||
|  | ||||
|                 case NatsNotifyDeliveryQueue natsQueue: | ||||
|                     await natsQueue.PingAsync(cancellationToken).ConfigureAwait(false); | ||||
|                     return HealthCheckResult.Healthy("NATS Notify delivery queue reachable."); | ||||
|  | ||||
|                 default: | ||||
|                     return HealthCheckResult.Healthy("Notify delivery queue transport without dedicated ping returned healthy."); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             _logger.LogError(ex, "Notify delivery queue health check failed."); | ||||
|             return new HealthCheckResult( | ||||
|                 context.Registration.FailureStatus, | ||||
|                 "Notify delivery queue transport unreachable.", | ||||
|                 ex); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user