Bug fix: fix probability of metric lose

This commit is contained in:
Carpenter Lee 2018-09-16 21:13:06 +08:00
parent b1f33675c5
commit b5b3f6edee
1 changed files with 14 additions and 4 deletions

View File

@ -34,6 +34,10 @@ public class StatisticNode implements Node {
private transient Metric rollingCounterInSecond = new ArrayMetric(1000 / SampleCountProperty.sampleCount,
IntervalProperty.INTERVAL);
/**
* Holds statistics of the recent 120 seconds. The windowLengthInMs is deliberately set to 1000 milliseconds,
* meaning each bucket per second, in this way we can get accurate statistics of each second.
*/
private transient Metric rollingCounterInMinute = new ArrayMetric(1000, 2 * 60);
private AtomicInteger curThreadNum = new AtomicInteger(0);
@ -45,15 +49,21 @@ public class StatisticNode implements Node {
long currentTime = TimeUtil.currentTimeMillis();
currentTime = currentTime - currentTime % 1000;
Map<Long, MetricNode> metrics = new ConcurrentHashMap<Long, MetricNode>();
List<MetricNode> minutes = rollingCounterInMinute.details();
for (MetricNode node : minutes) {
List<MetricNode> nodesOfEverySecond = rollingCounterInMinute.details();
long newLastFetchTime = lastFetchTime;
for (MetricNode node : nodesOfEverySecond) {
if (node.getTimestamp() > lastFetchTime && node.getTimestamp() < currentTime) {
if (node.getPassedQps() != 0 || node.getBlockedQps() != 0) {
if (node.getPassedQps() != 0
|| node.getBlockedQps() != 0
|| node.getSuccessQps() != 0
|| node.getException() != 0
|| node.getRt() != 0) {
metrics.put(node.getTimestamp(), node);
lastFetchTime = node.getTimestamp();
newLastFetchTime = Math.max(newLastFetchTime, node.getTimestamp());
}
}
}
lastFetchTime = newLastFetchTime;
return metrics;
}