Ejemplo n.º 1
0
        public IActionResult GetTopicTotalOffsetRate(string clusterId, string topicId, string consumerId,
                                                     string duration = "1m")
        {
            var durationTimeSpan = DurationStringParser.Parse(duration);

            if (durationTimeSpan <= TimeSpan.Zero)
            {
                return(BadRequest("Invalid time duration specified"));
            }

            using (var topic = _configuration.BuildTopicConsumerWrapper(clusterId, topicId, consumerId))
            {
                if (topic == null)
                {
                    return(NotFound());
                }

                // Calculate the committed value to add a sample
                topic.GetTotalCommitted();

                var utcNow = DateTime.UtcNow;
                var rate   = topic
                             .GetTotalCommittedRateCalculator()
                             .CalculateRateAverage(utcNow - durationTimeSpan, utcNow);

                return(Ok(rate));
            }
        }
Ejemplo n.º 2
0
        public IActionResult GetConsumerTotalRelativeLag(string clusterId, string topicId, string consumerId,
                                                         string duration = "1m")
        {
            var durationTimeSpan = DurationStringParser.Parse(duration);

            if (durationTimeSpan <= TimeSpan.Zero)
            {
                return(BadRequest("Invalid time duration specified"));
            }

            using (var topic = _configuration.BuildTopicConsumerWrapper(clusterId, topicId, consumerId))
            {
                if (topic == null)
                {
                    return(NotFound());
                }

                var rateCalculator = topic.GetTotalCommittedRateCalculator();
                if (rateCalculator.SampleCount <= 0)
                {
                    topic.GetTotalCommitted();
                    Thread.Sleep(8000);
                }

                var totalCommit = topic.GetTotalCommitted();
                var utcNow      = DateTime.UtcNow;
                var rate        = rateCalculator.CalculateRateAverage(utcNow - durationTimeSpan, utcNow);

                if (Math.Abs(rate) < 0.01)
                {
                    Thread.Sleep(8000);
                    totalCommit = topic.GetTotalCommitted();
                    utcNow      = DateTime.UtcNow;
                    rate        = rateCalculator.CalculateRateAverage(utcNow - durationTimeSpan, utcNow);
                }

                var totalMaxOffets = topic.GetTotalHighOffsets();
                var lag            = totalMaxOffets - totalCommit;

                if (lag == 0)
                {
                    return(Ok((double)0));
                }

                var result = (Math.Abs(rate) < 0.01 ? 1440 : lag / rate) * 60;

                return(Ok(result));
            }
        }