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(); } }
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; }
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); }