Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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();
        }