private void buttonRunPlan_Click_1(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; try { string modelName = comboHeadlessRunModels.Text; string projectPath = textHeadlessProjectFile.Text; string extensionsPath = textExtensionsPath.Text; Logit($"Info: Running Model={modelName} Plan. ExtensionsPath={extensionsPath}"); if (!SimEngineHelpers.RunModelPlan(extensionsPath, projectPath, modelName, cbHeadlessRunRiskAnalysis.Checked, cbHeadlessSaveModelAfterRun.Checked, cbHeadlessRunPublishPlanAfterRun.Checked, out string explanation)) { Alert(explanation); } else { Alert(EnumLogFlags.Information, $"Success! \nProject={projectPath} Model={modelName} performed the actions successfully. Check the logs for more information."); } } catch (Exception ex) { Alert($"RunPlan: Err={ex.Message}"); throw; } finally { Cursor.Current = Cursors.Default; } }
private void buttonRunExperiment_Click(object sender, EventArgs e) { string experimentName = comboHeadlessExperiments.Text; string modelName = comboHeadlessRunModels.Text; string simioProjectPath = textHeadlessProjectFile.Text; string extensionsPath = textExtensionsPath.Text; Logit($"Info: Running Model={modelName}. Experiment={experimentName}. ExtensionsPath={extensionsPath}"); try { bool saveModelAfterRun = cbHeadlessSaveModelAfterRun.Checked; string saveProjectPath = ""; if (saveModelAfterRun) { saveProjectPath = simioProjectPath; } if (!SimEngineHelpers.RunModelExperiment(extensionsPath, simioProjectPath, saveProjectPath, modelName, experimentName, out string explanation)) { Alert(explanation); } else { Alert(EnumLogFlags.Information, $"Model={comboHeadlessRunModels.Text} Experiment={comboHeadlessExperiments.Text} performed the actions successfully. Check the logs for more information."); } } catch (Exception ex) { Alert($"Err={ex.Message}"); } finally { Cursor.Current = Cursors.Default; } }
////private bool LoadProject(string projectPath, out string explanation) ////{ //// explanation = ""; //// Cursor.Current = Cursors.WaitCursor; //// try //// { //// string extensionsPath = System.AppDomain.CurrentDomain.BaseDirectory; //// labelExtensionsPath.Text = extensionsPath; //// ISimioProject project = HeadlessHelpers.LoadProject(extensionsPath, projectPath, out explanation); //// if (project == null) //// { //// explanation = $"Cannot load project={projectPath}"; //// return false; //// } //// comboHeadlessRunModels.Items.Clear(); //// comboHeadlessRunModels.DisplayMember = "Name"; //// foreach ( var model in project.Models) //// { //// comboHeadlessRunModels.Items.Add(model); //// } //// IModel defaultModel = comboHeadlessRunModels.Items[1] as IModel; //// comboHeadlessExperiments.Items.Clear(); //// comboHeadlessExperiments.DisplayMember = "Name"; //// foreach ( var experiment in defaultModel.Experiments) //// { //// comboHeadlessExperiments.Items.Add(experiment); //// } //// return true; //// } //// catch (Exception ex) //// { //// explanation = $"Err={ex.Message}"; //// return false; //// } //// finally //// { //// Cursor.Current = Cursors.Default; //// } ////} private bool LoadProject(string extensionsPath, string projectPath, out string explanation) { explanation = ""; Cursor.Current = Cursors.WaitCursor; try { ISimioProject project = SimEngineHelpers.LoadProject(extensionsPath, projectPath, out explanation); if (project == null) { explanation = $"Cannot load project={projectPath}. Reason={explanation}"; return(false); } comboHeadlessRunModels.Items.Clear(); comboHeadlessRunModels.DisplayMember = "Name"; foreach (var model in project.Models) { comboHeadlessRunModels.Items.Add(model); } IModel defaultModel = comboHeadlessRunModels.Items[1] as IModel; comboHeadlessRunModels.Enabled = true; return(true); } catch (Exception ex) { explanation = $"Project={projectPath} Err={ex.Message}"; return(false); } finally { Cursor.Current = Cursors.Default; } }
static void Main(string[] args) { string marker = "Begin."; try { string explanation = ""; string requestsFolder = Properties.Settings.Default.RequestsPath; if (!Directory.Exists(requestsFolder)) { Logit($"Requests Storage folder={requestsFolder} does not exist."); Environment.Exit(1003); } Logit($"Info: The Request folder={requestsFolder} was found."); string extensionsPath = Properties.Settings.Default.ExtensionsPath; if (!Directory.Exists(extensionsPath)) { Logit($"ExtensionsPath for Simio processing={extensionsPath} does not exist."); Environment.Exit(1005); } Logit($"Info: The Extensions folder={extensionsPath} was found."); string projectsFolder = Properties.Settings.Default.ProjectsPath; if (!Directory.Exists(projectsFolder)) { Logit($"Projects Storage folder={projectsFolder} does not exist."); Environment.Exit(1007); } Logit($"Info: The Projects folder={requestsFolder} was found."); bool done = false; marker = $"Requests={requestsFolder}. ExtensionDLLs={extensionsPath} Projects={projectsFolder}"; Logit($"Info: marker"); string successFolder = Path.Combine(requestsFolder, "Success"); if (!Directory.Exists(successFolder)) { Directory.CreateDirectory(successFolder); Logit($"Info: The Success folder={successFolder} was created."); } string failureFolder = Path.Combine(requestsFolder, "Failure"); if (!Directory.Exists(failureFolder)) { Directory.CreateDirectory(failureFolder); Logit($"Info: The Failure folder={successFolder} was created."); } string runningFolder = Path.Combine(requestsFolder, "Running"); if (!Directory.Exists(runningFolder)) { Directory.CreateDirectory(runningFolder); Logit($"Info: The Running folder={runningFolder} was created."); } Logit($"Starting Loop."); while (!done) { // Requests are queued by time and ID. SimEngineRequest request = SimEngineRequestHelper.GetNextRequest(requestsFolder, out explanation); if (request != null) { // Now we have the request. Figure out what to do. Logit($"Processing request. Action={request.Action} Project={request.ProjectFilename}"); // Run the project string projectFullPath = Path.Combine(projectsFolder, request.ProjectFilename); if (!File.Exists(projectFullPath)) { // Move to failure explanation = $"No ProjectFile found at={projectFullPath}"; goto FinishUp; } // Move to "running" folder. string runningPath = Path.Combine(runningFolder, Path.GetFileName(request.RequestPath)); if (File.Exists(runningPath)) { File.Delete(runningPath); } File.Move(request.RequestPath, runningPath); switch (request.Action.ToUpper()) { case "PLAN": { // Run the project if (!SimEngineHelpers.RunProjectPlan(extensionsPath, projectFullPath, request.ActionArguments, out explanation)) { request.RunResults = $"Error with Request={request.ID} Project={request.ProjectFilename} Error={explanation}."; // Move to Failure } else { request.RunResults = $"Success with Request={request.ID} Project={request.ProjectFilename}"; // Move to Success } } break; case "EXPERIMENT": { if (!SimEngineHelpers.RunProjectExperiment(extensionsPath, projectFullPath, request.ActionArguments, out explanation)) { request.RunResults = $"Error with Request={request.ID} Project={request.ProjectFilename} Error={explanation}."; // Move to Failure } else { request.RunResults = $"Success with Request={request.ID} Project={request.ProjectFilename}"; // Move to Success } } break; // Alter congifiguration, such as location of project case "CONFIGURATION": { // Todo: Alter configurations at run-time } break; case "STATUS": { //Todo: Given the ID, return a status } break; default: Logit($"Unknown ProjectAction={request.Action}"); break; } // switch FinishUp: string source = request.RequestPath; string fn = Path.GetFileName(source); if (string.IsNullOrEmpty(explanation)) { File.Move(source, Path.Combine(successFolder, fn)); } else { File.Move(source, Path.Combine(failureFolder, fn)); } } else { Logit($"Error Getting Request File from={requestsFolder}. Err={explanation}"); } // Take a break System.Threading.Thread.Sleep(1000); } ; // while } catch (Exception ex) { Logit($"Marker={marker}. Failure={ex.Message}"); Environment.Exit(1013); } } // main
static void Main(string[] args) { // Open project string[] warnings; try { string extensionsPath = System.AppDomain.CurrentDomain.BaseDirectory; Logit($"Info: Starting. Default ExtensionsPath={extensionsPath}."); SimioProjectFactory.SetExtensionsPath(extensionsPath); Logit($"Info: ExtensionsPath Set successfully."); Logit("Read Command Line Settings"); if (args.Length == 0) { throw new Exception("Project Path And File Must Be Specified In First Command Argument"); } // set parameters string projectPathAndFile = args[0]; bool saveModelAfterRun = false; string modelName = "Model"; string experimentName = ""; if (!File.Exists(projectPathAndFile)) { throw new ApplicationException($"Cannot find SimioProject file at={projectPathAndFile}"); } if (args.Length >= 2) { saveModelAfterRun = Convert.ToBoolean(args[1]); } if (args.Length >= 3) { modelName = args[2]; } if (args.Length >= 4) { experimentName = args[3]; } // If File Not Exist, Throw Exeption if (File.Exists(projectPathAndFile) == false) { throw new Exception("Project Not Found : " + projectPathAndFile); } string projectFolder = Path.GetDirectoryName(projectPathAndFile); Logit($"Project Name={projectPathAndFile} Model={modelName} Experiment={experimentName} SaveAfterRun={saveModelAfterRun}"); // Test if experiment can be done. string simpleTestProjectFullpath = Path.Combine(projectFolder, "LicenseExperimentTest.spfx"); if (File.Exists(simpleTestProjectFullpath)) { Logit($"Info: Testing license with Project=[{simpleTestProjectFullpath}]"); try { Logit($"Info: Loading License Project=[{simpleTestProjectFullpath}]"); ISimioProject simioProject = SimioProjectFactory.LoadProject(simpleTestProjectFullpath, out warnings); if (!SimEngineHelpers.RunModelExperiment(simioProject, "", "Model", "Experiment1", out string explanation)) { } } catch (Exception ex) { throw new ApplicationException($"LicenseTest: Cannot Run Simple Experiment. Err={ex.Message}"); } } // Open project file. Logit($"Loading Project=[{projectPathAndFile}]"); _simioProject = SimioProjectFactory.LoadProject(projectPathAndFile, out warnings); // Run schedule and save for existing events. var model = _simioProject.Models[modelName]; if (model == null) { throw new ApplicationException($"Model={modelName} Not Found In Project={projectPathAndFile}"); } else { if (model.Experiments == null) { throw new ApplicationException($"Model's Experiments collection is null."); } // Start Experiment Logit("Starting Experiment"); string savePathAndFile = ""; if (saveModelAfterRun) { savePathAndFile = projectPathAndFile; } if (!SimEngineHelpers.RunModelExperiment(extensionsPath, projectPathAndFile, savePathAndFile, modelName, experimentName, out string explanation)) { throw new ApplicationException(explanation); } else { Logit($"Info: Model={modelName} Experiment={experimentName} performed the actions successfully. Check the logs for more information."); } if (saveModelAfterRun) { Logit("Save Project After Experiment Run"); SimioProjectFactory.SaveProject(_simioProject, projectPathAndFile, out warnings); } Logit("End"); Console.ReadLine(); } } catch (Exception ex) { Logit($"RunError={ex.Message}"); } }