public ActionResult RunAlgorithms([FromBody] ProjectAlgoListEntity data) { string userName = _accessor.HttpContext.User.Identity.Name; _algoExecutionService.Run(data, userName); return(Ok()); }
public void Run(ProjectAlgoListEntity projectAlg, string executedBy) { if (projectAlg == null || (projectAlg.ProjectId == 0 && projectAlg.Algos.Count == 0)) { return; } List <ExecutionInfoEntity> algoExecs = new List <ExecutionInfoEntity>(); ExecutionInfoEntity firstAlgoExe; algoExecs = ProjectsRepository.SetAlgoExecutions(projectAlg, executedBy); firstAlgoExe = algoExecs.First(); string resultPath = Path.Combine(ExecutionPath, string.Format("{0}_{1}", firstAlgoExe.ProjectId, firstAlgoExe.Id)); Directory.CreateDirectory(resultPath); string backgroundJobID = BackgroundJob.Enqueue(() => StartExecution(firstAlgoExe, executedBy, resultPath, firstAlgoExe.Id)); if (algoExecs.Count > 1) { for (int i = 1; i < algoExecs.Count; i++) { backgroundJobID = BackgroundJob.ContinueWith(backgroundJobID, () => StartExecution(algoExecs[i], executedBy, resultPath, firstAlgoExe.Id)); } BackgroundJob.ContinueWith(backgroundJobID, () => FinishProjectExecution(executedBy, firstAlgoExe)); } }
internal List <ExecutionInfoEntity> SetAlgoExecutions(ProjectAlgoListEntity projectAlg, string executerName) { List <ExecutionInfoEntity> exeInfoList = new List <ExecutionInfoEntity>(); Random rand = new Random(); int projectID = 0; string projectName = string.Empty; if (projectAlg.ProjectId > 0) { projectID = projectAlg.ProjectId; projectName = _dbContext.Projects.First(x => x.Id == projectAlg.ProjectId).Name; } foreach (var algo in projectAlg.Algos) { var exe = new ExecutionInfoEntity { Id = rand.Next(), AlgoName = algo.Name, ProjectId = projectID, ProjectName = projectName, StartDate = DateTime.Now, ExecutedBy = executerName, FileExePath = algo.FileServerPath, AlgoId = algo.Id, ExeParams = algo.AlgoParams.Select(x => new AlgoExecutionParamEntity { Name = x.Name, Value = x.Value }).ToList() }; exeInfoList.Add(exe); //AddNewAlg to db _dbContext.ExecutionInfos.Add(_mapper.Map <ExecutionInfo>(exe)); } return(exeInfoList); }