aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/Span.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/Span.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/Span.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/Span.scala74
1 files changed, 35 insertions, 39 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Span.scala b/kamon-core/src/main/scala/kamon/trace/Span.scala
index e64d8118..635f9545 100644
--- a/kamon-core/src/main/scala/kamon/trace/Span.scala
+++ b/kamon-core/src/main/scala/kamon/trace/Span.scala
@@ -1,32 +1,13 @@
package kamon
package trace
-import scala.collection.JavaConverters._
-import kamon.util.Clock
-
-object Span {
- val MetricCategory = "span"
- val LatencyMetricName = "elapsed-time"
- val ErrorMetricName = "error"
- val MetricTagPrefix = "metric."
- val BooleanTagTrueValue = "1"
- val BooleanTagFalseValue = "0"
-
- case class LogEntry(timestamp: Long, fields: Map[String, _])
-
- case class CompletedSpan(
- context: SpanContext,
- operationName: String,
- startTimestampMicros: Long,
- endTimestampMicros: Long,
- tags: Map[String, String],
- logs: Seq[LogEntry]
- )
-}
+import kamon.metric.MetricLookup
+import scala.collection.JavaConverters._
+import kamon.util.{Clock, MeasurementUnit}
class Span(spanContext: SpanContext, initialOperationName: String, initialTags: Map[String, String], startTimestampMicros: Long,
- recorderRegistry: Any, reporterRegistry: ReporterRegistryImpl) extends io.opentracing.Span {
+ metrics: MetricLookup, reporterRegistry: ReporterRegistryImpl) extends io.opentracing.Span {
private var isOpen: Boolean = true
private val sampled: Boolean = spanContext.sampled
@@ -35,7 +16,7 @@ class Span(spanContext: SpanContext, initialOperationName: String, initialTags:
private var tags = initialTags
private var logs = List.empty[Span.LogEntry]
- private var metricTags = Map.empty[String, String]
+ private var additionalMetricTags = Map.empty[String, String]
override def log(fields: java.util.Map[String, _]): Span =
@@ -117,7 +98,7 @@ class Span(spanContext: SpanContext, initialOperationName: String, initialTags:
def setMetricTag(key: String, value: String): Span = synchronized {
if (isOpen)
- metricTags = metricTags ++ Map(key -> value)
+ additionalMetricTags = additionalMetricTags ++ Map(key -> value)
this
}
@@ -135,7 +116,7 @@ class Span(spanContext: SpanContext, initialOperationName: String, initialTags:
private def extractMetricTag(tag: String, value: String): Unit =
if(tag.startsWith(Span.MetricTagPrefix))
- metricTags = metricTags ++ Map(tag.substring(Span.MetricTagPrefix.length) -> value)
+ additionalMetricTags = additionalMetricTags ++ Map(tag.substring(Span.MetricTagPrefix.length) -> value)
override def finish(): Unit =
finish(Clock.microTimestamp())
@@ -153,17 +134,32 @@ class Span(spanContext: SpanContext, initialOperationName: String, initialTags:
private def recordSpanMetrics(): Unit = {
val elapsedTime = endTimestampMicros - startTimestampMicros
-// val entity = Entity(operationName, Span.MetricCategory, metricTags)
-// val recorder = recorderRegistry.getRecorder(entity)
-
-// recorder
-// .histogram(Span.LatencyMetricName, MeasurementUnit.time.microseconds, DynamicRange.Default)
-// .record(elapsedTime)
-//
-// tags.get("error").foreach { errorTag =>
-// if(errorTag != null && errorTag.equals(Span.BooleanTagTrueValue)) {
-// recorder.counter(Span.ErrorMetricName).increment()
-// }
-// }
+ val metricTags = Map("operation" -> operationName) ++ additionalMetricTags
+
+ val latencyHistogram = metrics.histogram("span.processing-time", MeasurementUnit.time.microseconds, metricTags)
+ latencyHistogram.record(elapsedTime)
+
+ tags.get("error").foreach { errorTag =>
+ if(errorTag != null && errorTag.equals(Span.BooleanTagTrueValue)) {
+ metrics.counter("span.errors", MeasurementUnit.none, metricTags).increment()
+ }
+ }
}
-} \ No newline at end of file
+}
+
+object Span {
+ val MetricTagPrefix = "metric."
+ val BooleanTagTrueValue = "1"
+ val BooleanTagFalseValue = "0"
+
+ case class LogEntry(timestamp: Long, fields: Map[String, _])
+
+ case class CompletedSpan(
+ context: SpanContext,
+ operationName: String,
+ startTimestampMicros: Long,
+ endTimestampMicros: Long,
+ tags: Map[String, String],
+ logs: Seq[LogEntry]
+ )
+}