Exemplo n.º 1
0
        internal static bool CanRetryProcess(this IReadWritableProcessState state,
                                             IProcessExecutionContext executionContext,
                                             ILogger processLogger, IProcessRepository registeredProcesses,
                                             IBatchEngineSubscribers batchEngineSubscribers, IStateManager stateManager, IFrameworkLogger fLogger,
                                             out bool stop, out string stopMessage)
        {
            stop        = false;
            stopMessage = string.Empty;

            var process = registeredProcesses.GetRegisteredProcesses().FirstOrDefault(p => p.ProcessKey == executionContext.Configuration.ProcessKey);

            ProcessRetryContext context = new ProcessRetryContext(state.Id, state.ProcessId, processLogger, executionContext);

            process?.InvokeProcessRetry(context);

            if (context.StopFlag)
            {
                processLogger.Warn("Retry stopped by process class {processType}", process?.GetType());

                //state.MarkProcessStatus(CompletionStatus.Finished, ResultStatus.Error,
                //    "Retry stopped by process class", stateManager, registeredProcesses, executionContext, batchEngineSubscribers, fLogger);
                stopMessage = "Retry stopped by process class";
                stop        = true;
                return(false);
            }

            foreach (var processSubscriber in batchEngineSubscribers.GetProcessSubscribers().Where(s => s.ProcessKey == context.Configuration.ProcessKey))
            {
                Robustness.Instance.SafeCall(() => processSubscriber.OnProcessRetry(context),
                                             executionContext.Logger);
                if (context.StopFlag)
                {
                    processLogger.Warn($"Retry stopped by extension {processSubscriber.GetType()}");
                    stop        = true;
                    stopMessage = $"Retry stopped by extension {processSubscriber.GetType()}";

                    //state.MarkProcessStatus(CompletionStatus.Finished, ResultStatus.Error,
                    //    $"Retry stopped by extension {processSubscriber.GetType()}", stateManager, registeredProcesses, executionContext, batchEngineSubscribers, fLogger);

                    //_eventAggregator.Publish(this, Constants.EventProcessStop,
                    //    processId.ToString());

                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 2
0
        private void SubmitProcesses(List <IProcessState> groupProcesses, IGroupEntity groupEntity)
        {
            //groupProcesses.ForEach(p =>
            //{
            //    p.GroupId = groupEntity.Id; // todo
            //    p.Criteria = groupEntity.Criteria;
            //});


            //todo
            using (var trans = _stateManager.BeginTransaction())
            {
                foreach (var process in groupProcesses)
                {
                    _stateManager.Insert(process);
                }

                trans.Commit();
            }


            var subscribers = _batchEngineSubscribers.GetProcessSubscribers().ToList();

            if (subscribers.Count > 0)
            {
                groupProcesses.ForEach(p =>
                {
                    var processSubscribers = subscribers.Where(s => s.ProcessKey == p.ProcessKey).ToList();
                    if (processSubscribers.Count > 0)
                    {
                        ProcessSubmittedContext pContext = new ProcessSubmittedContext(p.Id, p.ProcessKey, groupEntity.IsResubmission, groupEntity.SubmittedBy, LoggerFactory.GetProcessLogger(p.Id, p.ProcessKey));
                        foreach (var subscriber in subscribers)
                        {
                            Robustness.Instance.SafeCall(() => subscriber.OnProcessSubmitted(pContext));
                        }
                    }
                });
            }
        }
Exemplo n.º 3
0
        static void TriggerProcessEvents(this IReadWritableProcessState state, IProcessRepository registeredProcesses, IProcessExecutionContext context,
                                         bool isFailed, bool isStopped, IBatchEngineSubscribers batchEngineSubscribers, IFrameworkLogger fLogger, string reason)
        {
            var process = registeredProcesses.GetRegisteredProcesses().FirstOrDefault(p => p.ProcessKey == context.Configuration.ProcessKey);
            //var context = _cacheAside.GetProcessExecutionContext(state.Id);
            //process?.InvokeProcessCompeteEvent(context, isFailed);

            var subscribers = batchEngineSubscribers.GetProcessSubscribers().Where(p => p.ProcessKey == context.Configuration.ProcessKey);
            //ProcessRetryContext ct =new ProcessRetryContext(context.ProcessState.Id, context.ProcessState.ProcessKey, context.Logger);
            ProcessCompleteContext ct = new ProcessCompleteContext(context.ProcessState.Id, context.ProcessState.ProcessId, false, false, context.Logger);

            //IProcessCompleteContext ctx=new proccom
            ProcessStoppedContext processStoppedContext = null;

            foreach (var subscriber in subscribers)
            {
                if (isFailed)
                {
                    Robustness.Instance.SafeCall(() =>
                                                 subscriber.ProcessFailed(ct)
                                                 , fLogger);
                }
                else if (isStopped)
                {
                    if (processStoppedContext == null)
                    {
                        processStoppedContext = new ProcessStoppedContext(state.Id, state.ProcessId, context.Configuration.ProcessKey, reason, context.Logger);
                    }

                    var stoppedContext = processStoppedContext;//access to modified closure
                    Robustness.Instance.SafeCall(() =>
                                                 subscriber.OnProcessStop(stoppedContext)
                                                 , fLogger);
                }
                else
                {
                    Robustness.Instance.SafeCall(() =>
                                                 subscriber.OnProcessComplete(ct)
                                                 , fLogger);
                }
            }

            if (isStopped)
            {
                Robustness.Instance.SafeCall(() =>
                {
                    if (processStoppedContext == null)
                    {
                        processStoppedContext = new ProcessStoppedContext(state.Id, state.ProcessId, context.Configuration.ProcessKey, reason, context.Logger);
                    }

                    process?.ProcessStopped(processStoppedContext);
                });
            }
            else if (isFailed)
            {
                Robustness.Instance.SafeCall(() =>
                {
                    process?.ProcessFailed(context);
                });
            }
            else
            {
                Robustness.Instance.SafeCall(() =>
                {
                    process?.ProcessCompleted(context);
                });
            }

            Robustness.Instance.SafeCall(() =>
            {
                process?.ProcessFinalizer(context);
            });
        }