public async Task <ServerPullData> PullAsync(MonitoringQuery query)
        {
            var server = _servers.GetOrAdd(query.Server.Id, hash => new ServerInfo());

            var serverData = _serversData.GetOrAdd(query.Server.Id, hash => new InMemoryServerData()).ToList();

            if (!serverData.Any())
            {
                return(new ServerPullData());
            }

            var items = new List <ServerStatisticsDataItem>();

            foreach (var sData in serverData)
            {
                var item = new ServerStatisticsDataItem
                {
                    Name                = sData.Key,
                    Order               = sData.Value.Order,
                    CurrentValue        = await sData.Value.LastValue(),
                    CurrentValueDisplay = sData.Value.Display,
                    Type                = sData.Value.Type,
                    Data                = await sData.Value.FilterData(query)
                };

                items.Add(item);
            }

            var result = new ServerPullData {
                LastPush = server.LastPush, Items = items.OrderBy(x => x.Order)
            };

            return(await Task.FromResult(result));
        }
Пример #2
0
        public async Task InternalPush(ServerStatisticsDataItem item)
        {
            _monitoringData.Enqueue(new InMemoryTimeValue(item.CurrentValue, DateTime.UtcNow));

            Order   = item.Order;
            Display = item.CurrentValueDisplay;

            await Task.CompletedTask;
        }