示例#1
0
        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
            });
        }