Exemple #1
0
        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());
        }
Exemple #2
0
    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;
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    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);
            }
        }
    }
Exemple #5
0
    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);
    }
Exemple #6
0
        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));
 }