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