public virtual async Task <ActionResult <GetAggregateResponse> > GetAggregate([FromQuery] GetAggregateArguments args, CancellationToken cancellation) { return(await ControllerUtilities.InvokeActionImpl(async() => { using var _ = _instrumentation.Block(nameof(GetAggregate)); // Calculate server time at the very beginning for consistency var serverTime = DateTimeOffset.UtcNow; // Sometimes select is so huge that it is passed as a header instead if (string.IsNullOrWhiteSpace(args.Select)) { args.Select = Request.Headers["X-Select"].FirstOrDefault(); } // Load the data var(data, ancestors, isPartial) = await GetFactService().GetAggregate(args, cancellation); // Finally return the result var result = new GetAggregateResponse { IsPartial = isPartial, ServerTime = serverTime, Result = data, DimensionAncestors = ancestors, }; return Ok(result); }, _logger)); }
public virtual async Task <ActionResult <GetAggregateResponse> > GetAggregate([FromQuery] GetAggregateArguments args, CancellationToken cancellation) { // Calculate server time at the very beginning for consistency var serverTime = DateTimeOffset.UtcNow; // Sometimes select is so huge that it is passed as a header instead if (string.IsNullOrWhiteSpace(args.Select)) { args.Select = Request.Headers["X-Select"].FirstOrDefault(); } // Load the data var result = await GetFactService().GetAggregate(args, cancellation); var data = result.Data; var ancestors = result.Ancestors.Select(e => new DimensionAncestors { IdIndex = e.IdIndex, MinIndex = e.MinIndex, Result = e.Data.ToList() }); // Finally return the result var response = new GetAggregateResponse { ServerTime = serverTime, Result = data, DimensionAncestors = ancestors, }; return(Ok(response)); }