Esempio n. 1
0
        public async Task RunBatch(dynamic parameters)
        {
            string           inputFolder      = parameters.inputFolder;
            string           outputFolder     = parameters.outputFolder;
            string           logFileFullPath  = parameters.logFileFullPath;
            BatchExportMode  exportMode       = parameters.exportMode;
            NotificationType notificationType = parameters.notificationType;

            clear();

            using (new BatchLoggerDisposer(_logger, logFileFullPath, notificationType))
            {
                _logger.AddInSeparator($"Starting batch run: {DateTime.Now.ToIsoFormat()}", NotificationType.Info);

                var inputDirectory = new DirectoryInfo(inputFolder);
                if (!inputDirectory.Exists)
                {
                    throw new ArgumentException($"Input folder '{inputFolder}' does not exist");
                }

                var allSimulationFiles = inputDirectory.GetFiles(CoreConstants.Filter.JSON_FILTER);
                if (allSimulationFiles.Length == 0)
                {
                    throw new ArgumentException($"No simulation json file found in '{inputFolder}'");
                }

                var outputDirectory = new DirectoryInfo(outputFolder);
                if (!outputDirectory.Exists)
                {
                    _logger.AddDebug($"Creating folder '{outputFolder}'");
                    outputDirectory.Create();
                }

                var allExistingFiles = outputDirectory.GetFiles("*.csv");
                allExistingFiles.Each(outputFile =>
                {
                    FileHelper.DeleteFile(outputFile.FullName);
                    _logger.AddDebug($"Deleting file '{outputFile.FullName}'");
                });

                var begin = DateTime.UtcNow;
                _logger.AddInfo($"Found {allSimulationFiles.Length} files in '{inputFolder}'");

                foreach (var simulationFile in allSimulationFiles)
                {
                    await exportSimulationTo(simulationFile, outputFolder, exportMode);
                }

                var end       = DateTime.UtcNow;
                var timeSpent = end - begin;
                _logger.AddInSeparator($"{_allSimulationNames.Count} simulations calculated and exported in '{timeSpent.ToDisplay()}'", NotificationType.Info);

                createSummaryFilesIn(outputDirectory);

                _logger.AddInSeparator($"Batch run finished: {DateTime.Now.ToIsoFormat()}", NotificationType.Info);
            }
        }
Esempio n. 2
0
        private Task exportResults(IndividualSimulation simulation, string outputFolder, string exportFileName, BatchExportMode batchExportMode)
        {
            var tasks = new List <Task>();

            if (batchExportMode.HasFlag(BatchExportMode.Csv))
            {
                tasks.Add(exportResultsToCsv(simulation, outputFolder, exportFileName));
            }

            if (batchExportMode.HasFlag(BatchExportMode.Json))
            {
                tasks.Add(exportResultsToJson(simulation, outputFolder, exportFileName));
            }

            if (batchExportMode.HasFlag(BatchExportMode.Xml))
            {
                tasks.Add(exportSimModelXmlAsync(simulation, outputFolder, exportFileName));
            }

            return(Task.WhenAll(tasks));
        }
Esempio n. 3
0
        public async Task RunAndExport(IndividualSimulation simulation, string outputFolder, string exportFileName, SimulationConfiguration simulationConfiguration, BatchExportMode batchExportMode)
        {
            _logger.AddDebug($"------> Running simulation '{exportFileName}'");
            var engine = _simulationEngineFactory.Create <IndividualSimulation>();
            await engine.RunForBatch(simulation, simulationConfiguration.CheckForNegativeValues);

            await exportResults(simulation, outputFolder, exportFileName, batchExportMode);
        }
Esempio n. 4
0
        private async Task exportSimulationTo(FileInfo simulationFile, string outputFolder, BatchExportMode batchExportMode)
        {
            _logger.AddInSeparator($"Starting batch simulation for file '{simulationFile}'");
            try
            {
                var simForBatch = _simulationLoader.LoadSimulationFrom(simulationFile.FullName);
                var simText     = simForBatch.NumberOfSimulations > 1 ? "simulations" : "simulation";
                _logger.AddInfo($"{simForBatch.NumberOfSimulations} {simText} found in file '{simulationFile}'");

                var simulation = simForBatch.Simulation;

                var defaultSimulationName = FileHelper.FileNameFromFileFullPath(simulationFile.FullName);
                var allParameters         = _entitiesInContainerRetriever.ParametersFrom(simulation);
                await _simulationExporter.RunAndExport(simulation, outputFolder, defaultSimulationName, simForBatch.Configuration, batchExportMode);

                _allSimulationNames.Add(defaultSimulationName);
                foreach (var parameterValueSet in simForBatch.ParameterVariationSets)
                {
                    string currentName = $"{defaultSimulationName}_{parameterValueSet.Name}";
                    var    command     = updateParameters(allParameters, parameterValueSet);
                    await _simulationExporter.RunAndExport(simulation, outputFolder, currentName, simForBatch.Configuration, batchExportMode);

                    _allSimulationNames.Add(currentName);
                    _commandTask.ResetChanges(command, _executionContext);
                }

                //when simulation is not used anymore, unregister simulation
                _executionContext.Unregister(simulation);
            }
            catch (Exception e)
            {
                _logger.AddError($"{e.FullMessage()}\n{e.FullStackTrace()}");
            }
        }