diff --git a/src/taoensso/telemere/impl.cljc b/src/taoensso/telemere/impl.cljc index db0006d..fd07fe7 100644 --- a/src/taoensso/telemere/impl.cljc +++ b/src/taoensso/telemere/impl.cljc @@ -3,6 +3,7 @@ Signal design shared by: Telemere, Tufte, Timbre." (:refer-clojure :exclude [binding]) (:require + [clojure.set :as set] [taoensso.encore :as enc :refer [binding have have?]] [taoensso.encore.signals :as sigs]) @@ -192,9 +193,10 @@ (do (enc/def-print-impl [sig Signal] (str "#" `Signal (pr-str (into {} sig))))) #?(:clj (enc/def-print-dup [sig Signal] (str "#" `Signal (pr-str (into {} sig))))) ; NB intentionally verbose, to support extra keys +(def impl-signal-keys #{:_otel-context}) (def standard-signal-keys - (disj (set (keys (map->Signal {:schema 0}))) - :_otel-context)) + (set/difference (set (keys (map->Signal {:schema 0}))) + impl-signal-keys)) (comment (def s1 (with-signal (signal! {:level :info, :my-k1 :my-v1}))) diff --git a/src/taoensso/telemere/open_telemetry.clj b/src/taoensso/telemere/open_telemetry.clj index 691d4f1..880b0b4 100644 --- a/src/taoensso/telemere/open_telemetry.clj +++ b/src/taoensso/telemere/open_telemetry.clj @@ -14,7 +14,7 @@ [io.opentelemetry.context Context] [io.opentelemetry.api.common AttributesBuilder Attributes] [io.opentelemetry.api.logs LoggerProvider Severity] - [io.opentelemetry.api.trace TracerProvider Tracer Span] + [io.opentelemetry.api.trace TracerProvider Tracer Span SpanContext] [java.util.concurrent CountDownLatch])) (comment @@ -139,13 +139,12 @@ ;;;; Spans +#_ (defn- remote-span-context "Returns new remote `io.opentelemetry.api.trace.SpanContext` for use as `start-span` parent." - ^io.opentelemetry.api.trace.SpanContext - [^String trace-id ^String span-id sampled? ?trace-state] - (io.opentelemetry.api.trace.SpanContext/createFromRemoteParent - trace-id span-id + ^SpanContext [^String trace-id ^String span-id sampled? ?trace-state] + (SpanContext/createFromRemoteParent trace-id span-id (if sampled? (io.opentelemetry.api.trace.TraceFlags/getSampled) (io.opentelemetry.api.trace.TraceFlags/getDefault)) @@ -175,15 +174,8 @@ (enc/if-not [parent ?parent] (.setParent sb context) ; Base (callsite) context (cond - ;; Local parent span, etc. - (instance? Span parent) (.setParent sb (.with context ^Span parent)) - - ;; Remote parent context, etc. - (instance? io.opentelemetry.api.trace.SpanContext parent) - (.setParent sb - (.with context - (Span/wrap ^io.opentelemetry.api.trace.SpanContext parent))) - + (instance? Span parent) (.setParent sb (.with context ^Span parent)) ; Local parent span, etc. + (instance? SpanContext parent) (.setParent sb (.with context (Span/wrap ^SpanContext parent))) ; Remote parent context, etc. :else (enc/unexpected-arg! parent {:context `start-span @@ -222,13 +214,8 @@ (comment (enc/qb 1e6 (span-attrs "uid1" {:ns "ns1" :line 495}))) ; 101.36 -(def ^:private ^String span-name - (enc/fmemoize - (fn [id] - #_(if id (str id) ":telemere/nil-id") - (if id (enc/as-qname id) "telemere/nil-id")))) - -(comment (enc/qb 1e6 (span-name :foo/bar))) ; 46.09 +(def ^:private ^String span-name (enc/fmemoize (fn [id] (if id (enc/as-qname id) "telemere/nil-id")))) +(comment (enc/qb 1e6 (span-name :foo/bar))) ; 46.09 (defn- handle-tracing! "Experimental! Takes care of relevant signal `Span` management. diff --git a/src/taoensso/telemere/utils.cljc b/src/taoensso/telemere/utils.cljc index 72b5dd6..0f9af35 100644 --- a/src/taoensso/telemere/utils.cljc +++ b/src/taoensso/telemere/utils.cljc @@ -700,6 +700,9 @@ :file (if incl-file? (assoc!* m k v) m) :thread (if incl-thread? (assoc!* m k v) m) + (clojure.core/into () + taoensso.telemere.impl/impl-signal-keys) m ; noop + (clojure.core/into () (clojure.core/disj taoensso.telemere.impl/standard-signal-keys