コード例 #1
0
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post")] ProcessingRequest request,
            [Blob("%input-container%/{FileId}")]                CloudBlockBlob outBlob,
            TraceWriter log,
            [ServiceBus("mytopic", AccessRights.Manage)]        out BrokeredMessage topicMessage)
        {
            log.Info("(Fun1) Received image for processing...");

            AsyncHelper.RunSync(async() =>
            {
                await outBlob.UploadFromByteArrayAsync(request.Content, 0, request.Content.Length);
            });

            var analysisRequest = new AnalysisReq
            {
                BlobRef  = outBlob.Name,
                Width    = request.Width,
                ImageUrl = request.ImageUrl
            };

            topicMessage = new BrokeredMessage(analysisRequest);
            return(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(outBlob.Name)
            });
        }
コード例 #2
0
        public async Task <IActionResult> AddNewProcessingRequest(DateTime fromDate, DateTime toDate, string employees)
        {
            try
            {
                var newData = new ProcessingRequest
                {
                    RequestDate = DateTime.Now,
                    FromDate    = fromDate,
                    ToDate      = toDate,
                    Employees   = employees
                };

                if (User.Identity.IsAuthenticated)
                {
                    newData.UserId = User.Identity.Name.ConvertToInteger();
                }

                var saveResult = await _processingsRequestsManager.InsertNewDataItem(newData);

                if (saveResult.Status == RepositoryActionStatus.Created)
                {
                    return(Json("Ok"));
                }
                else
                {
                    return(Json(new { errors = "Error" }));
                }
            }
            catch (Exception)
            {
                return(Json(new { errors = "Error" }));
            }
        }
コード例 #3
0
        /// <summary>
        /// Gets static files by TModel.
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        private async Task <HttpResponseMessage> Get <TModel>(TModel model)
            where TModel : StaticFileModel
        {
            var result = new HttpResponseMessage();

            if (!ModelState.IsValid)
            {
                result.StatusCode = HttpStatusCode.BadRequest;
                return(result);
            }

            try
            {
                var request = new ProcessingRequest <StaticFileModel>
                {
                    //Temporary Repo access, need to go back and build out processors and interfaces.
                    File = await _repo.GetStaticFile <TModel>(model)
                };

                request.File.Flush();
                result.Content = new StreamContent(request.File);
                request.File.Close();

                return(result);
            }

            catch (Exception e)
            {
                result.StatusCode = HttpStatusCode.InternalServerError;
                result.Content    = new StringContent(e.ToString());
                return(result);
            }
        }
コード例 #4
0
        private void WriteStatus(ProcessingRequest request, string status, string details = null, bool issueRedirect = true, Exception exception = null)
        {
            var jobStatus = new JobStatus {
                JobId     = request.JobId,
                JobName   = request.Name,
                Status    = status,
                QueueId   = request.QueueId,
                QueueName = request.QueueName,
                Details   = details,
            };

            foreach (var provider in _statusProviders)
            {
                try {
                    provider.WriteStatus(jobStatus);
                } catch (Exception ex) {
                    Trace.TraceError($"Error recording status: {ex}");
                }
            }

            OnStatusReported(jobStatus);

            if (issueRedirect)
            {
                Redirect(jobStatus, request, exception);
            }
        }
コード例 #5
0
ファイル: ValidatorBase.cs プロジェクト: ArcSoftware/DNDApp
        protected virtual async Task <ProcessingRequest <TModel> > ValidateSequence(TModel item)
        {
            var request = new ProcessingRequest <TModel>
            {
                Item = item
            };

            foreach (var v in ValidationSequence)
            {
                await v.ValidateAsync(request);
            }

            if (request.Messages.Count > 0)
            {
                foreach (var message in request.Messages)
                {
                    request.IsValid = (message.Type != ProcessingMessageType.ValidationError);
                }
            }
            else
            {
                request.IsValid = true;
            }

            return(request);
        }
コード例 #6
0
 public override async Task ValidateAsync(ProcessingRequest <TModelType> request)
 {
     if (_repo.GetItem <TModelType>(m => m.Id == request.Item.Id)?.Id == null)
     {
         request.AddValidationMessage($"Object not found by id of type {typeof(TModelType)}",
                                      ProcessingMessageType.ValidationError);
     }
 }
コード例 #7
0
 static private void ShowForm()
 {
     p = new ProcessingRequest();
     p.StartPosition = FormStartPosition.Manual;
     p.Location      = point;
     p.TopMost       = true;
     Application.Run(p);
 }
コード例 #8
0
 public override async Task ValidateAsync(ProcessingRequest <TModel> request)
 {
     if (request.Item.PlayerId != null)
     {
         await Task.Run(() => request.AddValidationMessage(
                            $"Requested objects to create must have null Ids.",
                            ProcessingMessageType.ValidationError));
     }
 }
コード例 #9
0
 private void Redirect(JobStatus status, ProcessingRequest request, Exception exception)
 {
     if (_queueRedirects.TryGetValue(request.QueueId, out var strategy))
     {
         var result = ExecuteRedirect(strategy, status, request, exception);
         if (result != null)
         {
             RequestRedirected?.Invoke(this, new RequestRedirectedEventArgs(result.Message, request.QueueId, result.NewQueue));
         }
     }
 }
