public async Task <IActionResult> UpdateProcedureExecutionStatus([FromRoute] string procedureName, [FromRoute] string projectName, [FromRoute] string revisionNumber, [FromRoute] string status, [FromBody] JobStatusRequest jobStatus) { Project project = await ProjectDataService.GetAsync(TableStorageConfig.DomainString, projectName); if (project == null) { return(Unauthorized()); } Revision revision = await RevisionDataService.GetAsync(projectName, revisionNumber); if (revision == null) { revision = new Revision() { ProjectName = projectName, RevisionNumber = revisionNumber, Requestor = "", CommitSet = jobStatus.CommitSet, CommitPayload = JsonSerializer.Serialize(jobStatus.Commit), CreatedTime = DateTimeOffset.Now }; await RevisionDataService.InsertAsync(revision); } else { revision.CommitPayload = JsonSerializer.Serialize(jobStatus.Commit); await RevisionDataService.UpdateAsync(revision); } Procedure procedure = await ProcedureDataService.GetAsync(projectName, procedureName); if (procedure == null) { procedure = new Procedure(projectName, procedureName) { CreatedTime = DateTimeOffset.Now, LongName = procedureName }; await ProcedureDataService.InsertAsync(procedure); } // Update status ProcedureExecution procedureExecution = new ProcedureExecution(revisionNumber, jobStatus.JobId, procedureName, JsonSerializer.Serialize(jobStatus.CiConfiguration), status) { DownloadLink = jobStatus.DownloadLink, ConsoleLog = jobStatus.ConsoleLog, Machine = jobStatus.Machine }; await ProcedureExecutionDataService.InsertOrReplaceAsync(projectName, procedureExecution); return(Ok()); }
public static void onBehaviorStop(BehaviorExecution be) { ProceduralBehavior proceduralBehavior = (ProceduralBehavior)(((Agent)be.Host).getBehaviorExecutingByName("ProceduralBehavior")); proceduralBehavior.BehaviorToNode[be].CurrentExecution.Finish = BehaviorScheduler.Instance.getCurrentVirtualTime(); for (int iP = 0; iP < proceduralBehavior.RunningProcedures.Count; iP++) { ProcedureExecution procInfo = proceduralBehavior.runningProcedures[iP]; procInfo.informActionDone(((Agent)(proceduralBehavior.Host)).Aid, proceduralBehavior.BehaviorToNode[be]); proceduralBehavior.sendActionDoneMessage(proceduralBehavior.BehaviorToNode[be], procInfo); } //restart(); proceduralBehavior.ispause = false; }
public static bool agentIsPlaying(Agent agt) { List <ProceduralBehavior> proceduralBehaviors = GameObject.Find("MascaretApplication").GetComponent <UnityMascaretApplication>().ProcedureBehaviorExecution.ProceduralBehaviors; ProceduralBehavior proceduralBehavior = (ProceduralBehavior)agt.getBehaviorExecutingByName("ProceduralBehavior"); if (proceduralBehavior != null) { if (proceduralBehavior.runningProcedures.Count > 0) { ProcedureExecution procExec = proceduralBehavior.runningProcedures[proceduralBehavior.runningProcedures.Count - 1]; List <ActionNode> nodesToExecute = procExec.getActionToExecuteFor(agt.Aid); if (nodesToExecute.Count > 0) { return(true); } } } return(false); }
public static void executeOperation(ActionNode action, Agent agt) { PrintSingleton.Instance.log("Executing " + action.name + " by " + agt.name); ProceduralBehavior proceduralBehavior = (ProceduralBehavior)(agt.getBehaviorExecutingByName("ProceduralBehavior")); for (int iP = 0; iP < proceduralBehavior.runningProcedures.Count; iP++) { ProcedureExecution procInfo = proceduralBehavior.runningProcedures[iP]; action.start(agt, procInfo.getAffectations(), false); proceduralBehavior.sendActionRealisationMessage(action, procInfo); procInfo.informActionRunning(agt.Aid, action); if (action.CurrentExecution != null) { proceduralBehavior.BehaviorToNode.Add(action.CurrentExecution, action); action.CurrentExecution.addCallbackOnBehaviorStop(onBehaviorStop); } else { procInfo.informActionDone(agt.Aid, action); proceduralBehavior.sendActionDoneMessage(action, procInfo); } } }
public static ActionNode getNextNodeToExecute(Agent agt) { List <ProceduralBehavior> proceduralBehaviors = GameObject.Find("MascaretApplication").GetComponent <UnityMascaretApplication>().ProcedureBehaviorExecution.ProceduralBehaviors; PrintSingleton.Instance.log("Agent : " + agt.name); ProceduralBehavior proceduralBehavior = (ProceduralBehavior)agt.getBehaviorExecutingByName("ProceduralBehavior"); if (proceduralBehavior != null) { if (proceduralBehavior.runningProcedures.Count > 0) { PrintSingleton.Instance.log("Procedures : " + proceduralBehavior.runningProcedures.Count); ProcedureExecution procExec = proceduralBehavior.runningProcedures[proceduralBehavior.runningProcedures.Count - 1]; List <ActionNode> nodesToExecute = procExec.getActionToExecuteFor(agt.Aid); List <ActivityNode> activeNodes = new List <ActivityNode>(); foreach (ActivityExecutionToken t in procExec.getActiveToken()) { activeNodes.Add(t.currentLocation); } foreach (ActivityNode t in activeNodes) { List <ActionNode> outgoActions = t.getOutgoingActionNode(); foreach (ActionNode n in outgoActions) { if (!n.isRunning() && nodesToExecute.Contains(n)) { PrintSingleton.Instance.log("Action to execute : " + n.name); return(n); } } } } } return(null); }
public async Task <IActionResult> UpdateProcedureExecutionStatus([FromRoute] string procedureName, [FromRoute] string projectName, [FromRoute] string revisionNumber, [FromRoute] string status, [FromBody] JobStatusRequest jobStatus) { Project project = await ProjectDataService.GetAsync(TableStorageConfig.DomainString, projectName); if (project == null) { return(Unauthorized()); } var tasks = new List <Task>(); Revision revision = await RevisionDataService.GetAsync(projectName, revisionNumber); if (revision == null) { revision = new Revision() { ProjectName = projectName, RevisionNumber = revisionNumber, Requestor = "", CommitSet = jobStatus.CommitSet, CommitPayload = JsonSerializer.Serialize(jobStatus.Commit), CreatedTime = DateTimeOffset.Now }; tasks.Add(RevisionDataService.InsertAsync(revision)); } else { revision.CommitPayload = JsonSerializer.Serialize(jobStatus.Commit); tasks.Add(RevisionDataService.UpdateAsync(revision)); } Procedure procedure = await ProcedureDataService.GetAsync(projectName, procedureName); if (procedure == null) { procedure = new Procedure(projectName, procedureName) { CreatedTime = DateTimeOffset.Now, LongName = procedureName }; tasks.Add(ProcedureDataService.InsertAsync(procedure)); } // Update status ProcedureExecution procedureExecution = new ProcedureExecution(revisionNumber, jobStatus.JobId, procedureName, JsonSerializer.Serialize(jobStatus.CiConfiguration), status) { DownloadLink = jobStatus.DownloadLink, ConsoleLog = jobStatus.ConsoleLog, Machine = jobStatus.Machine }; tasks.Add(ProcedureExecutionDataService.InsertOrReplaceAsync(projectName, procedureExecution)); // Make sure all changes from database are done before trigger event to clients await Task.WhenAll(tasks).ContinueWith(async(antecedent) => { await BroadcastStatusHubContext.Clients.All.SendAsync(EventTable.GetEventMessage(EventTable.EventID.EventProcedureExecutionStatusChanged), projectName, revision, procedureExecution); }, TaskContinuationOptions.OnlyOnRanToCompletion); return(Ok()); }
public Task InsertOrReplaceAsync(string projectName, ProcedureExecution procedureExecution) { var tableStore = TableStorageHelper.GetProcedureExecutionTableStore(TableStorageConfig.ConnectionString, projectName); return(tableStore.InsertOrReplaceAsync(procedureExecution)); }
public Task InsertOrReplaceAsync(string projectName, ProcedureExecution procedureExecution) { procedureExecution.RevisionNumber = StandadizePartitionKey(projectName, procedureExecution.RevisionNumber); return(CosmosDbContainer.InsertOrReplaceAsync(procedureExecution.RevisionNumber, procedureExecution.JobId, procedureExecution)); }