public async Task <IHttpActionResult> GetSessionsAsync(string filter = null, string time = null, string offset = null) { var timeInfo = GetTimeInfo(time, offset); var processResult = QueryProcessor.Process(filter); if (!processResult.IsValid) { return(BadRequest(processResult.Message)); } string systemFilter = await GetAssociatedOrganizationsFilterAsync(_organizationRepository, true, HasOrganizationOrProjectFilter(filter)); SessionStatsResult result; try { result = await _stats.GetSessionStatsAsync(timeInfo.UtcRange.Start, timeInfo.UtcRange.End, systemFilter, processResult.ExpandedQuery, timeInfo.Offset); } catch (ApplicationException ex) { Logger.Error().Exception(ex) .Property("Search Filter", new { SystemFilter = systemFilter, UserFilter = filter, Time = time, Offset = offset }) .Tag("Search") .Identity(ExceptionlessUser.EmailAddress) .Property("User", ExceptionlessUser) .SetActionContext(ActionContext) .Write(); return(BadRequest("An error has occurred. Please check your search filter.")); } return(Ok(result)); }
public async Task CanGetSessionStatsAsync() { await RemoveDataAsync(); await CreateDataAsync(); var startDate = DateTime.UtcNow.SubtractHours(1); await CreateSessionEventsAsync(); _metricsClient.DisplayStats(); var result = await _stats.GetSessionStatsAsync(startDate, DateTime.UtcNow, null); Assert.Equal(7, result.Sessions); Assert.Equal(7, result.Timeline.Sum(t => t.Sessions)); Assert.Equal(3, result.Users); Assert.Equal(6, result.Timeline.Sum(t => t.Users)); Assert.Equal((decimal)(3600.0 / result.Sessions), result.AvgDuration); Assert.Equal(900, result.Timeline.Sum(t => t.AvgDuration)); }