public void MoveJobForProcessing_StatusUpdateFailed_Test()
        {
            var job = new Jobs.Model.Job()
            {
                JobId   = 1,
                JobType = JobType.IlrSubmission
            };

            var jobQueueManagerMock = new Mock <IJobManager>();

            jobQueueManagerMock.Setup(x => x.GetJobsByPriorityAsync(It.IsAny <int>())).ReturnsAsync(new List <Job>()
            {
                new Jobs.Model.Job()
            });
            jobQueueManagerMock.Setup(x => x.UpdateJobStatus(It.IsAny <long>(), It.IsAny <JobStatusType>())).ReturnsAsync(false);

            var auditorMock = new Mock <IAuditor>();

            auditorMock.Setup(x => x.AuditAsync(It.IsAny <JobContextMessage>(), AuditEventType.ServiceFailed, It.IsAny <string>())).Returns(Task.CompletedTask);

            var messagingServiceMock = new Mock <IMessagingService>();

            messagingServiceMock.Setup(x => x.SendMessageAsync(new MessageParameters(JobType.IlrSubmission)));

            var queueHandler = GetJobQueueHandler(messagingServiceMock.Object, auditorMock.Object, jobQueueManagerMock.Object);

            var task = queueHandler.MoveJobForProcessingAsync(job).ConfigureAwait(true);

            task.GetAwaiter().GetResult();

            jobQueueManagerMock.Verify(x => x.UpdateJobStatus(job.JobId, JobStatusType.MovedForProcessing), Times.Once);
            messagingServiceMock.Verify(x => x.SendMessageAsync(It.IsAny <MessageParameters>()), Times.Never);
            auditorMock.Verify(x => x.AuditAsync(It.IsAny <JobContextMessage>(), AuditEventType.JobFailed, It.IsAny <string>()), Times.Once);
        }
コード例 #2
0
        public static JobQueueManager.Data.Entities.Job Convert(Jobs.Model.Job source)
        {
            if (source == null)
            {
                return(null);
            }

            var entity = new JobQueueManager.Data.Entities.Job();

            Convert(source, entity);
            return(entity);
        }
コード例 #3
0
 public static void Convert(JobQueueManager.Data.Entities.Job source, Jobs.Model.Job destination)
 {
     destination.DateTimeSubmittedUtc = source.DateTimeSubmittedUtc;
     destination.Priority             = source.Priority;
     destination.Status             = (JobStatus.Interface.JobStatusType)source.Status;
     destination.DateTimeUpdatedUtc = source.DateTimeUpdatedUtc;
     destination.JobId              = source.JobId;
     destination.RowVersion         = source.RowVersion == null ? null : System.Convert.ToBase64String(source.RowVersion);
     destination.SubmittedBy        = source.SubmittedBy;
     destination.NotifyEmail        = source.NotifyEmail;
     destination.JobType            = (Jobs.Model.Enums.JobType)source.JobType;
     destination.CrossLoadingStatus = source.CrossLoadingStatus.HasValue ? (JobStatus.Interface.JobStatusType)source.CrossLoadingStatus.Value : (JobStatus.Interface.JobStatusType?)null;
 }
コード例 #4
0
 public static void Convert(Jobs.Model.Job source, JobQueueManager.Data.Entities.Job destination)
 {
     destination.DateTimeSubmittedUtc = source.DateTimeSubmittedUtc;
     destination.JobType            = (short)source.JobType;
     destination.Priority           = source.Priority;
     destination.Status             = (short)source.Status;
     destination.DateTimeUpdatedUtc = source.DateTimeUpdatedUtc;
     destination.JobId              = source.JobId;
     destination.SubmittedBy        = source.SubmittedBy;
     destination.NotifyEmail        = source.NotifyEmail;
     destination.RowVersion         = source.RowVersion == null ? null : System.Text.Encoding.UTF8.GetBytes(source.RowVersion);
     destination.CrossLoadingStatus = source.CrossLoadingStatus.HasValue ? (short)source.CrossLoadingStatus : (short?)null;
 }
コード例 #5
0
        public ActionResult Post([FromBody] FileUploadJob job)
        {
            _logger.LogInfo("Post for job received for job: {@job}", new[] { job });
            if (job == null)
            {
                _logger.LogWarning("Job Post request received with empty data");
                return(BadRequest());
            }

            if (!Enum.IsDefined(typeof(JobStatusType), job.Status))
            {
                _logger.LogWarning($"Job Post request received with bad status {job.Status}");
                return(BadRequest("Status is not a valid value"));
            }

            if (!Enum.IsDefined(typeof(JobType), job.JobType))
            {
                _logger.LogWarning($"Job Post request received with bad job type {job.JobType}");
                return(BadRequest("Job type is not a valid value"));
            }

            try
            {
                var jobModel = new Jobs.Model.Job
                {
                    Status               = job.Status,
                    JobId                = job.JobId,
                    JobType              = job.JobType,
                    Priority             = job.Priority,
                    SubmittedBy          = job.SubmittedBy,
                    NotifyEmail          = job.NotifyEmail,
                    DateTimeSubmittedUtc = job.DateTimeSubmittedUtc,
                };

                if (job.JobId > 0)
                {
                    if (job.Status == JobStatusType.Ready || job.Status == JobStatusType.Paused ||
                        job.Status == JobStatusType.FailedRetry)
                    {
                        _logger.LogInfo($"Going to update job with job Id: {job.JobId}");

                        var result = _jobManager.UpdateJob(jobModel);
                        if (result)
                        {
                            _logger.LogInfo($"Successfully updated job with job Id: {job.JobId}");
                            return(Ok());
                        }

                        _logger.LogWarning($"Update job failed for job Id: {job.JobId}");
                        return(BadRequest());
                    }

                    _logger.LogWarning($"Update job rejected because job status is not updateable for job Id: {job.JobId}; status: {job.Status}");
                    return(BadRequest($"Only job with status of {nameof(JobStatusType.Ready)}, {nameof(JobStatusType.Paused)} or {nameof(JobStatusType.FailedRetry)} can be updated."));
                }

                _logger.LogInfo($"Create Job request received with object: {job} ");

                job.JobId = _fileUploadJobManager.AddJob(job);

                if (job.JobId > 0)
                {
                    _logger.LogInfo($"Created job successfully with Id: {job.JobId}");
                    return(Ok(job.JobId));
                }

                _logger.LogInfo("Create job failed for job: {@job}", new[] { job });
                return(BadRequest());
            }
            catch (Exception ex)
            {
                _logger.LogError("Post for job failed for job: {@job}", ex, new[] { job });

                return(BadRequest());
            }
        }