aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/TracerExtensionSettings.scala
blob: e6c2d3efc3eb03f052c28fed14ad9fc610ef2f3b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package kamon.trace

import java.util.concurrent.TimeUnit

import akka.actor.ActorSystem

case class TraceSettings(levelOfDetail: LevelOfDetail, sampler: Sampler)

object TraceSettings {
  def apply(system: ActorSystem): TraceSettings = {
    val tracerConfig = system.settings.config.getConfig("kamon.trace")

    val detailLevel: LevelOfDetail = tracerConfig.getString("level-of-detail") match {
      case "metrics-only"  LevelOfDetail.MetricsOnly
      case "simple-trace"  LevelOfDetail.SimpleTrace
      case other           sys.error(s"Unknown tracer level of detail [$other] present in the configuration file.")
    }

    val sampler: Sampler =
      if (detailLevel == LevelOfDetail.MetricsOnly) NoSampling
      else tracerConfig.getString("sampling") match {
        case "all"        SampleAll
        case "random"     new RandomSampler(tracerConfig.getInt("random-sampler.chance"))
        case "ordered"    new OrderedSampler(tracerConfig.getInt("ordered-sampler.interval"))
        case "threshold"  new ThresholdSampler(tracerConfig.getDuration("threshold-sampler.minimum-elapsed-time", TimeUnit.NANOSECONDS))
      }

    TraceSettings(detailLevel, sampler)
  }
}