private async Task <IHttpActionResult> GetInternalAsync(string systemFilter = null, string userFilter = null, string sort = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10, bool usesPremiumFeatures = false)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            var processResult = QueryProcessor.Process(userFilter);

            if (!processResult.IsValid)
            {
                return(BadRequest(processResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = await GetAssociatedOrganizationsFilterAsync(_organizationRepository, processResult.UsesPremiumFeatures || usesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter));
            }

            var sortBy   = GetSort(sort);
            var timeInfo = GetTimeInfo(time, offset);
            var options  = new PagingOptions {
                Page = page, Limit = limit
            };

            FindResults <PersistentEvent> events;

            try {
                events = await _repository.GetByFilterAsync(systemFilter, processResult.ExpandedQuery, sortBy, timeInfo.Field, timeInfo.UtcRange.Start, timeInfo.UtcRange.End, options);
            } catch (ApplicationException ex) {
                Logger.Error().Exception(ex)
                .Property("Search Filter", new { SystemFilter = systemFilter, UserFilter = userFilter, Sort = sort, Time = time, Offset = offset, Page = page, Limit = limit })
                .Tag("Search")
                .Identity(ExceptionlessUser.EmailAddress)
                .Property("User", ExceptionlessUser)
                .SetActionContext(ActionContext)
                .Write();

                return(BadRequest("An error has occurred. Please check your search filter."));
            }

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(events.Documents.Select(e => {
                    var summaryData = _formattingPluginManager.GetEventSummaryData(e);
                    return new EventSummaryModel {
                        TemplateKey = summaryData.TemplateKey,
                        Id = e.Id,
                        Date = e.Date,
                        Data = summaryData.Data
                    };
                }).ToList(), events.HasMore && !NextPageExceedsSkipLimit(page, limit), page, events.Total));
            }

            return(OkWithResourceLinks(events.Documents, events.HasMore && !NextPageExceedsSkipLimit(page, limit), page, events.Total));
        }
Example #2
0
        public IHttpActionResult GetInternal(string systemFilter = null, string userFilter = null, string sort = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            var validationResult = QueryValidator.Validate(userFilter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter));
            }

            var sortBy   = GetSort(sort);
            var timeInfo = GetTimeInfo(time, offset);
            var options  = new PagingOptions {
                Page = page, Limit = limit
            };
            var events = _repository.GetByFilter(systemFilter, userFilter, sortBy.Item1, sortBy.Item2, timeInfo.Field, timeInfo.UtcRange.Start, timeInfo.UtcRange.End, options);

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(events.Select(e => {
                    var summaryData = _formattingPluginManager.GetEventSummaryData(e);
                    return new EventSummaryModel {
                        TemplateKey = summaryData.TemplateKey,
                        Id = e.Id,
                        Date = e.Date,
                        Data = summaryData.Data
                    };
                }).ToList(), options.HasMore, page));
            }

            return(OkWithResourceLinks(events, options.HasMore && !NextPageExceedsSkipLimit(page, limit), page));
        }
Example #3
0
        public void EventSummaryData(string path)
        {
            var settings = IoC.GetInstance <JsonSerializerSettings>();

            settings.Formatting = Formatting.Indented;

            var json = File.ReadAllText(path);

            var ev = json.FromJson <PersistentEvent>(settings);

            Assert.NotNull(ev);

            var data    = _formattingPluginManager.GetEventSummaryData(ev);
            var summary = new EventSummaryModel {
                TemplateKey = data.TemplateKey,
                Id          = ev.Id,
                Date        = ev.Date,
                Data        = data.Data
            };

            ApprovalsUtility.VerifyFile(Path.ChangeExtension(path, "summary.json"), JsonConvert.SerializeObject(summary, settings));
        }
Example #4
0
        public IHttpActionResult GetInternal(string systemFilter = null, string userFilter = null, string sort = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter();
            }

            var sortBy   = GetSort(sort);
            var timeInfo = GetTimeInfo(time, offset);
            var options  = new PagingOptions {
                Page = page, Limit = limit
            };
            var events = _repository.GetByFilter(systemFilter, userFilter, sortBy.Item1, sortBy.Item2, timeInfo.Field, timeInfo.UtcRange.Start, timeInfo.UtcRange.End, options);

            // TODO: Implement a cut off and add header that contains the number of stacks outside of the retention period.
            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(events.Select(e => {
                    var summaryData = _formattingPluginManager.GetEventSummaryData(e);
                    return new EventSummaryModel {
                        TemplateKey = summaryData.TemplateKey,
                        Id = e.Id,
                        Date = e.Date,
                        Data = summaryData.Data
                    };
                }).ToList(), options.HasMore, page));
            }

            return(OkWithResourceLinks(events, options.HasMore && !NextPageExceedsSkipLimit(page, limit), page));
        }
        public IHttpActionResult Get(string organization = null, string before = null, string after = null, int limit = 10, string mode = null)
        {
            var options = new PagingOptions {
                Before = before, After = after, Limit = limit
            };

            var organizationIds = new List <string>();

            if (!String.IsNullOrEmpty(organization) && CanAccessOrganization(organization))
            {
                organizationIds.Add(organization);
            }
            else
            {
                organizationIds.AddRange(GetAssociatedOrganizationIds());
            }

            var results = _repository.GetByOrganizationIds(organizationIds, options);

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(results.Select(e => new EventSummaryModel(e.Id, e.Date, _formattingPluginManager.GetEventSummaryData(e))).ToList(), options.HasMore, e => String.Concat(e.Date.UtcTicks.ToString(), "-", e.Id), isDescending: true));
            }

            return(OkWithResourceLinks(results, options.HasMore, e => String.Concat(e.Date.UtcTicks.ToString(), "-", e.Id), isDescending: true));
        }