diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-05-23 19:06:32 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-05-23 19:06:32 +0200 |
commit | 22379d3f318b2cd3a4c995ff1c45bda33d935a46 (patch) | |
tree | 7c47e99a9b6fd89ce3e2d4efa85c5ca17c2d3db4 /kamon-core/src/main/scala/kamon/trace/Sampler.scala | |
parent | 2ba647d87e1bb09a4f70eb8c1d5c67af050525ce (diff) | |
download | Kamon-22379d3f318b2cd3a4c995ff1c45bda33d935a46.tar.gz Kamon-22379d3f318b2cd3a4c995ff1c45bda33d935a46.tar.bz2 Kamon-22379d3f318b2cd3a4c995ff1c45bda33d935a46.zip |
get some basic sampling going
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/Sampler.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Sampler.scala | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Sampler.scala b/kamon-core/src/main/scala/kamon/trace/Sampler.scala index a26e61be..491cf358 100644 --- a/kamon-core/src/main/scala/kamon/trace/Sampler.scala +++ b/kamon-core/src/main/scala/kamon/trace/Sampler.scala @@ -1,5 +1,32 @@ package kamon.trace trait Sampler { + def decide(spanID: Long): Boolean +} + +object Sampler { + val always = new Constant(true) + val never = new Constant(false) + + def random(chance: Double): Sampler = { + assert(chance >= 0D && chance <= 1.0D, "Change should be >= 0 and <= 1.0") + + chance match { + case 0D => never + case 1.0D => always + case anyOther => new Random(anyOther) + } + } + + class Constant(decision: Boolean) extends Sampler { + override def decide(spanID: Long): Boolean = decision + } + + class Random(chance: Double) extends Sampler { + val upperBoundary = Long.MaxValue * chance + val lowerBoundary = -upperBoundary + override def decide(spanID: Long): Boolean = + spanID >= lowerBoundary && spanID <= upperBoundary + } } |