aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kamon-core/src/main/resources/META-INF/aop.xml2
-rw-r--r--kamon-core/src/main/scala/kamon/Kamon.scala47
-rw-r--r--kamon-metrics/src/main/scala/kamon/Metrics.scala12
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/TraceContext.scala2
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/Tracer.scala33
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/UowTracing.scala (renamed from kamon-core/src/main/scala/kamon/trace/UowTracing.scala)13
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala (renamed from kamon-core/src/main/scala/kamon/instrumentation/RunnableInstrumentation.scala)20
-rw-r--r--project/Build.scala3
8 files changed, 59 insertions, 73 deletions
diff --git a/kamon-core/src/main/resources/META-INF/aop.xml b/kamon-core/src/main/resources/META-INF/aop.xml
index f13effb9..c63e17e5 100644
--- a/kamon-core/src/main/resources/META-INF/aop.xml
+++ b/kamon-core/src/main/resources/META-INF/aop.xml
@@ -9,7 +9,7 @@
<aspect name="kamon.instrumentation.EnvelopeTracingContext"/>
<aspect name="kamon.instrumentation.ActorCellInvokeInstrumentation"/>
- <aspect name="kamon.instrumentation.RunnableInstrumentation" />
+ <aspect name="kamon.trace.instrumentation.RunnableTracing" />
<aspect name="kamon.instrumentation.SprayRequestContextTracing"/>
<aspect name="kamon.instrumentation.SprayOpenRequestContextTracing"/>
<aspect name = "kamon.instrumentation.SprayServerInstrumentation"/>
diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala
index 75ef1efe..8c934f60 100644
--- a/kamon-core/src/main/scala/kamon/Kamon.scala
+++ b/kamon-core/src/main/scala/kamon/Kamon.scala
@@ -20,53 +20,6 @@ object Kamon {
def apply[T <: Extension](key: ExtensionId[T])(implicit system: ActorSystem): ActorRef = key(system).manager
-
-
-
-
-
-
implicit lazy val actorSystem = ActorSystem("kamon")
-
- object Metric {
-
- val actorSystems = TrieMap.empty[String, ActorSystemMetrics]
-
- def actorSystemNames: List[String] = actorSystems.keys.toList
- def registerActorSystem(name: String) = actorSystems.getOrElseUpdate(name, ActorSystemMetrics(name))
-
- def actorSystem(name: String): Option[ActorSystemMetrics] = actorSystems.get(name)
- }
-
- //val metricManager = actorSystem.actorOf(Props[MetricManager], "metric-manager")
- //val newrelicReporter = actorSystem.actorOf(Props[NewrelicReporterActor], "newrelic-reporter")
-
-}
-
-
-class MetricManager extends Actor {
- implicit val ec = context.system.dispatcher
-
- def receive = {
- case RegisterForAllDispatchers(frequency) => {
- val subscriber = sender
- context.system.scheduler.schedule(frequency, frequency) {
- Kamon.Metric.actorSystems.foreach {
- case (asName, actorSystemMetrics) => actorSystemMetrics.dispatchers.foreach {
- case (dispatcherName, dispatcherMetrics) => {
- val activeThreads = dispatcherMetrics.activeThreadCount.snapshot
- val poolSize = dispatcherMetrics.poolSize.snapshot
- val queueSize = dispatcherMetrics.queueSize.snapshot
-
- subscriber ! DispatcherMetrics(asName, dispatcherName, activeThreads, poolSize, queueSize)
-
- }
- }
- }
- }
- }
- }
}
-case class RegisterForAllDispatchers(frequency: FiniteDuration)
-case class DispatcherMetrics(actorSystem: String, dispatcher: String, activeThreads: HistogramSnapshot, poolSize: HistogramSnapshot, queueSize: HistogramSnapshot)
diff --git a/kamon-metrics/src/main/scala/kamon/Metrics.scala b/kamon-metrics/src/main/scala/kamon/Metrics.scala
index 355c67c7..c3aedfd4 100644
--- a/kamon-metrics/src/main/scala/kamon/Metrics.scala
+++ b/kamon-metrics/src/main/scala/kamon/Metrics.scala
@@ -6,15 +6,17 @@ import akka.actor.{ActorRef, ExtendedActorSystem, ExtensionIdProvider, Extension
import kamon.Kamon.Extension
import akka.actor
-class MetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension {
- def manager: ActorRef = ???
-}
-
object Metrics extends ExtensionId[MetricsExtension] with ExtensionIdProvider {
def lookup(): ExtensionId[_ <: actor.Extension] = Metrics
def createExtension(system: ExtendedActorSystem): Extension = new MetricsExtension(system)
- val registry = new MetricRegistry
+}
+class MetricsExtension(system: ExtendedActorSystem) extends Kamon.Extension {
+ def manager: ActorRef = ???
}
+
+
+
+
diff --git a/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
index 78db911d..c3f1f2c2 100644
--- a/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
@@ -9,8 +9,6 @@ import scala.concurrent.duration._
case class TraceContext(id: Long, tracer: ActorRef, uow: String = "", userContext: Option[Any] = None)
object TraceContext {
- val reporter = Kamon.actorSystem.actorOf(Props[NewRelicReporting])
- val traceIdCounter = new AtomicLong
def apply()(implicit system: ActorSystem) = {
val n = traceIdCounter.incrementAndGet()
diff --git a/kamon-trace/src/main/scala/kamon/trace/Tracer.scala b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
index e64cfaa6..4ea89850 100644
--- a/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
@@ -1,7 +1,40 @@
package kamon.trace
+import kamon.Kamon
import scala.util.DynamicVariable
+import akka.actor._
+import scala.Some
+import kamon.trace.Trace.Register
+import scala.concurrent.duration._
+object Trace extends ExtensionId[TraceExtension] with ExtensionIdProvider {
+ def lookup(): ExtensionId[_ <: Extension] = Trace
+ def createExtension(system: ExtendedActorSystem): TraceExtension = new TraceExtension(system)
+
+
+ /*** Protocol */
+ case object Register
+}
+
+class TraceExtension(system: ExtendedActorSystem) extends Kamon.Extension {
+ def manager: ActorRef = ???
+}
+
+class TraceManager extends Actor {
+ var listeners: Seq[ActorRef] = Seq.empty
+
+ def receive = {
+ case Register => listeners = sender +: listeners
+ case segment: UowSegment =>
+ context.child(segment.id.toString) match {
+ case Some(agreggator) => agreggator ! segment
+ case None => context.actorOf(UowTraceAggregator.props(self, 30 seconds))
+ }
+
+ case trace: UowTrace =>
+ listeners foreach(_ ! trace)
+ }
+}
object Tracer {
diff --git a/kamon-core/src/main/scala/kamon/trace/UowTracing.scala b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
index b09478cc..c7dd1fb1 100644
--- a/kamon-core/src/main/scala/kamon/trace/UowTracing.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
@@ -5,6 +5,7 @@ import scala.concurrent.duration.Duration
import kamon.trace.UowTracing._
sealed trait UowSegment {
+ def id: Long
def timestamp: Long
}
@@ -13,12 +14,12 @@ trait AutoTimestamp extends UowSegment {
}
object UowTracing {
- case class Start() extends AutoTimestamp
- case class Finish() extends AutoTimestamp
- case class Rename(name: String) extends AutoTimestamp
+ case class Start(id: Long) extends AutoTimestamp
+ case class Finish(id: Long) extends AutoTimestamp
+ case class Rename(id: Long, name: String) extends AutoTimestamp
case class WebExternalStart(id: Long, host: String) extends AutoTimestamp
case class WebExternalFinish(id: Long) extends AutoTimestamp
- case class WebExternal(start: Long, finish: Long, host: String) extends AutoTimestamp
+ case class WebExternal(id: Long, start: Long, finish: Long, host: String) extends AutoTimestamp
}
case class UowTrace(name: String, segments: Seq[UowSegment])
@@ -36,9 +37,9 @@ class UowTraceAggregator(reporting: ActorRef, aggregationTimeout: Duration) exte
case finish: Finish => segments = segments :+ finish; finishTracing()
case wes: WebExternalStart => pendingExternal = pendingExternal :+ wes
case finish @ WebExternalFinish(id) => pendingExternal.find(_.id == id).map(start => {
- segments = segments :+ WebExternal(start.timestamp, finish.timestamp, start.host)
+ segments = segments :+ WebExternal(finish.id, start.timestamp, finish.timestamp, start.host)
})
- case Rename(newName) => name = Some(newName)
+ case Rename(id, newName) => name = Some(newName)
case segment: UowSegment => segments = segments :+ segment
case ReceiveTimeout =>
log.warning("Transaction {} did not complete properly, the recorded segments are: {}", name, segments)
diff --git a/kamon-core/src/main/scala/kamon/instrumentation/RunnableInstrumentation.scala b/kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala
index 2be6e5d1..236fd4fc 100644
--- a/kamon-core/src/main/scala/kamon/instrumentation/RunnableInstrumentation.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/instrumentation/RunnableTracing.scala
@@ -1,21 +1,11 @@
-package kamon.instrumentation
+package kamon.trace.instrumentation
import org.aspectj.lang.annotation._
-import kamon.{Tracer}
import org.aspectj.lang.ProceedingJoinPoint
-import scala.Some
import kamon.trace.TraceContext
-/**
- * Marker interface, just to make sure we don't instrument all the Runnables in the classpath.
- */
-trait TraceContextAwareRunnable {
- def traceContext: Option[TraceContext]
-}
-
-
@Aspect
-class RunnableInstrumentation {
+class RunnableTracing {
/**
* These are the Runnables that need to be instrumented and make the TraceContext available
@@ -57,3 +47,9 @@ class RunnableInstrumentation {
}
+/**
+ * Marker interface, just to make sure we don't instrument all the Runnables in the classpath.
+ */
+trait TraceContextAwareRunnable {
+ def traceContext: Option[TraceContext]
+} \ No newline at end of file
diff --git a/project/Build.scala b/project/Build.scala
index a874302f..acdd1791 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -30,6 +30,7 @@ object Build extends Build {
libraryDependencies ++=
compile(akkaActor, aspectJ) ++
test(scalatest, akkaTestKit, sprayTestkit))
+ .dependsOn(kamonCore)
lazy val kamonMetrics = Project("kamon-metrics", file("kamon-metrics"))
.settings(basicSettings: _*)
@@ -48,6 +49,7 @@ object Build extends Build {
libraryDependencies ++=
compile(akkaActor, aspectJ, sprayCan, sprayClient, sprayRouting) ++
test(scalatest, akkaTestKit, sprayTestkit))
+ .dependsOn(kamonTrace)
lazy val kamonNewrelic = Project("kamon-newrelic", file("kamon-newrelic"))
@@ -57,6 +59,7 @@ object Build extends Build {
libraryDependencies ++=
compile(aspectJ, sprayCan, sprayClient, sprayRouting, newrelic) ++
test(scalatest, akkaTestKit, sprayTestkit))
+ .dependsOn(kamonTrace)
lazy val kamonPlayground = Project("kamon-playground", file("kamon-playground"))
.settings(basicSettings: _*)