65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
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<PlannerQueueMessage>, ISchedulerPlannerQueue
|
|
{
|
|
public RedisSchedulerPlannerQueue(
|
|
SchedulerQueueOptions queueOptions,
|
|
SchedulerRedisQueueOptions redisOptions,
|
|
ILogger<RedisSchedulerPlannerQueue> logger,
|
|
TimeProvider timeProvider,
|
|
Func<ConfigurationOptions, Task<IConnectionMultiplexer>>? connectionFactory = null)
|
|
: base(
|
|
queueOptions,
|
|
redisOptions,
|
|
redisOptions.Planner,
|
|
PlannerPayload.Instance,
|
|
logger,
|
|
timeProvider,
|
|
connectionFactory)
|
|
{
|
|
}
|
|
|
|
private sealed class PlannerPayload : IRedisSchedulerQueuePayload<PlannerQueueMessage>
|
|
{
|
|
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<PlannerQueueMessage>(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<string, string>? GetAttributes(PlannerQueueMessage message)
|
|
=> null;
|
|
}
|
|
}
|