public async Task<bool> TryRunModule(RunModuleDto module, string serverIp) { var username = Thread.CurrentPrincipal.Identity.Name; var userArg = string.IsNullOrEmpty(username) ? "" : $" --user {username}"; var commandLineParams = $@"{module.CommandLineParameters} --serverip {serverIp} --priority {module.Priority}{userArg}"; var processStartInfo = new ProcessStartInfo(_moduleService.GetModuleFilePath(module.Name), commandLineParams) { UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true }; var process = new Process { StartInfo = processStartInfo }; bool isError = false; process.OutputDataReceived += (sender, args) => OutputReceived(args.Data, ref isError); process.ErrorDataReceived += (sender, args) => Error(args.Data, out isError); process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); await _semaphore.WaitAsync(); return !isError; }
public async Task<IHttpActionResult> RunModule(RunModuleDto moduleDto) { if (string.IsNullOrEmpty(moduleDto.Name)) { throw new ArgumentException("Value cannot be null or empty", nameof(moduleDto.Name)); } var serverIp = await _parcsService.GetServerIp(); bool isRunSuccessfully = await _moduleRunner.TryRunModule(moduleDto, serverIp); if (!isRunSuccessfully) { throw new InvalidOperationException("Module didn't start successfully"); } return Ok(); }