hs-opentelemetry-api 0.3.0.0 → 0.3.1.0
raw patch · 6 files changed
+76/−2 lines, 6 files
Files
- ChangeLog.md +5/−0
- hs-opentelemetry-api.cabal +2/−1
- src/OpenTelemetry/Internal/Trace/Id.hs +1/−1
- src/OpenTelemetry/Trace/Core.hs +16/−0
- test/OpenTelemetry/Trace/TracerSpec.hs +50/−0
- test/Spec.hs +2/−0
ChangeLog.md view
@@ -2,6 +2,11 @@ ## Unreleased +## 0.3.1.0++- Add `tracerIsEnabled` function to check if a Tracer is enabled (helps avoid expensive operations when tracing is disabled)+- Fix `spanIdBaseEncodedByteString` error message+ ## 0.3.0.0 - Export `fromList` from `OpenTelemetry.Trace.TraceState` for creating TraceState from key-value pairs
hs-opentelemetry-api.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: hs-opentelemetry-api-version: 0.3.0.0+version: 0.3.1.0 synopsis: OpenTelemetry API for use by libraries for direct instrumentation or wrapper packages. description: Please see the README on GitHub at <https://github.com/iand675/hs-opentelemetry/tree/main/api#readme> category: OpenTelemetry, Telemetry, Monitoring, Observability, Metrics@@ -120,6 +120,7 @@ OpenTelemetry.SemanticsConfigSpec OpenTelemetry.Trace.SamplerSpec OpenTelemetry.Trace.TraceFlagsSpec+ OpenTelemetry.Trace.TracerSpec Paths_hs_opentelemetry_api hs-source-dirs: test
src/OpenTelemetry/Internal/Trace/Id.hs view
@@ -153,7 +153,7 @@ bytesToTraceId bs = if BS.length bs == 16 then Right $ TraceId $ toShort bs- else Left "bytesToTraceId: TraceId must be 8 bytes long"+ else Left "bytesToTraceId: TraceId must be 16 bytes long" {- | Convert a 'ByteString' of a specified base-encoding into a 'TraceId'.
src/OpenTelemetry/Trace/Core.hs view
@@ -60,6 +60,7 @@ -- * @Tracer@ operations Tracer, tracerName,+ tracerIsEnabled, HasTracer (..), makeTracer, getTracer,@@ -878,6 +879,21 @@ getTracerTracerProvider :: Tracer -> TracerProvider getTracerTracerProvider = tracerProvider+++{- | Check if the 'Tracer' is enabled.++ This function helps users avoid performing computationally expensive operations+ when creating 'Span's if the tracer is not enabled.++ A 'Tracer' is considered enabled if it has at least one configured processor.+ If the 'TracerProvider' has no processors, all spans will be dropped, so the+ tracer is disabled.++ @since 0.3.1.0+-}+tracerIsEnabled :: Tracer -> Bool+tracerIsEnabled t = not $ V.null $ tracerProviderProcessors $ tracerProvider t {- | Smart constructor for 'SpanArguments' providing reasonable values for most 'Span's created
+ test/OpenTelemetry/Trace/TracerSpec.hs view
@@ -0,0 +1,50 @@+module OpenTelemetry.Trace.TracerSpec where++import qualified OpenTelemetry.Attributes as A+import OpenTelemetry.Processor.Span (SpanProcessor (..))+import OpenTelemetry.Trace.Core+import OpenTelemetry.Trace.Sampler+import Test.Hspec+++spec :: Spec+spec = describe "Tracer" $ do+ describe "tracerIsEnabled" $ do+ it "returns False when TracerProvider has no processors" $ do+ tp <- createTracerProvider [] emptyTracerProviderOptions+ let instrLib = InstrumentationLibrary "test" "1.0.0" "" A.emptyAttributes+ tracer = makeTracer tp instrLib tracerOptions+ tracerIsEnabled tracer `shouldBe` False++ it "returns True when TracerProvider has at least one processor" $ do+ let dummyProcessor =+ SpanProcessor+ { spanProcessorOnStart = \_ _ -> pure ()+ , spanProcessorOnEnd = \_ -> pure ()+ , spanProcessorShutdown = error "not implemented in test"+ , spanProcessorForceFlush = pure ()+ }+ tp <- createTracerProvider [dummyProcessor] emptyTracerProviderOptions+ let instrLib = InstrumentationLibrary "test" "1.0.0" "" A.emptyAttributes+ tracer = makeTracer tp instrLib tracerOptions+ tracerIsEnabled tracer `shouldBe` True++ it "returns True when TracerProvider has multiple processors" $ do+ let dummyProcessor1 =+ SpanProcessor+ { spanProcessorOnStart = \_ _ -> pure ()+ , spanProcessorOnEnd = \_ -> pure ()+ , spanProcessorShutdown = error "not implemented in test"+ , spanProcessorForceFlush = pure ()+ }+ dummyProcessor2 =+ SpanProcessor+ { spanProcessorOnStart = \_ _ -> pure ()+ , spanProcessorOnEnd = \_ -> pure ()+ , spanProcessorShutdown = error "not implemented in test"+ , spanProcessorForceFlush = pure ()+ }+ tp <- createTracerProvider [dummyProcessor1, dummyProcessor2] emptyTracerProviderOptions+ let instrLib = InstrumentationLibrary "test" "1.0.0" "" A.emptyAttributes+ tracer = makeTracer tp instrLib tracerOptions+ tracerIsEnabled tracer `shouldBe` True
test/Spec.hs view
@@ -21,6 +21,7 @@ import OpenTelemetry.Trace.Core import qualified OpenTelemetry.Trace.SamplerSpec as Sampler import qualified OpenTelemetry.Trace.TraceFlagsSpec as TraceFlags+import qualified OpenTelemetry.Trace.TracerSpec as Tracer import OpenTelemetry.Util import Test.Hspec import qualified VectorBuilder.Vector as Builder@@ -62,5 +63,6 @@ InstrumentationLibrary.spec Sampler.spec TraceFlags.spec+ Tracer.spec SemanticsConfigSpec.spec CoreSpec.spec