packages feed

kafka-effectful-0.2.0.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,
    consumerRecordAttributes,
    producerSpanName,
    consumerSpanName,

    -- * Trace-context propagation
    extractTraceContextFromRecord,
    injectTraceContextIntoRecord,
    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,
    requestHeadersToKafkaHeaders,
 )
import Kafka.Effectful.OpenTelemetry.Semantic (
    consumerRecordAttributes,
    consumerSpanName,
    producerRecordAttributes,
    producerSpanName,
 )