aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/Tracer.scala
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-05-26 15:29:41 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-05-26 15:29:41 +0200
commit1f5d9876dedb715ae1c31203ea4f15ebf031612c (patch)
tree9ae42e1aaac6cdb550e7707c9ae5a49048482109 /kamon-core/src/main/scala/kamon/trace/Tracer.scala
parenta3d78ef61a277b0b62dc93daf84756dfa7625d3d (diff)
downloadKamon-1f5d9876dedb715ae1c31203ea4f15ebf031612c.tar.gz
Kamon-1f5d9876dedb715ae1c31203ea4f15ebf031612c.tar.bz2
Kamon-1f5d9876dedb715ae1c31203ea4f15ebf031612c.zip
on the crazy path to a better Kamon :D
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/Tracer.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/Tracer.scala42
1 files changed, 33 insertions, 9 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Tracer.scala b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
index ed42b810..22e19ebc 100644
--- a/kamon-core/src/main/scala/kamon/trace/Tracer.scala
+++ b/kamon-core/src/main/scala/kamon/trace/Tracer.scala
@@ -2,19 +2,24 @@ package kamon.trace
import java.util.concurrent.ThreadLocalRandom
+import com.typesafe.config.Config
import com.typesafe.scalalogging.Logger
-import io.opentracing.propagation.{TextMap, Format}
+import io.opentracing.propagation.{Format, TextMap}
import io.opentracing.propagation.Format.Builtin.{BINARY, HTTP_HEADERS, TEXT_MAP}
import io.opentracing.util.ThreadLocalActiveSpanSource
import kamon.ReporterRegistryImpl
+import kamon.metric.MetricLookup
import kamon.util.Clock
-class Tracer(metrics: Any, reporterRegistry: ReporterRegistryImpl) extends io.opentracing.Tracer {
+
+
+
+class Tracer(metrics: MetricLookup, reporterRegistry: ReporterRegistryImpl) extends io.opentracing.Tracer {
private val logger = Logger(classOf[Tracer])
- ///private val metricsRecorder = new TracerMetricsRecorder(metrics.getRecorder(Entity("tracer", "tracer", Map.empty)))
+ private val tracerMetrics = new TracerMetrics(metrics)
private val activeSpanSource = new ThreadLocalActiveSpanSource()
- @volatile private var sampler: Sampler = Sampler.never
+ @volatile private var configuredSampler: Sampler = Sampler.never
@volatile private var textMapSpanContextCodec = SpanContextCodec.TextMap
@volatile private var httpHeaderSpanContextCodec = SpanContextCodec.ZipkinB3
@@ -22,8 +27,8 @@ class Tracer(metrics: Any, reporterRegistry: ReporterRegistryImpl) extends io.op
new SpanBuilder(operationName)
override def extract[C](format: Format[C], carrier: C): io.opentracing.SpanContext = format match {
- case HTTP_HEADERS => httpHeaderSpanContextCodec.extract(carrier.asInstanceOf[TextMap], sampler)
- case TEXT_MAP => textMapSpanContextCodec.extract(carrier.asInstanceOf[TextMap], sampler)
+ case HTTP_HEADERS => httpHeaderSpanContextCodec.extract(carrier.asInstanceOf[TextMap], configuredSampler)
+ case TEXT_MAP => textMapSpanContextCodec.extract(carrier.asInstanceOf[TextMap], configuredSampler)
case BINARY => null // TODO: Implement Binary Encoding
case _ => null
}
@@ -35,6 +40,9 @@ class Tracer(metrics: Any, reporterRegistry: ReporterRegistryImpl) extends io.op
case _ =>
}
+ def sampler: Sampler =
+ configuredSampler
+
override def activeSpan(): io.opentracing.ActiveSpan =
activeSpanSource.activeSpan()
@@ -114,15 +122,31 @@ class Tracer(metrics: Any, reporterRegistry: ReporterRegistryImpl) extends io.op
new SpanContext(parentContext.traceID, createID(), parentContext.spanID, parentContext.sampled, initialTags)
else {
val traceID = createID()
- new SpanContext(traceID, traceID, 0L, sampler.decide(traceID), initialTags)
+ new SpanContext(traceID, traceID, 0L, configuredSampler.decide(traceID), initialTags)
}
- //metricsRecorder.createdSpans.increment()
- new Span(spanContext, operationName, initialTags, startTimestampMicros, ???, reporterRegistry)
+ tracerMetrics.createdSpans.increment()
+ new Span(spanContext, operationName, initialTags, startTimestampMicros, metrics, reporterRegistry)
}
private def createID(): Long =
ThreadLocalRandom.current().nextLong()
}
+
+ private[kamon] def reconfigure(config: Config): Unit = synchronized {
+ val traceConfig = config.getConfig("kamon.trace")
+
+ configuredSampler = traceConfig.getString("sampler") match {
+ case "always" => Sampler.always
+ case "never" => Sampler.never
+ case "random" => Sampler.random(traceConfig.getDouble("sampler-random.chance"))
+ case other => sys.error(s"Unexpected sampler name $other.")
+ }
+ }
+
+ private final class TracerMetrics(metricLookup: MetricLookup) {
+ val createdSpans = metricLookup.counter("tracer.spans-created")
+ }
+
}