class Freddy::Delivery

Attributes

payload[R]
routing_key[R]
tag[R]

Public Class Methods

new(payload, metadata, routing_key, tag, exchange) click to toggle source
# File lib/freddy/delivery.rb, line 7
def initialize(payload, metadata, routing_key, tag, exchange)
  @payload = payload
  @metadata = metadata
  @routing_key = routing_key
  @tag = tag
  @exchange = exchange
end

Public Instance Methods

correlation_id() click to toggle source
# File lib/freddy/delivery.rb, line 15
def correlation_id
  @metadata.correlation_id
end
in_span(&block) click to toggle source
# File lib/freddy/delivery.rb, line 31
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
reply_to() click to toggle source
# File lib/freddy/delivery.rb, line 23
def reply_to
  @metadata.reply_to
end
timestamp() click to toggle source
# File lib/freddy/delivery.rb, line 27
def timestamp
  @metadata[:timestamp]
end
type() click to toggle source
# File lib/freddy/delivery.rb, line 19
def type
  @metadata.type
end

Private Instance Methods

span_attributes() click to toggle source
# File lib/freddy/delivery.rb, line 43
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