コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }