diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-15 00:06:26 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-15 00:06:26 +0200 |
commit | 6721d325d018756296213ac8f9129bc304a21afb (patch) | |
tree | e08a5ce92802f521be228beae0ddb4ef258d0066 /kamon-core/src/main/scala/kamon/trace/Sampler.scala | |
parent | ac3b72e27765ceec4cc3958b0fa7eaba0299f017 (diff) | |
parent | a949c875684d78818224cd2ca7aaf79aa7878724 (diff) | |
download | Kamon-6721d325d018756296213ac8f9129bc304a21afb.tar.gz Kamon-6721d325d018756296213ac8f9129bc304a21afb.tar.bz2 Kamon-6721d325d018756296213ac8f9129bc304a21afb.zip |
Merge remote-tracking branch 'ivantopo/wip/moving-ot-support-to-a-separeate-project' into kamon-1.0-develop
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/Sampler.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Sampler.scala | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Sampler.scala b/kamon-core/src/main/scala/kamon/trace/Sampler.scala index 0347a151..3f366175 100644 --- a/kamon-core/src/main/scala/kamon/trace/Sampler.scala +++ b/kamon-core/src/main/scala/kamon/trace/Sampler.scala @@ -15,39 +15,44 @@ package kamon.trace +import java.util.concurrent.ThreadLocalRandom +import kamon.trace.SpanContext.SamplingDecision + trait Sampler { - def decide(spanID: Long): Boolean + def decide(operationName: String, builderTags: Map[String, Span.TagValue]): SamplingDecision } object Sampler { - val always = new Constant(true) - val never = new Constant(false) + val Always = new Constant(SamplingDecision.Sample) + val Never = new Constant(SamplingDecision.DoNotSample) - def random(chance: Double): Sampler = { - assert(chance >= 0D && chance <= 1.0D, "Change should be >= 0 and <= 1.0") + def random(probability: Double): Sampler = { + assert(probability >= 0D && probability <= 1.0D, "The probability should be >= 0 and <= 1.0") - chance match { - case 0D => never - case 1.0D => always + probability 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 Constant(decision: SamplingDecision) extends Sampler { + override def decide(operationName: String, builderTags: Map[String, Span.TagValue]): SamplingDecision = decision override def toString: String = s"Sampler.Constant(decision = $decision)" } - class Random(chance: Double) extends Sampler { - val upperBoundary = Long.MaxValue * chance + class Random(probability: Double) extends Sampler { + val upperBoundary = Long.MaxValue * probability val lowerBoundary = -upperBoundary - override def decide(spanID: Long): Boolean = - spanID >= lowerBoundary && spanID <= upperBoundary + override def decide(operationName: String, builderTags: Map[String, Span.TagValue]): SamplingDecision = { + val random = ThreadLocalRandom.current().nextLong() + if(random >= lowerBoundary && random <= upperBoundary) SamplingDecision.Sample else SamplingDecision.DoNotSample + } override def toString: String = - s"Sampler.Random(chance = $chance)" + s"Sampler.Random(probability = $probability)" } } |