예제 #1
0
        public void Verify_empty_result_returned_when_snapshot_null()
        {
            ClusterSnapshot snapshot = null;

            var result = new ClusterScanner(_probes)
                         .Scan(snapshot);

            result.ShouldBeEmpty();
        }
예제 #2
0
        public void Verify_empty_result_returned_when_snapshot_null()
        {
            ClusterSnapshot snapshot = null;

            var result = new ClusterScanner(_probes)
                         .Scan(snapshot);

            Assert.IsEmpty(result);
        }
예제 #3
0
        public async Task <ClusterSnapshot> ScrapeAsync(Cluster cluster)
        {
            var serverColumns = _mapContext.Server
                                .Include(x => x.Cluster)
                                .Include(x => x.GridCell)
                                .Where(x => x.Cluster == cluster)
                                .GroupBy(x => x.GridCell.Column)
                                .ToArray();

            if (serverColumns == null || !serverColumns.Any())
            {
                throw new Exception($"No servers found for specified {nameof(cluster)}");
            }

            var clusterSnapshot = new ClusterSnapshot(cluster)
            {
                Id              = Guid.NewGuid(),
                Timestamp       = DateTime.UtcNow,
                PlayerCount     = -1,
                ServerSnapshots = new ServerSnapshot[cluster.RowCount * cluster.ColumnCount]
            };

            var tasks = new List <Task <ServerSnapshot> >();

            foreach (var serverColumn in serverColumns)
            {
                foreach (var server in serverColumn)
                {
                    tasks.Add(Task.Run(async() => await GetServerSnapshotAsync(server)));
                }
            }

            await Task.WhenAll(tasks);

            for (var i = 0; i < tasks.Count; i++)
            {
                clusterSnapshot.ServerSnapshots[i] = tasks[i].Result;
            }

            clusterSnapshot.EndTimestamp = DateTime.UtcNow;
            clusterSnapshot.PlayerCount  = clusterSnapshot.ServerSnapshots.Sum(x => x.PlayerCount);
            clusterSnapshot.PlayerMax    = clusterSnapshot.ServerSnapshots.Max(x => x.PlayerCount);

            return(clusterSnapshot);
        }