From 765b7e5d275b4896d413c2480738ce9b81712e81 Mon Sep 17 00:00:00 2001 From: Ivan Topolnak Date: Tue, 20 May 2014 17:46:32 -0300 Subject: + core: initial support for TraceLocal storage --- .../src/main/scala/kamon/trace/TraceLocal.scala | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 kamon-core/src/main/scala/kamon/trace/TraceLocal.scala (limited to 'kamon-core/src/main/scala/kamon/trace/TraceLocal.scala') 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]) +} -- cgit v1.2.3