aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala
diff options
context:
space:
mode:
authorIvan Topolnak <ivantopo@gmail.com>2013-09-10 18:35:25 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-09-10 18:35:25 -0300
commit9382ce9d66b5d6bfef515cee56f40aa178920335 (patch)
tree0a9583fdd0ff44a5a086a89924f60a967c345f2f /kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala
parente457fb4d3b8535c27343c80c45fdbe7fa7a93dae (diff)
downloadKamon-9382ce9d66b5d6bfef515cee56f40aa178920335.tar.gz
Kamon-9382ce9d66b5d6bfef515cee56f40aa178920335.tar.bz2
Kamon-9382ce9d66b5d6bfef515cee56f40aa178920335.zip
Simple instrumentation just for keeping the uow.
Diffstat (limited to 'kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala41
1 files changed, 41 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala b/kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala
new file mode 100644
index 00000000..4e47c2a4
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/instrumentation/ActorInstrumentation.scala
@@ -0,0 +1,41 @@
+package kamon.instrumentation
+
+import akka.actor.{Props, ActorSystem, ActorRef}
+import akka.dispatch.{MessageDispatcher, Envelope}
+import kamon.{Tracer, TraceContext}
+import kamon.instrumentation.SimpleContextPassingInstrumentation.SimpleTraceMessage
+
+trait ActorInstrumentationConfiguration {
+ def sendMessageTransformation(from: ActorRef, to: ActorRef, message: Any): Any
+ def receiveInvokeInstrumentation(system: ActorSystem, self: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): ActorReceiveInvokeInstrumentation
+}
+
+
+trait ActorReceiveInvokeInstrumentation {
+ def preReceive(envelope: Envelope): (Envelope, Option[TraceContext])
+}
+
+object ActorReceiveInvokeInstrumentation {
+ val noopPreReceive = new ActorReceiveInvokeInstrumentation{
+ def preReceive(envelope: Envelope): (Envelope, Option[TraceContext]) = (envelope, None)
+ }
+}
+
+class SimpleContextPassingInstrumentation extends ActorInstrumentationConfiguration {
+ def sendMessageTransformation(from: ActorRef, to: ActorRef, message: Any): Any = SimpleTraceMessage(message, Tracer.context)
+
+ def receiveInvokeInstrumentation(system: ActorSystem, self: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): ActorReceiveInvokeInstrumentation = {
+ new ActorReceiveInvokeInstrumentation {
+ def preReceive(envelope: Envelope): (Envelope, Option[TraceContext]) = envelope match {
+ case env @ Envelope(SimpleTraceMessage(msg, ctx), _) => (env.copy(message = msg), ctx)
+ case anyOther => (anyOther, None)
+ }
+ }
+ }
+}
+
+object SimpleContextPassingInstrumentation {
+ case class SimpleTraceMessage(message: Any, context: Option[TraceContext])
+}
+
+