static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                return;
            }

            string dataDirectoryPath = args[0];

            Console.WriteLine($"{DateTime.Now}: Инициализация чтения логов \"{dataDirectoryPath}\"...");
            Console.WriteLine();

            while (true)
            {
                TechJournalManager tjManager = new TechJournalManager(dataDirectoryPath);
                foreach (var tjDirectory in tjManager.Directories)
                {
                    if (!tjDirectory.DirectoryData.Exists)
                    {
                        continue;
                    }

                    _lastLogDirectory = tjDirectory;
                    TechJournalPosition lastPosition = null;
                    if (_lastPositions.ContainsKey(tjDirectory.DirectoryData.Name))
                    {
                        lastPosition = _lastPositions[tjDirectory.DirectoryData.Name];
                    }

                    using (TechJournalReader tjReader = TechJournalReader.CreateReader(tjDirectory.DirectoryData.FullName))
                    {
                        tjReader.AfterReadEvent  += Reader_AfterReadEvent;
                        tjReader.AfterReadFile   += Reader_AfterReadFile;
                        tjReader.BeforeReadEvent += Reader_BeforeReadEvent;
                        tjReader.BeforeReadFile  += Reader_BeforeReadFile;
                        tjReader.OnErrorEvent    += Reader_OnErrorEvent;
                        tjReader.SetCurrentPosition(lastPosition);

                        _eventNumber = 0;
                        while (tjReader.Read())
                        {
                            // tjReader.CurrentRow - данные текущего события
                            // tjReader.CurrentRow.Properties - сырые данные события "как есть" без обработки в виде словаря Dictionary<string, string>
                            _eventNumber      += 1;
                            _totalEventNumber += 1;
                        }
                        Console.WriteLine($"{DateTime.Now}: [{_lastLogDirectory}] Всего событий прочитано: ({_eventNumber})...");
                    }
                }

                Console.WriteLine();
                Console.WriteLine($"{DateTime.Now}: Всего событий прочитано {_totalEventNumber}.");
                Console.WriteLine($"{DateTime.Now}: Ожидание новых событий...");
                Thread.Sleep(5000);
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                return;
            }

            string dataDirectoryPath = args[0];

            Console.WriteLine($"{DateTime.Now}: Инициализация чтения логов \"{dataDirectoryPath}\"...");
            Console.WriteLine();

            TechJournalManager tjManager = new TechJournalManager(dataDirectoryPath);

            foreach (var tjDirectory in tjManager.Directories)
            {
                _lastLogDirectory = tjDirectory;

                using (TechJournalReader tjReader = TechJournalReader.CreateReader(tjDirectory.DirectoryData.FullName))
                {
                    tjReader.AfterReadEvent  += Reader_AfterReadEvent;
                    tjReader.AfterReadFile   += Reader_AfterReadFile;
                    tjReader.BeforeReadEvent += Reader_BeforeReadEvent;
                    tjReader.BeforeReadFile  += Reader_BeforeReadFile;
                    tjReader.OnErrorEvent    += Reader_OnErrorEvent;

                    Console.WriteLine($"{DateTime.Now}: [{_lastLogDirectory}] Всего событий к обработке: ({tjReader.Count()})...");

                    while (tjReader.Read())
                    {
                        // tjReader.CurrentRow - данные текущего события
                        // tjReader.CurrentRow.Properties - сырые данные события "как есть" без обработки в виде словаря Dictionary<string, string>
                        _eventNumber      += 1;
                        _totalEventNumber += 1;
                    }
                }
            }

            Console.WriteLine($"{DateTime.Now}: Всего событий прочитано: ({_totalEventNumber})...");
            Console.WriteLine($"{DateTime.Now}: Для выхода нажмите любую клавишу...");
            Console.ReadKey();
        }
        private void FillTechLogDirectories(string logFilePath)
        {
            Directories = new List <TechJournalDirectory>();

            if (File.GetAttributes(logFilePath).HasFlag(FileAttributes.Directory))
            {
                DirectoryInfo logDirectoryInfo = new DirectoryInfo(logFilePath);
                if (TechJournalDirectory.ParseDataFromDirectoryName(logDirectoryInfo.Name) &&
                    TechJournalDirectory.ContainsLogFiles(logFilePath))
                {
                    Directories.Add(new TechJournalDirectory(logFilePath));
                }
                else
                {
                    string[] techJournalSubDirectories = Directory.GetDirectories(logFilePath)
                                                         .OrderBy(i => i)
                                                         .ToArray();
                    foreach (var techJournalSubDirectory in techJournalSubDirectories)
                    {
                        DirectoryInfo techJournalSubDirectoryInfo = new DirectoryInfo(techJournalSubDirectory);
                        if (TechJournalDirectory.ParseDataFromDirectoryName(techJournalSubDirectoryInfo.Name) &&
                            TechJournalDirectory.ContainsLogFiles(techJournalSubDirectoryInfo.FullName))
                        {
                            Directories.Add(new TechJournalDirectory(techJournalSubDirectoryInfo.FullName));
                        }
                    }
                }
            }
            else
            {
                FileInfo      logFile          = new FileInfo(logFilePath);
                DirectoryInfo logDirectoryInfo = logFile.Directory;
                if (logDirectoryInfo != null &&
                    TechJournalDirectory.ParseDataFromDirectoryName(logDirectoryInfo.Name) &&
                    TechJournalDirectory.ContainsLogFiles(logDirectoryInfo.FullName))
                {
                    Directories.Add(new TechJournalDirectory(logFilePath));
                }
            }
        }