public Task <IEnumerable <string> > Query(RequestFilters filters, params string[] types) { if (filters == null) { filters = RequestFilters.None; } return(Task.Run(() => { var query = this.GetAllIndices(); if (filters.DurationMaximum.HasValue) { query = query.Where(i => i.Duration.HasValue && i.Duration <= filters.DurationMaximum); } if (filters.DurationMinimum.HasValue) { query = query.Where(i => i.Duration.HasValue && i.Duration >= filters.DurationMinimum.Value); } if (!string.IsNullOrWhiteSpace(filters.UrlContains)) { query = query.Where(i => !string.IsNullOrWhiteSpace(i.Url) && i.Url.Contains(filters.UrlContains)); } if (filters.MethodList.Any()) { query = query.Where(i => !string.IsNullOrWhiteSpace(i.Method) && filters.MethodList.Contains(i.Method)); } if (filters.TagList.Any()) { query = query.Where(i => i.Tags.Intersect(filters.TagList).Any()); } if (filters.StatusCodeMinimum.HasValue) { query = query.Where(i => i.StatusCode.HasValue && i.StatusCode >= filters.StatusCodeMinimum); } if (filters.StatusCodeMaximum.HasValue) { query = query.Where(i => i.StatusCode.HasValue && i.StatusCode <= filters.StatusCodeMaximum); } if (filters.RequesTimeBefore.HasValue) { query = query.Where(i => i.DateTime.HasValue && i.DateTime < filters.RequesTimeBefore); } if (!string.IsNullOrWhiteSpace(filters.UserId)) { query = query.Where(i => !string.IsNullOrWhiteSpace(i.UserId) && i.UserId.Equals(filters.UserId, StringComparison.OrdinalIgnoreCase)); } return query .OrderByDescending(i => i.DateTime) .Take(RequestsPerPage) .Join( types == null ? this.GetAllMessages() : this.GetAllMessages().Where(m => m.Types.Intersect(types).Any()), // only filter by type if types are specified i => i.Id, m => m.Context.Id, (i, m) => m.Payload); })); }
public Task <IEnumerable <string> > Query(RequestFilters filters) { return(Query(filters, null)); }