public async Task <ResourceList <IDictionary <string, int> > > GetHistogramGroupedByMime(double span) { var histogram = await GetHistogram(span); var resource = new ResourceList <IDictionary <string, int> >(histogram .Select(k => (IDictionary <string, int>)k.GroupBy(x => x.MimeType) .ToDictionary(x => x.Key, x => x.Count()))); foreach (var key in resource.Items.SelectMany(x => x.Keys).Distinct()) { resource.Attributes[key] = true; } return(resource); }
public async Task <ResourceList <LogEntry> > GetRecentRequests(long position = -1, Func <LogEntry, bool> filter = null) { if (filter == null) { filter = _ => true; } var entries = new List <LogEntry>(256); long startPos = 0; using (var stream = new FileStream(_logFile.FullName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite)) { if (position > -1 && position < stream.Length) { stream.Position = startPos = position; } else { if (stream.Length - DefaultReadSize > 0) { stream.Position = startPos = stream.Length - DefaultReadSize; } } using (var reader = new StreamReader(stream)) { await reader.ReadLineAsync(); while (true) { var next = await reader.ReadLineAsync(); if (next == null) { break; } try { var entry = LogEntry.Parse(next); if (filter(entry)) { entries.Add(entry); } } catch (Exception ex) { Console.WriteLine(ex); } } } } var resource = new ResourceList <LogEntry>(entries, startPos) { TotalSize = _logFile.Length }; return(resource); }