private IActionResult DeleteSession(Guid folderSessionGuid, bool fullDelete = false) { if (folderSessionGuid == Guid.Empty) { return(Problem("Empty GUID is invalid.")); } _logger.LogInformation("Enter DeleteSession."); String containerLocation = String.Empty; if (fullDelete) { var tarArchive = Directory.GetFiles(_settings.DataFolderName, "*.*").Select(i => new FileInfo(i)).Where(s => s.Extension.EndsWith(".tar") || s.Extension.EndsWith(".gz")).Select(item => new { CollectionName = item.Name, SessionFolderId = ChecksumHelper.GeneratePreingestGuid(item.Name), CollectionFullName = item.FullName }).Where(item => item.SessionFolderId == folderSessionGuid).FirstOrDefault(); if (tarArchive == null) { return(Problem(String.Format("Container not found with GUID {0}", folderSessionGuid))); } containerLocation = tarArchive.CollectionFullName; } try { using (var context = new PreIngestStatusContext()) { var sessions = context.PreingestActionCollection.Where(item => item.FolderSessionId == folderSessionGuid).ToList(); var statusesIds = sessions.Select(item => item.ProcessId).ToArray(); var statusus = context.ActionStateCollection.Where(item => statusesIds.Contains(item.ProcessId)).ToList(); var messagesIds = statusus.Select(item => item.StatusId).ToArray(); var messages = context.ActionStateMessageCollection.Where(item => messagesIds.Contains(item.StatusId)).ToList(); var scheduledPlan = context.ExecutionPlanCollection.Where(item => item.SessionId == folderSessionGuid).ToArray(); //remove any exeception messages context.ActionStateMessageCollection.RemoveRange(messages); //remove (actions) statusus context.ActionStateCollection.RemoveRange(statusus); //remove (folder session) actions context.PreingestActionCollection.RemoveRange(sessions); //remove plan context.ExecutionPlanCollection.RemoveRange(scheduledPlan); context.SavedChanges += (object sender, Microsoft.EntityFrameworkCore.SavedChangesEventArgs e) => { try { DirectoryInfo di = new DirectoryInfo(Path.Combine(_settings.DataFolderName, folderSessionGuid.ToString())); if (di.Exists) { di.Delete(true); } } finally { } if (fullDelete) { try { if (System.IO.File.Exists(containerLocation)) { System.IO.File.Delete(containerLocation); } } finally { } } }; context.SaveChanges(); } } catch (Exception e) { _logger.LogError(e, "An exception was thrown : {0}, '{1}'.", e.Message, e.StackTrace); return(ValidationProblem(String.Format("An exception was thrown : {0}, '{1}'.", e.Message, e.StackTrace))); } finally { } _logger.LogInformation("Exit DeleteSession."); return(Ok()); }
public dynamic GetCollections() { var directory = new DirectoryInfo(_settings.DataFolderName); if (!directory.Exists) { throw new DirectoryNotFoundException(String.Format("Data folder '{0}' not found!", _settings.DataFolderName)); } dynamic dataResults = null; var tarArchives = directory.GetFiles("*.*").Where(s => s.Extension.EndsWith(".tar") || s.Extension.EndsWith(".gz")); tarArchives.ToList().ForEach(item => { var workingDir = Path.Combine(directory.FullName, ChecksumHelper.GeneratePreingestGuid(item.Name).ToString()); if (!Directory.Exists(workingDir)) { directory.CreateSubdirectory(ChecksumHelper.GeneratePreingestGuid(item.Name).ToString()); } }); List <JoinedQueryResult> currentActions = new List <JoinedQueryResult>(); List <ExecutionPlan> executionPlan = new List <ExecutionPlan>(); using (var context = new PreIngestStatusContext()) { var query = context.PreingestActionCollection.Where(item => tarArchives.Select(tar => ChecksumHelper.GeneratePreingestGuid(tar.Name)).ToList().Contains(item.FolderSessionId)).Join(context.ActionStateCollection, states => states.ProcessId, actions => actions.ProcessId, (actions, states) => new JoinedQueryResult { Actions = actions, States = states }).ToList(); if (query != null && query.Count > 0) { currentActions.AddRange(query); } var plans = context.ExecutionPlanCollection.Where(item => tarArchives.Select(tar => ChecksumHelper.GeneratePreingestGuid(tar.Name)).ToList().Contains(item.SessionId)).OrderBy(item => item.Sequence).ToArray(); if (plans != null && plans.Length > 0) { executionPlan.AddRange(plans); } } if (currentActions != null || currentActions.Count > 0) { var joinedActions = currentActions.Select(actions => actions.Actions).Distinct().Select(item => new QueryResultAction { ActionStatus = String.IsNullOrEmpty(item.ActionStatus) ? "Executing" : item.ActionStatus, Creation = item.Creation, Description = item.Description, FolderSessionId = item.FolderSessionId, Name = item.Name, ProcessId = item.ProcessId, ResultFiles = String.IsNullOrEmpty(item.ResultFiles) ? new string[] { } : item.ResultFiles.Split(";").ToArray(), Summary = String.IsNullOrEmpty(item.StatisticsSummary) ? null : JsonConvert.DeserializeObject <PreingestStatisticsSummary>(item.StatisticsSummary), States = currentActions.Select(state => state.States).Where(state => state.ProcessId == item.ProcessId).Select(state => new QueryResultState { StatusId = state.StatusId, Name = state.Name, Creation = state.Creation }).ToArray() }); dataResults = tarArchives.OrderByDescending(item => item.CreationTime).Select(item => new { Name = item.Name, SessionId = ChecksumHelper.GeneratePreingestGuid(item.Name), CreationTime = item.CreationTime, LastWriteTime = item.LastWriteTime, LastAccessTime = item.LastAccessTime, Size = item.Length, Settings = new SettingsReader(item.DirectoryName, ChecksumHelper.GeneratePreingestGuid(item.Name)).GetSettings(), ScheduledPlan = new ScheduledPlanStatusHandler(executionPlan.Where(ep => ep.SessionId == ChecksumHelper.GeneratePreingestGuid(item.Name)).ToList(), joinedActions.Where(preingestActions => preingestActions.FolderSessionId == ChecksumHelper.GeneratePreingestGuid(item.Name))).GetExecutionPlan(), OverallStatus = new ContainerOverallStatusHandler(new ScheduledPlanStatusHandler(executionPlan.Where(ep => ep.SessionId == ChecksumHelper.GeneratePreingestGuid(item.Name)).ToList(), joinedActions.Where(preingestActions => preingestActions.FolderSessionId == ChecksumHelper.GeneratePreingestGuid(item.Name))).GetExecutionPlan(), joinedActions.Where(preingestActions => preingestActions.FolderSessionId == ChecksumHelper.GeneratePreingestGuid(item.Name))).GetContainerStatus(), Preingest = joinedActions.Where(preingestActions => preingestActions.FolderSessionId == ChecksumHelper.GeneratePreingestGuid(item.Name)).ToArray() }).ToArray(); } else { dataResults = tarArchives.OrderByDescending(item => item.CreationTime).Select(item => new { Name = item.Name, SessionId = ChecksumHelper.GeneratePreingestGuid(item.Name), CreationTime = item.CreationTime, LastWriteTime = item.LastWriteTime, LastAccessTime = item.LastAccessTime, Size = item.Length, Settings = new SettingsReader(item.DirectoryName, ChecksumHelper.GeneratePreingestGuid(item.Name)).GetSettings(), ScheduledPlan = new ScheduledPlanStatusHandler(executionPlan.Where(ep => ep.SessionId == ChecksumHelper.GeneratePreingestGuid(item.Name)).ToList()).GetExecutionPlan(), OverallStatus = ContainerStatus.New, Preingest = new object[] { } }).ToArray(); } return(dataResults); }