Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        ////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;
            }
        }
Ejemplo n.º 4
0
        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
Ejemplo n.º 5
0
        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}");
            }
        }