From ead4fd7743895ffe1d34e37c23eceab575fb907e Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Fri, 15 Sep 2017 02:49:36 +0200 Subject: create new DifferentialSource utility --- .../main/scala/kamon/util/DifferentialSource.scala | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 kamon-core/src/main/scala/kamon/util/DifferentialSource.scala (limited to 'kamon-core') diff --git a/kamon-core/src/main/scala/kamon/util/DifferentialSource.scala b/kamon-core/src/main/scala/kamon/util/DifferentialSource.scala new file mode 100644 index 00000000..f2c621b0 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/util/DifferentialSource.scala @@ -0,0 +1,24 @@ +package kamon.util + +/** + * Keeps track of the values produced by the source and produce the difference between the last two observed values + * when calling get. This class assumes the source increases monotonically and any produced value that violates this + * assumption will be dropped. + * + */ +class DifferentialSource(source: () => Long) { + private var previousValue = source() + + def get(): Long = synchronized { + val currentValue = source() + val diff = currentValue - previousValue + previousValue = currentValue + + if(diff < 0) 0 else diff + } +} + +object DifferentialSource { + def apply(source: () => Long): DifferentialSource = + new DifferentialSource(source) +} -- cgit v1.2.3