aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main
diff options
context:
space:
mode:
authorIvan Topolnak <itopolnak@despegar.com>2014-05-20 17:46:32 -0300
committerIvan Topolnak <itopolnak@despegar.com>2014-05-20 17:46:32 -0300
commit765b7e5d275b4896d413c2480738ce9b81712e81 (patch)
tree3aecefb8951370b7b2f508bf7a402ec3a61210cd /kamon-core/src/main
parentc4b8ecb87381abe8224c247d399fd2a2bdd0372c (diff)
downloadKamon-765b7e5d275b4896d413c2480738ce9b81712e81.tar.gz
Kamon-765b7e5d275b4896d413c2480738ce9b81712e81.tar.bz2
Kamon-765b7e5d275b4896d413c2480738ce9b81712e81.zip
+ core: initial support for TraceLocal storage
Diffstat (limited to 'kamon-core/src/main')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/TraceContext.scala2
-rw-r--r--kamon-core/src/main/scala/kamon/trace/TraceLocal.scala25
2 files changed, 27 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala
index 9980a022..307cf17a 100644
--- a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala
+++ b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala
@@ -32,6 +32,8 @@ trait TraceContext {
def levelOfDetail: TracingLevelOfDetail
def startSegment(identity: SegmentIdentity, metadata: Map[String, String]): SegmentCompletionHandle
def finish(metadata: Map[String, String])
+
+ private[kamon] val traceLocalStorage: TraceLocalStorage = new TraceLocalStorage
}
object TraceContext {
diff --git a/kamon-core/src/main/scala/kamon/trace/TraceLocal.scala b/kamon-core/src/main/scala/kamon/trace/TraceLocal.scala
new file mode 100644
index 00000000..c79fa632
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/trace/TraceLocal.scala
@@ -0,0 +1,25 @@
+package kamon.trace
+
+import scala.collection.concurrent.TrieMap
+import kamon.trace.TraceLocal.TraceLocalKey
+
+object TraceLocal {
+ trait TraceLocalKey {
+ type ValueType
+ }
+
+ def store(key: TraceLocalKey)(value: key.ValueType): Unit =
+ TraceRecorder.currentContext.map(_.traceLocalStorage.store(key)(value))
+
+ def retrieve(key: TraceLocalKey): Option[key.ValueType] =
+ TraceRecorder.currentContext.flatMap(_.traceLocalStorage.retrieve(key))
+
+}
+
+class TraceLocalStorage {
+ val underlyingStorage = TrieMap[TraceLocal.TraceLocalKey, Any]()
+
+ def store(key: TraceLocalKey)(value: key.ValueType): Unit = underlyingStorage.put(key, value)
+
+ def retrieve(key: TraceLocalKey): Option[key.ValueType] = underlyingStorage.get(key).map(_.asInstanceOf[key.ValueType])
+}