@@ -0,0 +1,52 @@
1+module Yoga.OpenTelemetry.OpenTelemetryOm
3+ , startSpanWithAttributes
14+import Effect.Class (liftEffect)
15+import Yoga.OpenTelemetry.OpenTelemetry as OTel
16+import Type.Row.Homogeneous (class Homogeneous)
19+-- All tracing functions automatically get tracer from Om context!
21+startSpan :: forall r err. String -> Om.Om { tracer :: OTel.Tracer | r } err OTel.Span
24+ liftEffect $ OTel.startSpan (OTel.SpanName name) tracer
26+startSpanWithAttributes :: forall r attrs err. Homogeneous attrs OTel.AttributeValue => String -> { | attrs } -> Om.Om { tracer :: OTel.Tracer | r } err OTel.Span
27+startSpanWithAttributes name attrs = do
29+ liftEffect $ OTel.startSpanWithAttributes (OTel.SpanName name) attrs tracer
31+endSpan :: forall r err. OTel.Span -> Om.Om r err Unit
32+endSpan span = liftEffect $ OTel.endSpan span
34+setAttribute :: forall r err. String -> OTel.AttributeValue -> OTel.Span -> Om.Om r err Unit
35+setAttribute key value span = liftEffect $ OTel.setAttribute key value span
37+addEvent :: forall r err. String -> OTel.Span -> Om.Om r err Unit
38+addEvent name span = liftEffect $ OTel.addEvent name span
40+setStatus :: forall r err. OTel.SpanStatusCode -> OTel.Span -> Om.Om r err Unit
41+setStatus status span = liftEffect $ OTel.setStatus status span
43+recordException :: forall r err. String -> OTel.Span -> Om.Om r err Unit
44+recordException error span = liftEffect $ OTel.recordException error span
46+-- Helper: Run an action within a span (automatically ends it)
47+withSpan :: forall r err a. String -> Om.Om { tracer :: OTel.Tracer | r } err a -> Om.Om { tracer :: OTel.Tracer | r } err a
48+withSpan name action = do
49+ span <- startSpan name