コード例 #1
0
        private void RunTestBenchAndStart(CyPhySoT.TestBench testbench)
        {
            //this.OpenProject();

            // Updating with the active objects
            testbench.Project = this.Project;

            testbench.OriginalProjectFileName = sotConfig.OriginalProjectFileName;

            Exception interpreterError = null;

            try
            {
                // run interpreters
                testbench.Run();
            }
            catch (Exception e)
            {
                interpreterError = e;
            }

            //this.SaveAndCloseProject();

            // TODO: catch exceptions from interpreter
            string title = string.Format("{0}__{1}", currentObjectName, testbench.Name);

            Trace.TraceInformation("Job needs to be posted {0}", title);

            // Set up job properties
            JobImpl job = this.TestBenchJobMap[testbench];

            job.RunCommand       = testbench.RunCommand;
            job.WorkingDirectory = testbench.OutputDirectory;
            job.Title            = sotName;
            job.TestBenchName    = testbench.Name;

            // artifacts/labels
            job.Labels = testbench.Labels;

            if (string.IsNullOrWhiteSpace(job.Labels))
            {
                job.Labels = Job.DefaultLabels;
            }

            job.BuildQuery = testbench.BuildQuery;

            if (string.IsNullOrWhiteSpace(job.BuildQuery))
            {
                job.BuildQuery = Job.DefaultBuildQuery;
            }

            if (string.IsNullOrWhiteSpace(testbench.ResultsZip) == false)
            {
                job.ResultsZip = testbench.ResultsZip;
            }

            if (sotConfig.MultiJobRun)
            {
                CyPhySoT.TestBench tb = testbench.UpstreamTestBenches.FirstOrDefault();
                JobImpl            upstreamJob;
                if (tb != null && TestBenchJobMap.TryGetValue(tb, out upstreamJob) && upstreamJob.remoteInfo != null)
                {
                    job.GetURLOverride = upstreamJob.remoteInfo.ResultsGetURL;
                }
            }

            job.JobStatusChanged += JobStatusChanged;

            job.Status = Job.StatusEnum.WaitingForStart;
            this.Server.AddJob(job);

            if (interpreterError != null)
            {
                string failed_txt = Path.Combine(testbench.OutputDirectory, "_FAILED.txt");
                if (File.Exists(failed_txt) == false)
                {
                    File.WriteAllText(failed_txt, String.Format("Interpreter {0} failed: {1}", testbench.ProgId, interpreterError.ToString()));
                }
                job.Status = Job.StatusEnum.Failed;
            }
            else
            {
                if (this.JobAction != null)
                {
                    this.JobAction(job);
                }

                job.Start();
            }
        }
コード例 #2
0
ファイル: SoTImpl.cs プロジェクト: neemask/meta-core
        private List<CyPhySoT.TestBench> GetMultiJobRunTestBenches(MgaFCO CurrentObj, string OutputDirectory)
        {
            var TestBenches = new List<CyPhySoT.TestBench>();
            var testbench1 = new CyPhySoT.TestBench();
            var workflowRef = CurrentObj
                .ChildObjects
                .OfType<MgaReference>()
                .FirstOrDefault(x => x.Meta.Name == "WorkflowRef");
            string parameters = "{}";
            MgaAtom task;
            if (workflowRef != null)
            {
                task = workflowRef
                    .Referred
                    .ChildObjects
                    .OfType<MgaAtom>()
                    .FirstOrDefault(x => x.Meta.Name == "Task");
                parameters = task.StrAttrByName["Parameters"];
                testbench1.ProgId = task.StrAttrByName["COMName"];
            }
            else
            {
                testbench1.ProgId = "MGA.Interpreter.CyPhy2CAD_CSharp";
            }

            testbench1.WorkflowParametersDict = new Dictionary<string, string>();
            if (string.IsNullOrWhiteSpace(parameters) == false)
            {
                try
                {
                    testbench1.WorkflowParametersDict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(parameters);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    Trace.TraceWarning(ex.ToString());
                }
            }

            testbench1.OutputDirectory = OutputDirectory;
            if (Directory.Exists(testbench1.OutputDirectory) == false)
            {
                Directory.CreateDirectory(testbench1.OutputDirectory);
            }
            testbench1.Project = CurrentObj.Project;
            testbench1.CurrentObj = CurrentObj;
            testbench1.ParamInvoke = 0;

            testbench1.Name = CurrentObj.Name;

            TestBenches.Add(testbench1);

            var testbench2 = testbench1.MemberwiseClone();
            testbench2.UpstreamTestBenches = new List<CyPhySoT.TestBench>();
            testbench2.DownstreamTestBenches = new List<CyPhySoT.TestBench>();
            testbench2.UpstreamTestBenches.Add(testbench1);
            testbench1.DownstreamTestBenches.Add(testbench2);
            TestBenches.Add(testbench2);
            testbench2.ProgId = "MGA.Interpreter.CyPhyPython";

            var metaToPyScript = new Dictionary<string, string>()
                    {
                        {"CFDTestBench", "runOpenFoam.py"},
                        {"BlastTestBench", "runLSDyna.py"},
                        {"BallisticTestBench", "runCTH.py"},
                    };

            testbench2.WorkflowParametersDict = new Dictionary<string, string>()
                    {
                        {"script_file", metaToPyScript[CurrentObj.Meta.Name]}
                    };
            return TestBenches;
        }