コード例 #10
0
        public override async Task <ProcessingRequest <QuakeSoundModel> > Process(QuakeSoundModel model, ActionType actionType)
        {
            model.FileDirectory += model.Variation;

            var request = new ProcessingRequest <QuakeSoundModel>
            {
                Item       = model,
                File       = await _repo.GetStaticFile <QuakeSoundModel>(model),
                ActionType = actionType
            };

            return(request);
        }
コード例 #11
0
        /// <summary>
        /// Execute <see cref="JobHandler.ProcessAsync(ProcessingRequest, CancellationToken)"/> for the specified <see cref="ProcessingRequest"/>
        /// </summary>
        /// <param name="request">Request to process</param>
        /// <param name="handler">Handler to handle the job</param>
        private Task HandleJob(ProcessingRequest request, JobHandler handler)
        {
            var cts = new CancellationTokenSource();

            if (_config.JobTimeout > 0)
            {
                cts.CancelAfter(_config.JobTimeout);
            }

            using (cts) {
                return(handler.ProcessAsync(request, cts.Token));
            }
        }
コード例 #12
0
ファイル: PlayerProcessor.cs プロジェクト: ArcSoftware/DNDApp
        public ProcessingRequest <Player> CreatePlayer(Player player)
        {
            var playerEntity   = PlayerToPlayerEntity(player);
            var playerEntityRO = ProcessCreate(playerEntity).Result;

            _request = new ProcessingRequest <Player>()
            {
                IsValid  = playerEntityRO.IsValid,
                Item     = PlayerEntityToPlayer(playerEntityRO.Item),
                Messages = playerEntityRO.Messages
            };

            return(_request);
        }
コード例 #13
0
        public override Task ProcessAsync(ProcessingRequest request, CancellationToken cancellationToken)
        {
            if (_hangOnProcessing)
            {
                while (true)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
            }
            if (_throwOnProcessing)
            {
                throw new System.Exception("test");
            }

            base.OnProcessingCompleted(request, "test");
            return(Task.FromResult(true));
        }
コード例 #14
0
        private async Task HandleRequestAsync(ProcessingRequest request, bool processEvents)
        {
            WriteStatus(request, JobStatus.Received, issueRedirect: false);

            if (_cancelProcessing)
            {
                WriteStatus(request, JobStatus.Canceled);
                return;
            }

            if (!_handlerLocator.TryGetHandlerByQueueId(request.QueueId, out var handler))
            {
                // NOTE: this will never be reached due to the throw in InternalJobQueueFactory.Create(),
                // which is called by all entrypoints into this method.
                WriteStatus(request, JobStatus.Skipped, $"No handler found for {request}");
                return;
            }

            if (!handler.CanProcess(request))
            {
                WriteStatus(request, JobStatus.Skipped, $"No handler could process request '{request}'");
                return;
            }

            WriteStatus(request, JobStatus.Processing, issueRedirect: false);

            if (!processEvents)
            {
                await HandleJob(request, handler);

                return;
            }

            try {
                await HandleJob(request, handler);
            } catch (OperationCanceledException ex) {
                //? JobStatus.Cancelled?
                OnProcessingTimedOut(handler, new ProcessingFailedEventArgs(request, ex));
            } catch (Exception ex) {
                OnProcessingFailed(handler, new ProcessingFailedEventArgs(request, ex));
            }
        }
コード例 #15
0
        private async Task <string> CallFunctionAsync(string contentReference,
                                                      byte[] byteData,
                                                      string imageUrl)
        {
            var req = new ProcessingRequest
            {
                FileId   = contentReference,
                Content  = byteData,
                Width    = 150,
                ImageUrl = imageUrl
            };

            using (var content = new StringContent(JsonConvert.SerializeObject(req)))
            {
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                var response = await
                               Global.HttpClient.Value.PostAsync(_settings.Settings.RequestFunctionUri,
                                                                 content).ConfigureAwait(false);

                return(await response.Content.ReadAsStringAsync()
                       .ConfigureAwait(false));
            }
        }
コード例 #16
0
 /// <summary>
 ///     Invokes the <see cref="ProcessingRequest" /> event
 /// </summary>
 protected virtual void OnProcessingRequest(IHttpContext context)
 {
     ProcessingRequest?.Invoke(this, new EndpointRequestEventArgs(context));
 }
コード例 #17
0
ファイル: ValidationBase.cs プロジェクト: ArcSoftware/DNDApp
 public abstract Task ValidateAsync(ProcessingRequest <TModel> request);
コード例 #18
0
 /// <summary>
 /// Initialize a new instance of the <see cref="JobReceivedEventArgs"/> class
 /// </summary>
 /// <param name="request">Originating request</param>
 public JobReceivedEventArgs(ProcessingRequest request)
 {
     ProcessingRequest = request;
 }
コード例 #19
0
 public override bool CanProcess(ProcessingRequest request) => _canProcess;
コード例 #20
0
        /// <remarks>Returning null from this method causes the calling code to ignore the redirect</remarks>
        private RedirectResult ExecuteRedirect(RedirectStrategy strategy, JobStatus status, ProcessingRequest request, Exception exception)
        {
            if (!strategy.Decider(status, exception))
            {
                return(null);
            }
            var newQueue = strategy.Redirect(status);

            if (string.IsNullOrWhiteSpace(newQueue))
            {
                return(null);
            }

            var message = SendJob(newQueue, request.JobRequest.Type, request.JobRequest.Payload, request.Name);

            WriteStatus(request, JobStatus.Redirected, $"New Queue: {newQueue} Message Id: {message.Id}", false);
            return(new RedirectResult {
                Message = message,
                NewQueue = newQueue
            });
        }