public async Task Consume(ConsumeContext <StartSubtask> context) { var message = context.Message; _logger.LogInformation("Starting sub-task Id = {TaskId}", message.TaskId); var task = await _dbContext.Tasks.SingleOrDefaultAsync(x => x.TaskId == message.TaskId); if (task == null) { _logger.LogWarning("Sub-task does not exist with Id = {TaskId}", message.TaskId); return; } if (!task.IsPending()) { _logger.LogWarning("Sub-task has already been started. Id = {TaskId}", message.TaskId); return; } task.Status = Status.InProgress; task.StartTime = message.StartTime; await _dbContext.SaveChangesAsync(); }
public async Task Consume(ConsumeContext <CreateJob> context) { var message = context.Message; if (message.JobId == Guid.Empty) { _logger.LogWarning("Job id cannot be empty."); return; } _logger.LogInformation("Creating Job [JobId = {JobId}, Type = {Type}, Namespace = {Namespace}]", message.JobId, message.Type, message.Namespace); var job = new Job() { JobId = message.JobId, CorrelationId = message.CorrelationId, Type = message.Type, Namespace = message.Namespace, Meta = message.Meta }; await _dbContext.Jobs.AddAsync(job); await _dbContext.SaveChangesAsync(); }
public async Task Consume(ConsumeContext <EndSubtask> context) { var message = context.Message; _logger.LogInformation("Ending Sub-task Id = {TaskId}", message.TaskId); var task = await _dbContext.Tasks.SingleOrDefaultAsync(x => x.TaskId == message.TaskId); if (task == null) { _logger.LogWarning("Sub-task does not exist with Id = {TaskId}", message.TaskId); return; } if (task.IsFinished()) { _logger.LogWarning("Sub-task has already been ended. Id = {JobId}", message.TaskId); return; } task.Status = message.Success ? Status.Completed : Status.Failed; task.EndTime = message.EndTime; await _dbContext.SaveChangesAsync(); }
public async Task Consume(ConsumeContext <StartJob> context) { var message = context.Message; _logger.LogInformation("Starting Job Id = {JobId}", message.JobId); var job = await _dbContext.Jobs.SingleOrDefaultAsync(x => x.JobId == message.JobId); if (job == null) { _logger.LogWarning("Job does not exist with Id = {JobId}", message.JobId); return; } if (!job.IsPending()) { _logger.LogWarning("Job has already been started. Id = {JobId}", message.JobId); return; } job.Status = Status.InProgress; job.StartTime = message.StartTime; await _dbContext.SaveChangesAsync(); }
public async Task Consume(ConsumeContext <EndJob> context) { var message = context.Message; _logger.LogInformation("Ending Job Id = {JobId}", message.JobId); var job = await _dbContext.Jobs.SingleOrDefaultAsync(x => x.JobId == message.JobId); if (job == null) { _logger.LogWarning("Job does not exist with Id = {JobId}", message.JobId); return; } if (job.IsFinished()) { _logger.LogWarning("Job has already been ended. Id = {JobId}", message.JobId); return; } job.Status = message.Success ? Status.Completed : Status.Failed; job.EndTime = message.EndTime; await _dbContext.SaveChangesAsync(); }
public async Task Consume(ConsumeContext <CreateSubtask> context) { var message = context.Message; if (message.TaskId == Guid.Empty) { _logger.LogWarning("Sub-task id cannot be empty."); return; } _logger.LogInformation("Creating sub-task [JobId = {JobId}, TaskId = {JobId}, Name = {Name}]", message.JobId, message.TaskId, message.Name); var job = await _dbContext .Jobs.AsNoTracking() .SingleOrDefaultAsync(x => x.JobId == message.JobId); if (job == null) { _logger.LogError("Job with ID {JobId} has not been created. Job creation may be queued and waiting. Retry."); throw new InvalidOperationException($"Job with ID {message.JobId} does not exist."); } var task = new Subtask() { JobId = job.Id, TaskId = message.TaskId, Name = message.Name, Meta = message.Meta }; await _dbContext.Tasks.AddAsync(task); await _dbContext.SaveChangesAsync(); }