private void UpdateLogFileList(string selectedDirectoryTitle = null)
        {
            if (selectedDirectoryTitle == null)
            {
                FileTarget fileTarget = (FileTarget)LogManager.Configuration.FindTargetByName("file");
                // Need to set timestamp here if filename uses date.
                // For example - filename="${basedir}/logs/${shortdate}/trace.log"
                LogEventInfo logEventInfo = new LogEventInfo {
                    TimeStamp = DateTime.Now
                };
                string fileName = fileTarget.FileName.Render(logEventInfo);
                selectedDirectoryTitle = Path.GetDirectoryName(fileName);
            }
            else
            {
                this.selectedDirectoryTitle = selectedDirectoryTitle;
            }

            string errorSearchTerm;
            string warningSearchTerm;

            // remember user selection
            string selectedIndexValue = null;
            int    selectedIndex      = listBoxViewLogFiles.SelectedIndex;

            if (selectedIndex >= 0)
            {
                selectedIndexValue = listBoxViewLogFiles.SelectedItems[0].ToString();
            }

            switch (selectedDirectoryTitle)
            {
            case "SnapRAID Scheduled Jobs":
                // SnapRAID Scheduled Jobs
                errorSearchTerm   = snapraidErrorSearchTerm;
                warningSearchTerm = snapraidWarningSearchTerm;
                LexerToUse        = LexerNameEnum.ScanRaid;
                logSourcePath     = selectedDirectoryTitle;
                if (!Directory.Exists(logSourcePath))
                {
                    return;
                }

                logFileWatcher.Path   = selectedDirectoryTitle;
                logFileWatcher.Filter = "*.log";
                logFileWatcher.EnableRaisingEvents = true;
                break;

            case "Elucidate":
                // Elucidate
                errorSearchTerm   = elucidateErrorSearchTerm;
                warningSearchTerm = elucidateWarningSearchTerm;
                LexerToUse        = LexerNameEnum.NLog;
                logSourcePath     = selectedDirectoryTitle;
                if (!Directory.Exists(logSourcePath))
                {
                    return;
                }

                logFileWatcher.Path   = selectedDirectoryTitle;
                logFileWatcher.Filter = "*.log";
                logFileWatcher.EnableRaisingEvents = true;
                break;

            default:
                logFileWatcher.EnableRaisingEvents = false;
                return;
            }

            Log.Debug($@"logSourcePath : {logSourcePath}");

            listBoxViewLogFiles.Items.Clear();

            DirectoryInfo logFileDirectoryInfo = new DirectoryInfo(logSourcePath);

            List <FileInfo> allLogs = logFileDirectoryInfo.GetFiles("*.log").OrderByDescending(a => a.Name).ToList();

            List <FileInfo> filteredLogs = new List <FileInfo>();

            if (checkedFilesWithError.Checked)
            {
                IEnumerable <FileInfo> filesWithErrors = from file in allLogs
                                                         let fileText = GetFileText(file.FullName)
                                                                        where fileText.Contains(errorSearchTerm)
                                                                        select file;
                filteredLogs = filteredLogs.Union(filesWithErrors).ToList();
            }

            if (checkedFilesWithWarn.Checked)
            {
                IEnumerable <FileInfo> filesWithWarnings = from file in allLogs
                                                           let fileText = GetFileText(file.FullName)
                                                                          where fileText.Contains(warningSearchTerm)
                                                                          select file;
                filteredLogs = filteredLogs.Union(filesWithWarnings).ToList();
            }

            List <FileInfo> logsToShow = filteredLogs.Count > 0 ? filteredLogs : allLogs;

            logsToShow = logsToShow.OrderByDescending(a => a.Name).ToList();
            foreach (FileInfo log in logsToShow)
            {
                listBoxViewLogFiles.Items.Add(log.Name);
            }

            // restore user selection, if it still exists
            if (selectedIndex >= 0 && !string.IsNullOrEmpty(selectedIndexValue))
            {
                int indexFound = listBoxViewLogFiles.FindStringExact(selectedIndexValue);
                if (indexFound >= 0)
                {
                    listBoxViewLogFiles.SelectedIndex = indexFound;
                }
            }
        }
