aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala35
1 files changed, 35 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala b/kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala
new file mode 100644
index 00000000..4c6220ce
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/trace/SpanCustomizer.scala
@@ -0,0 +1,35 @@
+package kamon.trace
+
+import kamon.context.Key
+import kamon.trace.Tracer.SpanBuilder
+
+/**
+ * Allows users to customize and add additional information to Spans created by instrumentation. The typical use
+ * case for SpanCustomizer instances is to provide proper operation names in situations where the instrumentation
+ * is unable to generate a reasonable enough operation name, e.g. JDBC and HTTP Client calls, instead of having a
+ * default operation name using the statement type or target host a SpanCustomizer can be provided to assign operation
+ * names like "queryUsers" or "getUserProfile" instead.
+ *
+ * Instrumentation wanting to take advantage of SpanCustomizers should look for an instance in the current context
+ * using SpanCustomizer.ContextKey.
+ *
+ */
+trait SpanCustomizer {
+ def customize(spanBuilder: SpanBuilder): SpanBuilder
+}
+
+object SpanCustomizer {
+
+ val Noop = new SpanCustomizer {
+ override def customize(spanBuilder: SpanBuilder): SpanBuilder = spanBuilder
+ }
+
+ val ContextKey = Key.local[SpanCustomizer]("span-customizer", Noop)
+
+ def forOperationName(operationName: String): SpanCustomizer = new SpanCustomizer {
+ override def customize(spanBuilder: SpanBuilder): SpanBuilder =
+ spanBuilder.withOperationName(operationName)
+ }
+}
+
+