예제 #1
0
        public static FileCategory[] GetLogCategories(
            string directory, IFileCategorizationStrategy cStrategy)
        {
            var files = GetFileNamesInDirectory(directory);

            return(new FileCategorizer().Categorize(files, cStrategy).ToArray());
        }
예제 #2
0
 public ClientHandler(BinaryTcpClient client,
                      string logsSourcePath, string logsDestPath,
                      ILogger logger)
 {
     this.client         = client;
     this.logsSourcePath = logsSourcePath;
     this.logsDestPath   = logsDestPath;
     this.logger         = logger;
     requestHandler      = new ClientRequestHandler(
         client, logsSourcePath, logsDestPath, this.logger);
     decoder = new MessageDecoder();
     categorizationStrategy = GetCategorizationStrategy();
 }
예제 #3
0
        public void HandleServerInfoRequest(ServerInfoRequestMessage request,
                                            IFileCategorizationStrategy categorizationStrategy)
        {
            string            drive      = FileOperations.GetDriveFromPath(logsDestPath);
            ServerInfoMessage serverInfo = new ServerInfoMessage(
                FileOperations.GetLogCategories(logsSourcePath, categorizationStrategy),
                FileOperations.GetFileNamesInDirectory(logsDestPath, ".zip"),
                FileOperations.GetDriveAvailableBytes(drive),
                FileOperations.GetDriveTotalBytes(drive));

            client.Writer.Write(serverInfo);
            logger.Log("Sent server info:");
            logger.Log(serverInfo.ToString(true));
        }
예제 #4
0
        public IReadOnlyList <FileCategory> Categorize(
            string[] fileNames, IFileCategorizationStrategy cStrategy)
        {
            var extensionlessNames             = cStrategy.GetFullCategoryNames(fileNames);
            var fileCategoryQueues             = GenerateCategoryQueues(extensionlessNames);
            List <FileCategory> mainCategories = fileCategoryQueues
                                                 .Select(cq => cq.Value.Dequeue()).Distinct()
                                                 .Select(c => new FileCategory(c)).ToList();

            List <FileCategory> currentNodes = new List <FileCategory>(mainCategories);
            List <FileCategory> nextNodes    = new List <FileCategory>();

            while (true)
            {
                // filter empty queues and break if categorization is done
                fileCategoryQueues = fileCategoryQueues.Where(cq => cq.Value.Count > 0)
                                     .ToDictionary(cq => cq.Key, cq => cq.Value);
                if (fileCategoryQueues.Count == 0)
                {
                    break;
                }

                foreach (FileCategory node in currentNodes)
                {
                    var matchingQueues = GetMatchingQueues(fileCategoryQueues, node);
                    // errors unless subcategories is a list
                    List <string> subCategories = matchingQueues
                                                  .Select(q => q.Dequeue()).Distinct().ToList();
                    IEnumerable <FileCategory> childNodes = subCategories
                                                            .Select(c => new FileCategory(c));
                    foreach (FileCategory childCategory in childNodes)
                    {
                        node.AddSubCategory(childCategory);
                        nextNodes.Add(childCategory);
                    }
                }
                currentNodes = new List <FileCategory>(nextNodes);
                nextNodes.Clear();
            }
            return(mainCategories);
        }