diff options
Diffstat (limited to 'kamon-core/src/main')
-rw-r--r-- | kamon-core/src/main/scala/kamon/util/DifferentialSource.scala | 24 |
1 files changed, 24 insertions, 0 deletions
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) +} |