Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }