/// <summary> /// Custom constructor using a status, a code, a name and an abandon flag. /// </summary> /// <param name="status">The FlowExecutionStatus to end with</param> /// <param name="code"></param> /// <param name="name">The name of the state</param> /// <param name="abandon">flag to indicate that previous step execution can be marked as abandoned (if there is one)</param> public EndState(FlowExecutionStatus status, string code, string name, bool abandon) : this(name) { Status = status; Code = code; Abandon = abandon; }
public void FlowExecutionStatusTest() { FlowExecutionStatus status1 = FlowExecutionStatus.Completed; Assert.IsNotNull(status1); FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED"); Assert.IsNotNull(status2); Assert.AreEqual(status1,status2); }
public void ToStringTest() { FlowExecutionStatus status = new FlowExecutionStatus("Completed"); Assert.AreEqual("Completed", status.ToString()); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; Assert.AreEqual("COMPLETED", status2.ToString()); }
public void EqualsTest() { FlowExecutionStatus status1 = FlowExecutionStatus.Completed; Assert.IsNotNull(status1); FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED"); Assert.IsNotNull(status2); Assert.IsTrue(status1.Equals(status2)); }
public void FlowExecutionStatusTest() { FlowExecutionStatus status1 = FlowExecutionStatus.Completed; Assert.IsNotNull(status1); FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED"); Assert.IsNotNull(status2); Assert.AreEqual(status1, status2); }
public void CompareToTest() { FlowExecutionStatus status = new FlowExecutionStatus("COMPLETED"); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; FlowExecutionStatus status3 = new FlowExecutionStatus("COMPLETEDBYFORCE"); Assert.AreEqual(0, status.CompareTo(status2)); Assert.AreNotEqual(0, status2.CompareTo(status3)); Assert.AreEqual(string.Compare("COMPLETED", "COMPLETEDBYFORCE", StringComparison.Ordinal), status2.CompareTo(status3)); }
public void IsStopTest() { FlowExecutionStatus status = FlowExecutionStatus.Stopped; Assert.IsTrue(status.IsStop()); FlowExecutionStatus status5 = new FlowExecutionStatus("STOPPEDBYBUS"); Assert.IsTrue(status5.IsStop()); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; Assert.IsFalse(status2.IsStop()); FlowExecutionStatus status3 = FlowExecutionStatus.Failed; Assert.IsFalse(status3.IsStop()); FlowExecutionStatus status4= FlowExecutionStatus.Unkown; Assert.IsFalse(status4.IsStop()); }
public void IsFailTest() { FlowExecutionStatus status = FlowExecutionStatus.Stopped; Assert.IsFalse(status.IsFail()); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; Assert.IsFalse(status2.IsFail()); FlowExecutionStatus status3 = FlowExecutionStatus.Failed; Assert.IsTrue(status3.IsFail()); FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE"); Assert.IsTrue(status5.IsFail()); FlowExecutionStatus status4 = FlowExecutionStatus.Unkown; Assert.IsFalse(status4.IsFail()); }
/// <summary> /// @see IFlow#Resume . /// </summary> /// <param name="stateName"></param> /// <param name="executor"></param> /// <returns></returns> /// <exception cref="FlowExecutionException"> </exception> public FlowExecution Resume(string stateName, IFlowExecutor executor) { FlowExecutionStatus status = FlowExecutionStatus.Unkown; IState state; _stateMap.TryGetValue(stateName, out state); if (Logger.IsDebugEnabled) { Logger.Debug("Resuming state={0} with status={1}", stateName, status); } StepExecution stepExecution = null; String currentStateName = stateName; // Terminate if there are no more states while (IsFlowContinued(state, status, stepExecution)) { currentStateName = state.GetName(); try { if (Logger.IsDebugEnabled) { Logger.Debug("Handling state={0}", currentStateName); } status = state.Handle(executor); stepExecution = executor.GetStepExecution(); } catch (FlowExecutionException) { executor.Close(new FlowExecution(currentStateName, status)); throw; } catch (Exception e) { executor.Close(new FlowExecution(currentStateName, status)); throw new FlowExecutionException( string.Format("Ended flow={0} at state={1} with exception", Name, currentStateName), e); } if (Logger.IsDebugEnabled) { Logger.Debug("Completed state={0} with status={1}", currentStateName, status); } state = NextState(currentStateName, status, stepExecution); } FlowExecution result = new FlowExecution(currentStateName, status); executor.Close(result); return(result); }
/// <summary> /// Tests if flow is continued. /// </summary> /// <param name="state"></param> /// <param name="status"></param> /// <param name="stepExecution"></param> /// <returns></returns> protected bool IsFlowContinued(IState state, FlowExecutionStatus status, StepExecution stepExecution) { var continued = state != null && !status.Equals(FlowExecutionStatus.Stopped); if (stepExecution != null) { bool?reRun = (bool?)stepExecution.ExecutionContext.Get("batch.restart"); bool?executed = (bool?)stepExecution.ExecutionContext.Get("batch.executed"); if ((executed == null || !executed.Value) && reRun != null && reRun.Value && status.Equals(FlowExecutionStatus.Stopped) && !state.GetName().EndsWith(stepExecution.StepName)) { continued = true; } } return(continued); }
/// <summary> /// Returns the next <see cref="IStep"/> (or null if this is the end). /// </summary> /// <param name="stateName"></param> /// <param name="status"></param> /// <param name="stepExecution"></param> /// <returns></returns> /// <exception cref="FlowExecutionException"> </exception> protected IState NextState(string stateName, FlowExecutionStatus status, StepExecution stepExecution) { ICollection <StateTransition> set; _transitionMap.TryGetValue(stateName, out set); if (set == null) { throw new FlowExecutionException( string.Format("No transitions found in flow={0} for state={1}", GetName(), stateName)); } string next = null; string exitCode = status.Name; foreach (StateTransition stateTransition in set) { if (stateTransition.Matches(exitCode) || (exitCode.Equals("PENDING") && stateTransition.Matches("STOPPED"))) { if (stateTransition.IsEnd()) { // End of job return(null); } next = stateTransition.Next; break; } } if (next == null) { throw new FlowExecutionException( string.Format("Next state not found in flow={0} for state={1} with exit status={2}", GetName(), stateName, status.Name)); } if (!_stateMap.ContainsKey(next)) { throw new FlowExecutionException( string.Format("Next state not specified in flow={0} for next={1}", GetName(), next)); } //Getting here ensures the _stateMap contains the next Key (protected by the prior throw) return(_stateMap[next]); }
public void IsEndTest() { FlowExecutionStatus status = FlowExecutionStatus.Stopped; Assert.IsTrue(status.IsEnd()); FlowExecutionStatus status6 = new FlowExecutionStatus("STOPPEDBYBUS"); Assert.IsTrue(status6.IsEnd()); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; Assert.IsTrue(status2.IsEnd()); FlowExecutionStatus status7 = new FlowExecutionStatus("COMPLETEDONSCHEDULE"); Assert.IsTrue(status7.IsEnd()); FlowExecutionStatus status3 = FlowExecutionStatus.Failed; Assert.IsTrue(status3.IsEnd()); FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE"); Assert.IsTrue(status5.IsEnd()); FlowExecutionStatus status4 = FlowExecutionStatus.Unkown; Assert.IsFalse(status4.IsEnd()); }
public void IsStopTest() { FlowExecutionStatus status = FlowExecutionStatus.Stopped; Assert.IsTrue(status.IsStop()); FlowExecutionStatus status5 = new FlowExecutionStatus("STOPPEDBYBUS"); Assert.IsTrue(status5.IsStop()); FlowExecutionStatus status2 = FlowExecutionStatus.Completed; Assert.IsFalse(status2.IsStop()); FlowExecutionStatus status3 = FlowExecutionStatus.Failed; Assert.IsFalse(status3.IsStop()); FlowExecutionStatus status4 = FlowExecutionStatus.Unkown; Assert.IsFalse(status4.IsStop()); }
/// <summary> /// Retrieves batch status. /// </summary> /// <param name="status"></param> /// <returns></returns> protected BatchStatus FindBatchStatus(FlowExecutionStatus status) { foreach (BatchStatus batchStatus in BatchStatus.Values) { if (status.Name.StartsWith(batchStatus.ToString())) { return batchStatus; } } return BatchStatus.Unknown; }
/// <summary> /// @see IFlowExecutor#UpdateJobExecutionStatus . /// </summary> /// <param name="status"></param> public void UpdateJobExecutionStatus(FlowExecutionStatus status) { _execution.Status = FindBatchStatus(status); ExitStatus = ExitStatus.And(new ExitStatus(status.Name)); _execution.ExitStatus = ExitStatus; }
public void GetHashCodeTest() { FlowExecutionStatus status = new FlowExecutionStatus("Completed"); Assert.AreEqual(status.Name.GetHashCode(), status.GetHashCode()); }
/// <summary> /// Tests if flow is continued. /// </summary> /// <param name="state"></param> /// <param name="status"></param> /// <param name="stepExecution"></param> /// <returns></returns> protected bool IsFlowContinued(IState state, FlowExecutionStatus status, StepExecution stepExecution) { var continued = state != null && !status.Equals(FlowExecutionStatus.Stopped); if (stepExecution != null) { bool? reRun = (bool?)stepExecution.ExecutionContext.Get("batch.restart"); bool? executed = (bool?)stepExecution.ExecutionContext.Get("batch.executed"); if ((executed == null || !executed.Value) && reRun != null && reRun.Value && status.Equals(FlowExecutionStatus.Stopped) && !state.GetName().EndsWith(stepExecution.StepName)) { continued = true; } } return continued; }
/// <summary> /// Initializes a new instance of the <see cref="FlowExecutionProgress" /> class. /// </summary> /// <param name="Id">Id.</param> /// <param name="Percentage">Percentage.</param> /// <param name="CurrentData">CurrentData.</param> /// <param name="Message">Message.</param> /// <param name="Status">Status.</param> /// <param name="Schema">Schema.</param> /// <param name="Model">Model.</param> /// <param name="Form">Form.</param> public FlowExecutionProgress(string Id = default(string), int?Percentage = default(int?), IdWithName CurrentData = default(IdWithName), string Message = default(string), FlowExecutionStatus Status = default(FlowExecutionStatus), Object Schema = default(Object), Object Model = default(Object), List <Object> Form = default(List <Object>)) { this.Id = Id; this.Percentage = Percentage; this.CurrentData = CurrentData; this.Message = Message; this.Status = Status; this.Schema = Schema; this.Model = Model; this.Form = Form; }
/// <summary> /// Custom constructor using a status, a code and a name. /// </summary> /// <param name="status">The FlowExecutionStatus to end with</param> /// <param name="code"></param> /// <param name="name">The name of the state</param> public EndState(FlowExecutionStatus status, string code, string name) : this(status, code, name, false) { }
/// <summary> /// Custom constructor using a status and a name. /// </summary> /// <param name="status">The FlowExecutionStatus to end with</param> /// <param name="name">The name of the state</param> public EndState(FlowExecutionStatus status, string name) : this(status, status.Name, name) { }
/// <summary> /// Initializes a new instance of the <see cref="FlowExecution" /> class. /// </summary> /// <param name="Id">Id.</param> /// <param name="CreatedAt">CreatedAt.</param> /// <param name="CreatedBy">CreatedBy.</param> /// <param name="ModifiedAt">ModifiedAt.</param> /// <param name="ModifiedBy">ModifiedBy.</param> /// <param name="Status">Status.</param> /// <param name="Flow">Flow.</param> /// <param name="State">State.</param> public FlowExecution(string Id = default(string), string CreatedAt = default(string), IdWithName CreatedBy = default(IdWithName), string ModifiedAt = default(string), IdWithName ModifiedBy = default(IdWithName), FlowExecutionStatus Status = default(FlowExecutionStatus), IdWithName Flow = default(IdWithName), FlowExecutionState State = default(FlowExecutionState)) { this.Id = Id; this.CreatedAt = CreatedAt; this.CreatedBy = CreatedBy; this.ModifiedAt = ModifiedAt; this.ModifiedBy = ModifiedBy; this.Status = Status; this.Flow = Flow; this.State = State; }
/// <summary> /// Returns the next <see cref="IStep"/> (or null if this is the end). /// </summary> /// <param name="stateName"></param> /// <param name="status"></param> /// <param name="stepExecution"></param> /// <returns></returns> /// <exception cref="FlowExecutionException"></exception> protected IState NextState(string stateName, FlowExecutionStatus status, StepExecution stepExecution) { ICollection<StateTransition> set; _transitionMap.TryGetValue(stateName, out set); if (set == null) { throw new FlowExecutionException( string.Format("No transitions found in flow={0} for state={1}", GetName(), stateName)); } string next = null; string exitCode = status.Name; foreach (StateTransition stateTransition in set) { if (stateTransition.Matches(exitCode) || (exitCode.Equals("PENDING") && stateTransition.Matches("STOPPED"))) { if (stateTransition.IsEnd()) { // End of job return null; } next = stateTransition.Next; break; } } if (next == null) { throw new FlowExecutionException( string.Format("Next state not found in flow={0} for state={1} with exit status={2}", GetName(), stateName, status.Name)); } if (!_stateMap.ContainsKey(next)) { throw new FlowExecutionException( string.Format("Next state not specified in flow={0} for next={1}", GetName(), next)); } //Getting here ensures the _stateMap contains the next Key (protected by the prior throw) return _stateMap[next]; }
/// <summary> /// Initializes a new instance of the <see cref="StatisticsPerStatus" /> class. /// </summary> /// <param name="Status">Status.</param> /// <param name="Count">Count.</param> public StatisticsPerStatus(FlowExecutionStatus Status = default(FlowExecutionStatus), int?Count = default(int?)) { this.Status = Status; this.Count = Count; }
/// <summary> /// Initializes a new instance of the <see cref="FlowExecution" /> class. /// </summary> /// <param name="Id">Id.</param> /// <param name="CreatedAt">CreatedAt.</param> /// <param name="CreatedBy">CreatedBy.</param> /// <param name="CreatedFor">CreatedFor.</param> /// <param name="ModifiedAt">ModifiedAt.</param> /// <param name="ModifiedBy">ModifiedBy.</param> /// <param name="Priority">Priority.</param> /// <param name="Status">Status.</param> /// <param name="Flow">Flow.</param> /// <param name="State">State.</param> /// <param name="Mode">Mode.</param> /// <param name="Outputs">Outputs.</param> public FlowExecution(string Id = default(string), string CreatedAt = default(string), IdWithName CreatedBy = default(IdWithName), IdWithName CreatedFor = default(IdWithName), string ModifiedAt = default(string), IdWithName ModifiedBy = default(IdWithName), int?Priority = default(int?), FlowExecutionStatus Status = default(FlowExecutionStatus), IdWithName Flow = default(IdWithName), FlowExecutionState State = default(FlowExecutionState), ModeEnum?Mode = default(ModeEnum?), List <FlowExecutionOutput> Outputs = default(List <FlowExecutionOutput>)) { this.Id = Id; this.CreatedAt = CreatedAt; this.CreatedBy = CreatedBy; this.CreatedFor = CreatedFor; this.ModifiedAt = ModifiedAt; this.ModifiedBy = ModifiedBy; this.Priority = Priority; this.Status = Status; this.Flow = Flow; this.State = State; this.Mode = Mode; this.Outputs = Outputs; }