diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2014-08-13 00:13:21 -0400 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2014-08-13 00:13:21 -0400 |
commit | cd1e2519140211253120d49c8457e34833c6a3e9 (patch) | |
tree | 57d8ea51e5f1c48d0bd5a95a458b76d0ce099fb7 /kamon-core/src/main | |
parent | 274c4203931addf82306f7595dbe504daf3a9c94 (diff) | |
download | Kamon-cd1e2519140211253120d49c8457e34833c6a3e9.tar.gz Kamon-cd1e2519140211253120d49c8457e34833c6a3e9.tar.bz2 Kamon-cd1e2519140211253120d49c8457e34833c6a3e9.zip |
= core: ensure that MinMaxCounters never record values bellow zero, fixes #71
Diffstat (limited to 'kamon-core/src/main')
-rw-r--r-- | kamon-core/src/main/java/kamon/jsr166/LongMaxUpdater.java | 6 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/metric/instrument/MinMaxCounter.scala | 17 |
2 files changed, 13 insertions, 10 deletions
diff --git a/kamon-core/src/main/java/kamon/jsr166/LongMaxUpdater.java b/kamon-core/src/main/java/kamon/jsr166/LongMaxUpdater.java index e4ba8807..fc9ea4e5 100644 --- a/kamon-core/src/main/java/kamon/jsr166/LongMaxUpdater.java +++ b/kamon-core/src/main/java/kamon/jsr166/LongMaxUpdater.java @@ -114,17 +114,17 @@ public class LongMaxUpdater extends Striped64 implements Serializable { * * @return the maximum */ - public long maxThenReset() { + public long maxThenReset(long newValue) { Cell[] as = cells; long max = base; - base = Long.MIN_VALUE; + base = newValue; if (as != null) { int n = as.length; for (int i = 0; i < n; ++i) { Cell a = as[i]; if (a != null) { long v = a.value; - a.value = Long.MIN_VALUE; + a.value = newValue; if (v > max) max = v; } diff --git a/kamon-core/src/main/scala/kamon/metric/instrument/MinMaxCounter.scala b/kamon-core/src/main/scala/kamon/metric/instrument/MinMaxCounter.scala index 13dea8fe..4882d2aa 100644 --- a/kamon-core/src/main/scala/kamon/metric/instrument/MinMaxCounter.scala +++ b/kamon-core/src/main/scala/kamon/metric/instrument/MinMaxCounter.scala @@ -33,6 +33,7 @@ trait MinMaxCounter extends MetricRecorder { def increment(times: Long): Unit def decrement() def decrement(times: Long) + def refreshValues(): Unit } object MinMaxCounter { @@ -95,19 +96,21 @@ class PaddedMinMaxCounter(underlyingHistogram: Histogram) extends MinMaxCounter def refreshValues(): Unit = { val currentValue = { val value = sum.get() - if (value < 0) 0 else value + if (value <= 0) 0 else value } val currentMin = { - val minAbs = abs(min.maxThenReset()) - if (minAbs <= currentValue) minAbs else 0 + val rawMin = min.maxThenReset(-currentValue) + if (rawMin >= 0) + 0 + else + abs(rawMin) } + val currentMax = max.maxThenReset(currentValue) + underlyingHistogram.record(currentValue) underlyingHistogram.record(currentMin) - underlyingHistogram.record(max.maxThenReset()) - - max.update(currentValue) - min.update(-currentValue) + underlyingHistogram.record(currentMax) } } |