public static FileCategory[] GetLogCategories( string directory, IFileCategorizationStrategy cStrategy) { var files = GetFileNamesInDirectory(directory); return(new FileCategorizer().Categorize(files, cStrategy).ToArray()); }
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(); }
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)); }
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); }