packages feed

opentelemetry-extra 0.3.1 → 0.3.2

raw patch · 2 files changed

+49/−2 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ OpenTelemetry.EventlogStreaming_Internal: [specificSpans] :: State -> HashMap Word64 Span
+ OpenTelemetry.EventlogStreaming_Internal: beginSpecificSpan :: TraceId -> SpanId -> Text -> Timestamp -> State -> (State, [Span])
+ OpenTelemetry.EventlogStreaming_Internal: endSpecificSpan :: SpanId -> Timestamp -> State -> (State, [Span])
- OpenTelemetry.EventlogStreaming_Internal: S :: Timestamp -> IntMap ThreadId -> HashMap ThreadId (NonEmpty Span) -> HashMap ThreadId TraceId -> SMGen -> State
+ OpenTelemetry.EventlogStreaming_Internal: S :: Timestamp -> IntMap ThreadId -> HashMap ThreadId (NonEmpty Span) -> HashMap ThreadId TraceId -> HashMap Word64 Span -> SMGen -> State

Files

opentelemetry-extra.cabal view
@@ -2,7 +2,7 @@ name:                opentelemetry-extra description:         The OpenTelemetry Haskell Client https://opentelemetry.io category:            OpenTelemetry-version: 0.3.1+version: 0.3.2 license-file:        LICENSE license:             Apache-2.0 author:              Dmitry Ivanov
src/OpenTelemetry/EventlogStreaming_Internal.hs view
@@ -74,12 +74,13 @@     threadMap :: IM.IntMap ThreadId,     spanStacks :: HM.HashMap ThreadId (NonEmpty Span),     traceMap :: HM.HashMap ThreadId TraceId,+    specificSpans :: HM.HashMap Word64 Span,     randomGen :: R.SMGen   }   deriving (Show)  initialState :: Word64 -> R.SMGen -> State-initialState timestamp = S timestamp mempty mempty mempty+initialState timestamp = S timestamp mempty mempty mempty mempty  processEvent :: Event -> State -> (State, [Span]) processEvent (Event ts ev m_cap) st@(S {..}) =@@ -102,6 +103,14 @@         (HeapAllocated {allocBytes}, _, Just tid) ->           (modifySpan tid (addEvent now "heap_alloc_bytes" (showT allocBytes)) st, [])         (UserMessage {msg}, _, fromMaybe 1 -> tid) -> case T.words msg of+          ("ot1" : "begin" : "specific" : "span" : trace_id_text : span_id_text : name) ->+            let trace_id = TId (read ("0x" <> T.unpack trace_id_text))+                span_id = SId (read ("0x" <> T.unpack span_id_text))+             in beginSpecificSpan trace_id span_id (T.intercalate " " name) now st+          ("ot1" : "end" : "specific" : "span" : trace_id_text : span_id_text : _) ->+            let trace_id = TId (read ("0x" <> T.unpack trace_id_text))+                span_id = SId (read ("0x" <> T.unpack span_id_text))+             in endSpecificSpan span_id now st           ("ot1" : "begin" : "span" : name) ->             (pushSpan tid (T.intercalate " " name) now st, [])           ("ot1" : "end" : "span" : _) -> popSpan tid now st@@ -174,6 +183,44 @@     { spanStacks =         HM.update (\(sp :| sps) -> Just (f sp :| sps)) tid (spanStacks st)     }++beginSpecificSpan :: TraceId -> SpanId -> T.Text -> OTel.Timestamp -> State -> (State, [Span])+beginSpecificSpan trace_id span_id@(SId s) name timestamp st =+  case HM.lookup s (specificSpans st) of+    Just sp -> (st {specificSpans = HM.delete s (specificSpans st)}, [sp {spanStartedAt = timestamp, spanOperation = name, spanContext = SpanContext span_id trace_id}])+    Nothing ->+      (st {specificSpans = HM.insert s sp (specificSpans st)}, [])+      where+        sp =+          Span+            { spanContext = SpanContext span_id trace_id,+              spanOperation = name,+              spanStartedAt = timestamp,+              spanFinishedAt = 0,+              spanTags = mempty,+              spanEvents = mempty,+              spanStatus = OK,+              spanParentId = Nothing+            }++endSpecificSpan :: SpanId -> OTel.Timestamp -> State -> (State, [Span])+endSpecificSpan span_id@(SId s) timestamp st =+  case HM.lookup s (specificSpans st) of+    Just sp -> (st {specificSpans = HM.delete s (specificSpans st)}, [sp {spanFinishedAt = timestamp}])+    Nothing ->+      (st {specificSpans = HM.insert s sp (specificSpans st)}, [])+      where+        sp =+          Span+            { spanContext = SpanContext span_id (TId 0),+              spanOperation = "unknown",+              spanStartedAt = 0,+              spanFinishedAt = timestamp,+              spanTags = mempty,+              spanEvents = mempty,+              spanStatus = OK,+              spanParentId = Nothing+            }  pushSpan :: HasCallStack => ThreadId -> T.Text -> OTel.Timestamp -> State -> State pushSpan tid name timestamp st = st {spanStacks = new_stacks, randomGen = new_randomGen, traceMap = new_traceMap}