packages feed

kafka-effectful-0.3.1.0: src/Kafka/Effectful/OpenTelemetry.hs

-- | Single-import facade for the OpenTelemetry-aware variants of
-- @kafka-effectful@\'s producer and consumer interpreters, plus the
-- pure attribute-builder helpers and W3C trace-context propagation
-- helpers that the traced interpreters are built from.
--
-- Typical wiring:
--
-- > import Kafka.Effectful.OpenTelemetry
-- > import OpenTelemetry.Trace (initializeGlobalTracerProvider, makeTracer, tracerOptions)
-- >
-- > tracer <- do
-- >   tp <- initializeGlobalTracerProvider
-- >   pure (makeTracer tp \"my-app\" tracerOptions)
-- >
-- > runEff . runError . runKafkaProducerTraced tracer producerProps $ do
-- >   produceMessage record
--
-- The facade does not re-export the upstream @Tracer@, @Span@, etc.
-- types; users who need those import them from @OpenTelemetry.Trace@
-- or @OpenTelemetry.Trace.Core@ directly.
--
-- @since 0.2.0.0
module Kafka.Effectful.OpenTelemetry
  ( -- * Traced interpreters
    runKafkaProducerTraced,
    runKafkaConsumerTraced,

    -- * Attribute helpers
    producerRecordAttributes,
    producerRecordAttributesWith,
    consumerRecordAttributes,
    consumerRecordAttributesWith,
    producerSpanName,
    consumerSpanName,

    -- * Trace-context propagation
    extractTraceContextFromRecord,
    injectTraceContextIntoRecord,
    kafkaHeadersToTextMap,
    textMapToKafkaHeaders,
    kafkaHeadersToRequestHeaders,
    requestHeadersToKafkaHeaders,
  )
where

import Kafka.Effectful.OpenTelemetry.Consumer.Interpreter (runKafkaConsumerTraced)
import Kafka.Effectful.OpenTelemetry.Producer.Interpreter (runKafkaProducerTraced)
import Kafka.Effectful.OpenTelemetry.Propagation
  ( extractTraceContextFromRecord,
    injectTraceContextIntoRecord,
    kafkaHeadersToRequestHeaders,
    kafkaHeadersToTextMap,
    requestHeadersToKafkaHeaders,
    textMapToKafkaHeaders,
  )
import Kafka.Effectful.OpenTelemetry.Semantic
  ( consumerRecordAttributes,
    consumerRecordAttributesWith,
    consumerSpanName,
    producerRecordAttributes,
    producerRecordAttributesWith,
    producerSpanName,
  )