using System.Collections.Generic; using System.Threading; using LCU.Api.Internal.Dispatcher.Configurations; using LCU.Api.Internal.MaidBotLib.Models; using LCU.Library.Internal.ApiResponse.Models; using LCU.Library.Internal.DispatcherModels.Entities; using LCU.Library.Internal.DispatcherModels.Models; using LCU.Library.Internal.DispatcherModels.Models.Requests; using MassTransit; using Newtonsoft.Json; using ApiResponse = LCU.Library.Internal.ApiResponse.Models; namespace LCU.Api.Internal.Dispatcher.Services.QueueServices { public class QueueJobFailureService : IQueueJobFailureService { private readonly ISendEndpoint _sendEndpoint; private readonly ReceiveEndpointConfigurations _queueReceiveEndpointsConfiguration; public QueueJobFailureService(IBusControl busControl, ReceiveEndpointConfigurations queueReceiveEndpointsConfiguration) { _queueReceiveEndpointsConfiguration = queueReceiveEndpointsConfiguration; _sendEndpoint = busControl.GetSendEndpoint(_queueReceiveEndpointsConfiguration.JobFailureReceiveEndpoint.ReceiveEndpointUri).Result; } public async Task QueueJobFailure(int jobId, int workItemId, List messages) { try { var request = new JobFailureRequest() { JobId = jobId, WorkItemId = workItemId, ExecutionMessages = messages }; 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 job failure request. JobId: {jobId}, WorkItemId: {workItemId}"); throw new ServiceException($"Failed to queue job failure request. JobId: {jobId}, WorkItemId: {workItemId}"); } } } }