public async Task <PagedResponse <MinerPerformanceStats> > PagePoolMinersAsync( string poolId, [FromQuery] int page, [FromQuery] int pageSize) { var pool = GetPool(poolId); // set range var end = clock.Now; var start = end.AddDays(-1); var result = await cf.Run(con => statsRepo.PagePoolMinersByHashrateAsync( con, pool.Id, start, page, pageSize)); var stats = result.Results.Select(mapper.Map <MinerPerformanceStats>).ToArray(); var shareEnd = clock.Now; var shareStart = shareEnd.AddDays(-1); foreach (var stat in stats) { var shares = await cf.Run(con => shareRepo.CountSharesBetweenCreatedAsync(con, pool.Id, stat.Miner, shareStart, shareEnd)); var invalidShares = await cf.Run(con => invalidShareRepo.CountInvalidSharesBetweenCreated(con, pool.Id, stat.Miner, shareStart, shareEnd)); var efficiency = (double)shares / (shares + invalidShares); stat.Efficiency = Math.Truncate(efficiency * 100) / 100; } return(new PagedResponse <MinerPerformanceStats> { Results = stats, Total = result.Total }); }