Пример #1
0
        public async Task <List <double> > FilterData(MonitoringQuery query)
        {
            IEnumerable <InMemoryTimeValue> data = _monitoringData;

            if (query.DateFrom.HasValue)
            {
                data = data.Where(x => x.Date >= query.DateFrom);
            }

            if (query.DateTo.HasValue)
            {
                data = data.Where(x => x.Date <= query.DateTo);
            }

            if (query.SinceDate.HasValue)
            {
                data = data.Where(x => x.Date >= query.SinceDate);
            }

            if (query.SinceMinute.HasValue)
            {
                var nowWithoutMinute = DateTime.UtcNow.AddMinutes(-query.SinceMinute.Value);
                data = data.Where(x => x.Date >= nowWithoutMinute);
            }

            //by default - 5 minutes
            if (query.IsEmpty)
            {
                var defaultLastTime = DateTime.UtcNow.AddMinutes(-5);
                data = data.Where(x => x.Date > defaultLastTime);
            }

            return(await Task.FromResult(data.Select(y => y.Value).ToList()));
        }
        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));
        }
        public async Task <IActionResult> Pull([FromJsonUri] MonitoringQuery query)
        {
            var result = await _monitoringStorage.PullAsync(query);

            return(Ok(result));
        }