protected override void ReadFile()
        {
            _progress.Report($"{DateTime.Now} | Checking file");
            if (!File.Exists(path))
            {
                return;
            }

            var createdDate = File.GetCreationTime(path);

            var logFile = logFileRepository.GetFileByName(path);

            if (logFile != null)
            {
                if (createdDate.MongoEquals(logFile.Created))
                {
                    logFile.ReadBytes = 0;
                }

                try
                {
                    ReadLines(logFile);
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Read file exception");
                }

                logFileRepository.UpdateFile(logFile);
            }
            else
            {
                _progress.Report("new file");
                logFile = new LogFile
                {
                    Path      = path,
                    Created   = File.GetCreationTime(path),
                    ReadBytes = 0
                };
                try
                {
                    ReadLines(logFile);
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Read file exception");
                }
                logFileRepository.AddFile(logFile);
            }
        }
        private void ReadFile()
        {
            Console.WriteLine($"{DateTime.Now} | Checking file");

            if (!File.Exists(path))
            {
                return;
            }

            var createdDate = File.GetCreationTime(path);

            var logFile = logFileRepository.GetFileByName(path);

            if (logFile != null)
            {
                if (createdDate.MongoEquals(logFile.Created))
                {
                    logFile.ReadBytes = 0;
                }

                ReadLines(logFile);
                logFileRepository.UpdateFile(logFile);
            }
            else
            {
                logFile = new LogFile
                {
                    Path      = path,
                    Created   = File.GetCreationTime(path),
                    ReadBytes = 0
                };

                ReadLines(logFile);
                logFileRepository.AddFile(logFile);
            }
        }
        private void WatchDirectory()
        {
            ColorConsole.Yellow("Watch directory");

            var allFiles = Directory.GetFiles(logsPath);
            var newFiles = allFiles.Except(logFileRepository.GetFiles().Select(x => x.Path)).ToArray();

            if (!newFiles.Any() && !_isThereFileInQueue)
            {
                if (allFiles.Length != 0 && allFiles.Last() != _lastFile)
                {
                    _lastFile = allFiles.Length > 0 ? allFiles.Last() : _lastFile;

                    var logFile = logFileRepository.GetFileByName(_lastFile);
                    _skip = logFile.ReadBytes;

                    ReadLinesFromFile();
                }
                return;
            }

            ColorConsole.Yellow("There are new files or there is file in queue");
            foreach (var file in newFiles)
            {
                var  lines = new List <string>();
                long position;
                using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (var streamReader = new StreamReader(fileStream))
                    {
                        streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
                        while (streamReader.Peek() >= 0)
                        {
                            lines.Add(streamReader.ReadLine());
                        }
                        position = streamReader.BaseStream.Length;
                    }
                }

                _skip = position;

                var logs = parsers.ParseLogs(lines.ToList());
                if (logs != null)
                {
                    ColorConsole.Yellow($"{logs.Count} logs will be added");
                    ColorConsole.Yellow($"Last read lines is {lines.Last()}");
                    logRepository.InsertBatch(logs);
                }

                logFileRepository.AddFile(new LogFile {
                    Path = file, ReadBytes = position
                });
                _isThereFileInQueue = true;
            }

            if (newFiles.Length != 0 && _lastFile != newFiles.Last() || _isThereFileInQueue)
            {
                _lastFile = newFiles.Length > 0 ? newFiles.Last() : _lastFile;

                ReadLinesFromFile();
            }
        }