Sha256: 09342b06c4f429f7becb906ac5ff60308bb3ac6636f36bd5a65aa4da26079e96

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

class Freddy
  class Delivery
    attr_reader :routing_key, :payload, :tag

    def initialize(payload, metadata, routing_key, tag, exchange)
      @payload = payload
      @metadata = metadata
      @routing_key = routing_key
      @tag = tag
      @exchange = exchange
    end

    def correlation_id
      @metadata.correlation_id
    end

    def type
      @metadata.type
    end

    def reply_to
      @metadata.reply_to
    end

    def timestamp
      @metadata[:timestamp]
    end

    def in_span(&block)
      name = "#{Tracing.span_destination(@exchange, @routing_key)} process"
      kind = OpenTelemetry::Trace::SpanKind::CONSUMER
      producer_context = OpenTelemetry.propagation.extract(@metadata[:headers] || {})

      OpenTelemetry::Context.with_current(producer_context) do
        Freddy.tracer.in_span(name, attributes: span_attributes, kind: kind, &block)
      end
    end

    private

    def span_attributes
      destination_kind = @exchange == '' ? 'queue' : 'topic'

      attributes = {
        'payload.type' => (@payload[:type] || 'unknown').to_s,
        OpenTelemetry::SemanticConventions::Trace::MESSAGING_SYSTEM => 'rabbitmq',
        OpenTelemetry::SemanticConventions::Trace::MESSAGING_DESTINATION => @exchange,
        OpenTelemetry::SemanticConventions::Trace::MESSAGING_DESTINATION_KIND => destination_kind,
        OpenTelemetry::SemanticConventions::Trace::MESSAGING_RABBITMQ_ROUTING_KEY => @routing_key,
        OpenTelemetry::SemanticConventions::Trace::MESSAGING_OPERATION => 'process'
      }

      # There's no correlation_id when a message was sent using
      # `Freddy#deliver`.
      if correlation_id
        attributes[OpenTelemetry::SemanticConventions::Trace::MESSAGING_CONVERSATION_ID] = correlation_id
      end

      attributes
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
freddy-2.8.0 lib/freddy/delivery.rb
freddy-2.7.0 lib/freddy/delivery.rb