using System.Threading; using MassTransit; using LCU.Api.Internal.MaidBotLib.Models; using LCU.Api.Internal.Dispatcher.Configurations; namespace LCU.Api.Internal.Dispatcher.Services.QueueServices; public class QueueExecutionService : IQueueExecutionService { private readonly ISendEndpoint _sendEndpoint; private readonly IWorkItemExecutionService _workItemExecutionService; private readonly ReceiveEndpointConfigurations _queueReceiveEndpointsConfiguration; public QueueExecutionService(IBusControl busControl, IWorkItemExecutionService workItemExecutionService, ReceiveEndpointConfigurations queueReceiveEndpointsConfiguration) { _queueReceiveEndpointsConfiguration = queueReceiveEndpointsConfiguration; _workItemExecutionService = workItemExecutionService; _sendEndpoint = busControl.GetSendEndpoint(_queueReceiveEndpointsConfiguration.ExecutionReceiveEndpoint.ReceiveEndpointUri).Result; } public async Task QueueExecution(WorkItemExecution request) { try { var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); await _sendEndpoint.Send(request, cancellationTokenSource.Token); } catch (Exception exception) { Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Fatal(exception, $"Failed to queue workitemexecution request. WorkItemExecutionId: {request?.WorkItemExecutionId}"); throw new ServiceException($"Failed to queue workitemexecution request. WorkItemExecutionId: {request?.WorkItemExecutionId}"); } } public async Task QueueRetryExecution(WorkItemExecution request) { try { var updatedWorkItemExection = _workItemExecutionService.UpdateProcessingWorkItemExecution(request); var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); await _sendEndpoint.Send(request, cancellationTokenSource.Token); } catch (Exception exception) { Log.ForContext(Enum.GetName(typeof(PropertyEnum), PropertyEnum.Group), Enum.GetName(typeof(GroupEnum), GroupEnum.ITDevelopment)) .Fatal(exception, $"Failed to queue workitemexecution request. WorkItemExecutionId: {request?.WorkItemExecutionId}"); throw new ServiceException($"Failed to queue workitemexecution request. WorkItemExecutionId: {request?.WorkItemExecutionId}"); } } }