using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using StackExchange.Redis; using StellaOps.Scheduler.Models; namespace StellaOps.Scheduler.Queue.Redis; internal sealed class RedisSchedulerPlannerQueue : RedisSchedulerQueueBase, ISchedulerPlannerQueue { public RedisSchedulerPlannerQueue( SchedulerQueueOptions queueOptions, SchedulerRedisQueueOptions redisOptions, ILogger logger, TimeProvider timeProvider, Func>? connectionFactory = null) : base( queueOptions, redisOptions, redisOptions.Planner, PlannerPayload.Instance, logger, timeProvider, connectionFactory) { } private sealed class PlannerPayload : IRedisSchedulerQueuePayload { public static PlannerPayload Instance { get; } = new(); public string QueueName => "planner"; public string GetIdempotencyKey(PlannerQueueMessage message) => message.IdempotencyKey; public string Serialize(PlannerQueueMessage message) => CanonicalJsonSerializer.Serialize(message); public PlannerQueueMessage Deserialize(string payload) => CanonicalJsonSerializer.Deserialize(payload); public string GetRunId(PlannerQueueMessage message) => message.Run.Id; public string GetTenantId(PlannerQueueMessage message) => message.Run.TenantId; public string? GetScheduleId(PlannerQueueMessage message) => message.ScheduleId; public string? GetSegmentId(PlannerQueueMessage message) => null; public string? GetCorrelationId(PlannerQueueMessage message) => message.CorrelationId; public IReadOnlyDictionary? GetAttributes(PlannerQueueMessage message) => null; } }