Exemplo n.º 1
0
        public async Task <IHttpActionResult> Average(AverageProjectsModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (!AllProjectsExist(model.Projects))
            {
                return(NotFound());
            }

            var now     = DateTime.UtcNow;
            var project = new Project
            {
                UserId            = User.Identity.GetUserId(),
                TraceId           = Guid.NewGuid(),
                Name              = model.Name,
                FileName          = FormatStitchedFrom(model.Projects),
                TestName          = model.TestName,
                TestType          = model.TestType,
                Channel           = model.Channel,
                Tag               = model.Tag,
                Mass              = model.Mass,
                Area              = model.Area,
                Comments          = $"{model.Comments} {FormatStitchedFromNames(model.Projects)}",
                IsAveragePlot     = true,
                CreatedAt         = now,
                UpdatedAt         = now,
                StitchedFromNames = FormatStitchedFromNames(model.Projects),
            };

            _db.Projects.Add(project);
            await _db.SaveChangesAsync();

            var traceId = project.TraceId.ToString();

            project.JobId = _jobClient.Enqueue <IBackgroundProcessor>(
                p => p.PrepareAverageProject(
                    traceId,
                    project.Id,
                    model.Projects,
                    JobCancellationToken.Null));

            await _db.SaveChangesAsync();

            var timeoutJobId = _jobClient.Schedule <IBackgroundProcessor>(
                p => p.HandleTimeout(traceId, project.Id),
                _options.ProjectPrepareTimeout);

            _jobClient.ContinueWith <IBackgroundProcessor>(project.JobId,
                                                           p => p.CancelTimeout(traceId, project.Id, timeoutJobId),
                                                           JobContinuationOptions.OnAnyFinishedState);

            return(Ok());
        }
Exemplo n.º 2
0
        public IHttpActionResult Delete([FromODataUri] int key)
        {
            var project = GetAllUserProjects().SingleOrDefault(p => p.Id == key);

            if (project == null)
            {
                return(NotFound());
            }
            var userId = HttpContext.Current.User.Identity.GetUserId();

            var traceId = project.TraceId.ToString();

            _db.SP_DeleteProject(userId, key);
            _db.SaveChanges();

            if (!string.IsNullOrWhiteSpace(project.JobId) && _jobClient.Delete(project.JobId))
            {
                _jobClient.ContinueWith <IBackgroundProcessor>(project.JobId, p => p.DeleteProjectData(traceId, project.Id), JobContinuationOptions.OnAnyFinishedState);
                if (project.InternalFileName != null)
                {
                    if (_options.RawFileRetentionPeriod > TimeSpan.Zero)
                    {
                        _jobClient.Schedule <IBackgroundProcessor>(p => p.DeleteRawFile(traceId, project.Id, project.InternalFileName), _options.RawFileRetentionPeriod);
                    }
                    else
                    {
                        _jobClient.ContinueWith <IBackgroundProcessor>(project.JobId, p => p.DeleteRawFile(traceId, project.Id, project.InternalFileName), JobContinuationOptions.OnAnyFinishedState);
                    }
                }
            }
            else
            {
                _jobClient.Enqueue <IBackgroundProcessor>(p => p.DeleteProjectData(traceId, project.Id));
                if (project.InternalFileName != null)
                {
                    if (_options.RawFileRetentionPeriod > TimeSpan.Zero)
                    {
                        _jobClient.Schedule <IBackgroundProcessor>(p => p.DeleteRawFile(traceId, project.Id, project.InternalFileName), _options.RawFileRetentionPeriod);
                    }
                    else
                    {
                        _jobClient.Enqueue <IBackgroundProcessor>(p => p.DeleteRawFile(traceId, project.Id, project.InternalFileName));
                    }
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Exemplo n.º 3
0
        public string ProcessTask(TaskInpuModel inputModel)
        {
            var state = new EnqueuedState(JobQueues.Task);
            var jobId = jobClient.Create <ITaskJob>(job => job.Run(inputModel, null), state);

            state = new EnqueuedState(JobQueues.Notify);
            jobId = jobClient.ContinueWith <INotifyJob>(jobId, job => job.Notify(inputModel, null), state);

            return(jobId);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;System.String&gt;.</returns>
        public Task <string> Handle(AWSTestDeploymentScriptCommand request, CancellationToken cancellationToken)
        {
            var parentJobId = _backgroungJobClient.Enqueue <IAWSResourcesService>(c => c.CreateDockerVM(
                                                                                      request.StackName, request.Json, request.Parameters, request.CredentialsId));

            if (request.DockerImageId != Guid.Empty)
            {
                _backgroungJobClient.ContinueWith <IAWSResourcesService>(parentJobId, x => x.DeployImageToVM(request.StackName, request.CredentialsId, request.DockerImageId));
            }

            return(Task.FromResult(parentJobId));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;System.String&gt;.</returns>
        public async Task <string> Handle(AzureTestCreateResourcesCommand request, CancellationToken cancellationToken)
        {
            var parentJobId = _backgroungJobClient.Enqueue <IAzureResourceService>(c => c.TestCreateResources(
                                                                                       request.ResourceName, request.Region, request.DeploymentJson, request.DeploymentParameters, request.CredentialsId));

            if (request.DockerImageId != Guid.Empty)
            {
                _backgroungJobClient.ContinueWith <IAzureResourceService>(parentJobId, x => x.DeployImageToAzureHost(request.ResourceName, request.CredentialsId, request.DockerImageId));
            }

            return(await Task.FromResult(parentJobId));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Starts a new job if we are running inside a job, it marks it as a child.
        /// </summary>
        public void Start <TJob>([InstantHandle][NotNull] Expression <Action <TJob> > methodCall)
        {
            var context = performingContextAccessor.Get();

            if (context != null)
            {
                backgroundJobClient.ContinueWith(context.BackgroundJob.Id, methodCall);
            }
            else
            {
                backgroundJobClient.Enqueue(methodCall);
            }
        }
Exemplo n.º 7
0
        void ITenantJobs.ScheduleTableauPdfDownload(CreatePdfOptions options)
        {
            var jobId = InnerBackgroundJobClient.Enqueue <ITenantJobs>(z => z.CreateTableauPdf(options));

            InnerBackgroundJobClient.ContinueWith <ITenantJobs>(jobId, y => y.DownloadTableauPdfContinuationJobAsync());
        }
Exemplo n.º 8
0
        private void QueueReportDownload(CreatePdfOptions options)
        {
            var jobId = Backgrounder.Enqueue <ITenantJobs>(z => z.CreateTableauPdf(options));

            Backgrounder.ContinueWith <ITenantJobs>(jobId, y => y.DownloadTableauPdfContinuationJobAsync());
        }
Exemplo n.º 9
0
        private void ScheduleProjectForProcessing(Project entity)
        {
            var timeoutJobId = _jobClient.Schedule <IBackgroundProcessor>(p => p.HandleTimeout(entity.TraceId.ToString(), entity.Id), _options.ProjectPrepareTimeout);

            _jobClient.ContinueWith <IBackgroundProcessor>(entity.JobId, p => p.CancelTimeout(entity.TraceId.ToString(), entity.Id, timeoutJobId), JobContinuationOptions.OnAnyFinishedState);
        }