Пример #1
0
        public async Task <IActionResult> Handle(BulkRetryWorkflowsRequest request, CancellationToken cancellationToken = default)
        {
            var workflowInstances        = (await _store.FindManyAsync(new WorkflowInstanceIdsSpecification(request.WorkflowInstanceIds), cancellationToken: cancellationToken)).ToList();
            var faultedWorkflowInstances = workflowInstances.Where(x => x.WorkflowStatus == WorkflowStatus.Faulted).ToList();

            foreach (var workflowInstance in faultedWorkflowInstances)
            {
                await _reviver.ReviveAndQueueAsync(workflowInstance, cancellationToken);
            }

            return(Json(new
            {
                ScheduledWorkflowCount = faultedWorkflowInstances.Count
            }, _serializerSettingsProvider.GetSettings()));
        }
Пример #2
0
        public async Task <IActionResult> Handle(string id, RetryWorkflowRequest?options, CancellationToken cancellationToken = default)
        {
            var workflowInstance = await _store.FindByIdAsync(id, cancellationToken);

            if (workflowInstance == null)
            {
                return(NotFound());
            }

            if (options?.RunImmediately == false)
            {
                workflowInstance = await _reviver.ReviveAndQueueAsync(workflowInstance, cancellationToken);

                var model = new
                {
                    WorkflowInstanceId = workflowInstance.Id,
                };

                return(Accepted(model));
            }

            var runWorkflowResult = await _reviver.ReviveAndRunAsync(workflowInstance, cancellationToken);

            workflowInstance = runWorkflowResult.WorkflowInstance !;

            if (workflowInstance.WorkflowStatus == WorkflowStatus.Faulted)
            {
                return(StatusCode(500, new
                {
                    WorkflowInstanceId = workflowInstance.Id,
                    Fault = workflowInstance.Fault
                }).ConfigureForEndpoint());
            }

            return(Response.HasStarted
                ? new EmptyResult()
                : Json(new
            {
                WorkflowInstanceId = workflowInstance.Id,
                WorkflowStatus = workflowInstance.WorkflowStatus
            }, _serializerSettingsProvider.GetSettings()));
        }
Пример #3
0
        public async Task <IActionResult> Handle(string id, RetryWorkflowRequest?options, CancellationToken cancellationToken = default)
        {
            var workflowInstance = await _store.FindByIdAsync(id, cancellationToken);

            if (workflowInstance == null)
            {
                return(NotFound());
            }

            if (options?.RunImmediately == false)
            {
                workflowInstance = await _reviver.ReviveAndQueueAsync(workflowInstance, cancellationToken);

                var model = new
                {
                    WorkflowInstanceId = workflowInstance.Id,
                };

                return(Accepted(model));
            }

            workflowInstance = await _reviver.ReviveAndRunAsync(workflowInstance, cancellationToken);

            if (workflowInstance.WorkflowStatus == WorkflowStatus.Faulted)
            {
                return(StatusCode(500, new
                {
                    WorkflowInstanceId = workflowInstance.Id,
                    Fault = workflowInstance.Fault
                }));
            }

            return(Response.HasStarted ? (IActionResult) new EmptyResult() : Ok(new
            {
                WorkflowInstanceId = workflowInstance.Id,
                WorkflowStatus = workflowInstance.WorkflowStatus
            }));
        }