public IActionResult GetMetricsByPercentileFromAllCluster(
            [FromRoute] CpuMetricGetByIntervalForClusterRequest request,
            [FromRoute] Percentile percentile)
        {
            _logger.LogDebug("Вызов метода. Параметры:" +
                             $" {nameof(request.FromTime)} = {request.FromTime}" +
                             $" {nameof(request.ToTime)} = {request.ToTime}" +
                             $" {nameof(percentile)} = {percentile}");

            var agents = _agentRepository.GetAllAgentsInfo();

            var response = new AllMetricsResponse <CpuMetricDto>();

            foreach (var agent in agents.Agents)
            {
                var currentAgentMetrics = _repository.GetByTimeIntervalPercentile(agent.AgentId, request.FromTime, request.ToTime, percentile);

                foreach (var metric in currentAgentMetrics.Metrics)
                {
                    response.Metrics.Add(_mapper.Map <CpuMetricDto>(metric));
                }
            }

            return(Ok(response));
        }
Example #2
0
        public void GetMetricsByPercentileFromAllCluster_ReturnsOk()
        {
            //Arrange
            var request = new CpuMetricGetByIntervalForClusterRequest()
            {
                FromTime = DateTimeOffset.MinValue,
                ToTime   = DateTimeOffset.Now
            };
            var percentile = Percentile.P95;

            //фейковые данные об агентах
            var mockAgentsInfo = new AllAgentsInfo();

            mockAgentsInfo.Agents.Add(new AgentInfo()
            {
                AgentId = 1, AgentUri = "url1"
            });
            mockAgentsInfo.Agents.Add(new AgentInfo()
            {
                AgentId = 2, AgentUri = "url2"
            });

            mockAgentsRepository.
            Setup(repository => repository.GetAllAgentsInfo()).
            Returns(mockAgentsInfo);

            //фейковые метрики возвращаемые репозиторием дл¤ всех агентов
            var mockMetrics = new AllMetrics <CpuMetric>();

            mockMetrics.Metrics.Add(new CpuMetric()
            {
                AgentId = 1, Time = DateTimeOffset.MinValue, Value = 100
            });
            mockMetrics.Metrics.Add(new CpuMetric()
            {
                AgentId = 2, Time = DateTimeOffset.UtcNow, Value = 122
            });

            //фейковые метрики возвращаемые репозиторием дл¤ первого агента
            var mockMetricsForAgent_1 = new AllMetrics <CpuMetric>();

            mockMetricsForAgent_1.Metrics.Add(mockMetrics.Metrics[0]);
            //фейковые метрики возвращаемые репозиторием дл¤ второго агента
            var mockMetricsForAgent_2 = new AllMetrics <CpuMetric>();

            mockMetricsForAgent_2.Metrics.Add(mockMetrics.Metrics[1]);

            mockRepository.
            Setup(repository => repository.GetByTimeIntervalPercentile(
                      It.Is <int>(agentId => agentId == 1),
                      It.IsAny <DateTimeOffset>(),
                      It.IsAny <DateTimeOffset>(),
                      It.IsAny <Percentile>())).
            Returns(mockMetricsForAgent_1);
            mockRepository.
            Setup(repository => repository.GetByTimeIntervalPercentile(
                      It.Is <int>(agentId => agentId == 2),
                      It.IsAny <DateTimeOffset>(),
                      It.IsAny <DateTimeOffset>(),
                      It.IsAny <Percentile>())).
            Returns(mockMetricsForAgent_2);

            //Act
            var result = controller.GetMetricsByPercentileFromAllCluster(request, percentile);

            // Assert
            Assert.True(CompareMetricsContainers(result, mockMetrics));
        }