aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/Sampler.scala
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-05-23 19:06:32 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-05-23 19:06:32 +0200
commit22379d3f318b2cd3a4c995ff1c45bda33d935a46 (patch)
tree7c47e99a9b6fd89ce3e2d4efa85c5ca17c2d3db4 /kamon-core/src/main/scala/kamon/trace/Sampler.scala
parent2ba647d87e1bb09a4f70eb8c1d5c67af050525ce (diff)
downloadKamon-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.scala27
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
+ }
}