using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Health; public sealed class QuartzHealthCheck(ISchedulerFactory schedulerFactory) : IHealthCheck { public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) { try { var scheduler = await schedulerFactory.GetScheduler(DefaultSchedulerName, cancellationToken); if(scheduler == null) return HealthCheckResult.Unhealthy($"Scheduler with name '{DefaultSchedulerName}' not found."); if (!scheduler.IsStarted) return HealthCheckResult.Unhealthy($"{DefaultSchedulerName} Quartz scheduler is not running"); await scheduler.CheckExists(new JobKey(Guid.NewGuid().ToString()), cancellationToken); return HealthCheckResult.Healthy($"{DefaultSchedulerName} Quartz scheduler is ready"); } catch (SchedulerException) { return HealthCheckResult.Unhealthy($"{DefaultSchedulerName} Quartz scheduler cannot connect to the store"); } } }