Skip to content

Commit

Permalink
Bug fix: fix probability of metric lose
Browse files Browse the repository at this point in the history
  • Loading branch information
CarpenterLee authored and sczyh30 committed Sep 25, 2018
1 parent 00d2856 commit f5b09a1
Showing 1 changed file with 14 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -45,15 +49,21 @@ public Map<Long, MetricNode> metrics() {
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;
}
Expand Down

0 comments on commit f5b09a1

Please sign in to comment.