Exemple #2
0
        private void UpdateLogFileList(string selectedDirectoryTitle = null)
        {
            if (selectedDirectoryTitle == null)
            {
                selectedDirectoryTitle = _selectedDirectoryTitle;
            }
            else
            {
                _selectedDirectoryTitle = selectedDirectoryTitle;
            }

            string errorSearchTerm;
            string warningSearchTerm;

            // remember user selection
            string selectedIndexValue = null;
            int    selectedIndex      = -1;

            selectedIndex = listBoxViewLogFiles.SelectedIndex;
            if (selectedIndex >= 0)
            {
                selectedIndexValue = listBoxViewLogFiles.SelectedItems[0].ToString();
            }

            switch (selectedDirectoryTitle)
            {
            case "SnapRAID Scheduled Jobs":
                // SnapRAID Scheduled Jobs
                errorSearchTerm        = _snapraidErrorSearchTerm;
                warningSearchTerm      = _snapraidWarningSearchTerm;
                LexerToUse             = LexerNameEnum.ScanRaid;
                _logSourcePath         = $@"{Path.GetDirectoryName(Properties.Settings.Default.ConfigFileLocation)}\{Properties.Settings.Default.LogFileDirectory}\";
                _logFileWatcher.Path   = $@"{Path.GetDirectoryName(Properties.Settings.Default.ConfigFileLocation)}\{Properties.Settings.Default.LogFileDirectory}\";
                _logFileWatcher.Filter = "*.log";
                _logFileWatcher.EnableRaisingEvents = true;
                break;

            case "Elucidate":
                // Elucidate
                errorSearchTerm        = _elucidateErrorSearchTerm;
                warningSearchTerm      = _elucidateWarningSearchTerm;
                LexerToUse             = LexerNameEnum.NLog;
                _logSourcePath         = LogFileLocation.GetActiveLogFileLocation();
                _logFileWatcher.Path   = LogFileLocation.GetActiveLogFileLocation();
                _logFileWatcher.Filter = "*.log";
                _logFileWatcher.EnableRaisingEvents = true;
                break;

            default:
                _logFileWatcher.EnableRaisingEvents = false;
                return;
            }

            Log.Instance.Debug($"_logSourcePath : {_logSourcePath}");

            listBoxViewLogFiles.Items.Clear();

            if (!Directory.Exists(_logSourcePath))
            {
                return;
            }

            DirectoryInfo logFileDirectoryInfo = new DirectoryInfo(_logSourcePath);

            List <FileInfo> allLogs = logFileDirectoryInfo.GetFiles("*.log").OrderByDescending(a => a.Name).ToList();

            List <FileInfo> filteredLogs = new List <FileInfo>();

            if (checkedFilesWithError.Checked)
            {
                IEnumerable <FileInfo> filesWithErrors = from file in allLogs
                                                         let fileText = GetFileText(file.FullName)
                                                                        where fileText.Contains(errorSearchTerm)
                                                                        select file;
                filteredLogs = filteredLogs.Union(filesWithErrors).ToList();
            }

            if (checkedFilesWithWarn.Checked)
            {
                IEnumerable <FileInfo> filesWithWarnings = from file in allLogs
                                                           let fileText = GetFileText(file.FullName)
                                                                          where fileText.Contains(warningSearchTerm)
                                                                          select file;
                filteredLogs = filteredLogs.Union(filesWithWarnings).ToList();
            }

            List <FileInfo> logsToShow = filteredLogs.Count > 0 ? filteredLogs : allLogs;

            logsToShow = logsToShow.OrderByDescending(a => a.Name).ToList();
            foreach (FileInfo log in logsToShow)
            {
                listBoxViewLogFiles.Items.Add(log.Name);
            }

            // restore user selection, if it stil lexists
            if (selectedIndex >= 0 && !string.IsNullOrEmpty(selectedIndexValue))
            {
                int indexFound = -1;
                indexFound = listBoxViewLogFiles.FindStringExact(selectedIndexValue);
                if (indexFound >= 0)
                {
                    listBoxViewLogFiles.SelectedIndex = indexFound;
                }
            }
        }