public void GenerateReport() { _searchResults = new List <AnalyzerSearchResult>(); foreach (AnalyzerUserLog userLog in _logFileCache.UserLogCache) { AnalyzerSearchResult result = userLog.SearchVoiceCommandOccurences(_searchVoiceCommandText, false, _originatingVoiceCommandTextWords, _secondOriginatingVoiceCommandTextWords); _searchResults.Add(result); } //searchResults.OrderBy(p => p.OccurencesPerHour).ToList().ForEach(p => Console.WriteLine(p.Description)); _totalOccurences = _searchResults.Sum(p => p.TotalOccurences); _totalDuration = new TimeSpan(); _searchResults.ForEach(p => _totalDuration = _totalDuration.Add(p.Duration)); _totalTimeWasted = new TimeSpan(); _searchResults.ForEach(p => _totalTimeWasted = _totalTimeWasted.Add(p.TimeWasted)); _totalTimeWastedPercentage = Math.Round(((_totalTimeWasted.TotalSeconds / _totalDuration.TotalSeconds) * 100), 2); }
public AnalyzerSearchResult SearchVoiceCommandOccurences(List <string> searchVoiceCommandText, bool caseSensitive) { List <AnalyzerLogLine> occurences = new List <AnalyzerLogLine>(); List <string> searchVoiceCommandTextLower = new List <string>(); searchVoiceCommandText.ForEach(p => searchVoiceCommandTextLower.Add(p.ToLower())); foreach (AnalyzerLogLine line in this) { string valueToSearch = caseSensitive ? line.VoiceCommand : line.VoiceCommand.ToLower(); List <string> valueToSearchFor = caseSensitive ? searchVoiceCommandText : searchVoiceCommandTextLower; bool match = false; foreach (string value in valueToSearchFor) { if (valueToSearch.Contains(value)) { match = true; break; } } if (!match) { continue; } occurences.Add(line); } AnalyzerSearchResult result = new AnalyzerSearchResult(_filePath, searchVoiceCommandText, null, occurences, _duration, new TimeSpan()); result.Description = string.Format( "{0} '{1}' for {2} in {2}:{4}:{5}:{6}:{7} at {8}/hour", result.TotalOccurences.ToString().PadRight(10), searchVoiceCommandText, _fileName, (_duration.Days.ToString() + "D").PadRight(5), (_duration.Hours.ToString() + "H").PadRight(5), (_duration.Minutes.ToString() + "M").PadRight(5), (_duration.Seconds.ToString() + "S").PadRight(5), (_duration.Milliseconds.ToString() + "MS").PadRight(5), result.OccurencesPerHour.ToString().PadRight(5)); result.Description = string.Format("'{0}' for {1}", searchVoiceCommandText, _fileName); return(result); }
public AnalyzerSearchResult SearchVoiceCommandOccurences( List <string> searchVoiceCommandText, bool caseSensitive, List <string> originatingVoiceCommandTextWords, List <string> secondOriginatingVoiceCommandTextWords) { List <AnalyzerLogLine> occurences = new List <AnalyzerLogLine>(); List <string> searchVoiceCommandTextLower = new List <string>(); searchVoiceCommandText.ForEach(p => searchVoiceCommandTextLower.Add(p.ToLower())); TimeSpan totalTimeWasted = new TimeSpan(); List <AnalyzerLogLine> originatingVoiceCommands = new List <AnalyzerLogLine>(); List <AnalyzerLogLine> secondOriginatingVoiceCommands = new List <AnalyzerLogLine>(); for (int i = 0; i < this.Count; i++) { AnalyzerLogLine line = this[i]; string valueToSearch = caseSensitive ? line.VoiceCommand : line.VoiceCommand.ToLower(); List <string> valueToSearchFor = caseSensitive ? searchVoiceCommandText : searchVoiceCommandTextLower; bool match = false; foreach (string value in valueToSearchFor) { if (valueToSearch.Contains(value)) { match = true; break; } } if (!match) { continue; } occurences.Add(line); if (originatingVoiceCommandTextWords == null) { continue; } int previousLineIndex = i; AnalyzerLogLine originatingLine = GetOriginatingLine(caseSensitive, i, originatingVoiceCommandTextWords); AnalyzerLogLine nextOriginatingLogLine = GetNextOriginatingLine(caseSensitive, i, originatingVoiceCommandTextWords); if (originatingLine != null && nextOriginatingLogLine != null) { TimeSpan commandTimeWasted = nextOriginatingLogLine.TimeStamp.Subtract(originatingLine.TimeStamp); totalTimeWasted = totalTimeWasted.Add(commandTimeWasted); originatingVoiceCommands.Add(originatingLine); } AnalyzerLogLine secondOriginatingLine = GetOriginatingLine(caseSensitive, i, secondOriginatingVoiceCommandTextWords); if (secondOriginatingLine != null) { secondOriginatingVoiceCommands.Add(secondOriginatingLine); } } AnalyzerSearchResult result = new AnalyzerSearchResult(_userId.ToString(), searchVoiceCommandText, null, occurences, _totalDuration, totalTimeWasted); User user = UserDictionary.Instance[_userId]; string userString = user == null?_userId.ToString() : string.Format("{0}({1})", user.UserName, _userId); result.Description = string.Format( "{0} '{1}' for user {2} in {3}:{4}:{5}:{6}:{7} at {8}/hour. Time wasted: {9}/{10} {11}%", result.TotalOccurences.ToString().PadRight(10), searchVoiceCommandText, userString.PadRight(25), (_totalDuration.Days.ToString() + "D").PadRight(5), (_totalDuration.Hours.ToString() + "H").PadRight(5), (_totalDuration.Minutes.ToString() + "M").PadRight(5), (_totalDuration.Seconds.ToString() + "S").PadRight(5), (_totalDuration.Milliseconds.ToString() + "MS").PadRight(5), result.OccurencesPerHour.ToString().PadRight(5), result.TimeWasted, result.Duration, result.PercentageTimeWasted); result.OriginatingVoiceCommands.Clear(); originatingVoiceCommands.ForEach(p => result.OriginatingVoiceCommands.Add(p)); result.SecondOriginatingVoiceCommands.Clear(); secondOriginatingVoiceCommands.ForEach(p => result.SecondOriginatingVoiceCommands.Add(p)); return(result); }