public LogAccumulator Consume(ILogFile logFile) { if (IsComplete) { return(this); } var filter = query_.CreateFilter(); var stats = statsCache_.GetStats(logFile, filter); var matchesTimeWindow = query_.MinTimestamp <= stats.LatestTimestamp && stats.EarliestTimestamp <= query_.MaxTimestamp; if (!matchesTimeWindow) { return(this); } var matchingEvents = stats.GroupStats .Where(kvp => groupFilter_.Apply(kvp.Key)) .Sum(kvp => kvp.Value); if (matchingEvents > skipRemaining_) { var fileEvents = logFile.GetEventsReverse(); var filteredFileEvents = filter != null ? fileEvents.Where(filter) : fileEvents; var selectedFileEvents = filteredFileEvents .Skip(skipRemaining_) .Take(query_.Quantity - events_.Count) .Select(x => new EventModel(x)); events_.AddRange(selectedFileEvents); skipRemaining_ = 0; } else { skipRemaining_ -= matchingEvents; } return(this); }
public override bool Apply(LogFileStats.EventGroupKey groupKey) => !wrapped_.Apply(groupKey);