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)); } }
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)); } }