コード例 #3
0
        private List <CyPhySoT.TestBench> GetMultiJobRunTestBenches(MgaFCO CurrentObj, string OutputDirectory)
        {
            var TestBenches = new List <CyPhySoT.TestBench>();
            var testbench1  = new CyPhySoT.TestBench();
            var workflowRef = CurrentObj
                              .ChildObjects
                              .OfType <MgaReference>()
                              .FirstOrDefault(x => x.Meta.Name == "WorkflowRef");
            string  parameters = "{}";
            MgaAtom task;

            if (workflowRef != null)
            {
                task = workflowRef
                       .Referred
                       .ChildObjects
                       .OfType <MgaAtom>()
                       .FirstOrDefault(x => x.Meta.Name == "Task");
                parameters        = task.StrAttrByName["Parameters"];
                testbench1.ProgId = task.StrAttrByName["COMName"];
            }
            else
            {
                testbench1.ProgId = "MGA.Interpreter.CyPhy2CAD_CSharp";
            }

            testbench1.WorkflowParametersDict = new Dictionary <string, string>();
            if (string.IsNullOrWhiteSpace(parameters) == false)
            {
                try
                {
                    testbench1.WorkflowParametersDict = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, string> >(parameters);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    Trace.TraceWarning(ex.ToString());
                }
            }

            testbench1.OutputDirectory = OutputDirectory;
            if (Directory.Exists(testbench1.OutputDirectory) == false)
            {
                Directory.CreateDirectory(testbench1.OutputDirectory);
            }
            testbench1.Project     = CurrentObj.Project;
            testbench1.CurrentObj  = CurrentObj;
            testbench1.ParamInvoke = 0;

            testbench1.Name = CurrentObj.Name;

            TestBenches.Add(testbench1);

            var testbench2 = testbench1.MemberwiseClone();

            testbench2.UpstreamTestBenches   = new List <CyPhySoT.TestBench>();
            testbench2.DownstreamTestBenches = new List <CyPhySoT.TestBench>();
            testbench2.UpstreamTestBenches.Add(testbench1);
            testbench1.DownstreamTestBenches.Add(testbench2);
            TestBenches.Add(testbench2);
            testbench2.ProgId = "MGA.Interpreter.CyPhyPython";

            var metaToPyScript = new Dictionary <string, string>()
            {
                { "CFDTestBench", "runOpenFoam.py" },
                { "BlastTestBench", "runLSDyna.py" },
                { "BallisticTestBench", "runCTH.py" },
            };

            testbench2.WorkflowParametersDict = new Dictionary <string, string>()
            {
                { "script_file", metaToPyScript[CurrentObj.Meta.Name] }
            };
            return(TestBenches);
        }