Ejemplo n.º 1
0
        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);
            }));
        }
Ejemplo n.º 2
0
 public Task <IEnumerable <string> > Query(RequestFilters filters)
 {
     return(Query(filters, null));
 }