Module: BugBunny::OTel

Defined in:
lib/bug_bunny/otel.rb

Overview

Helpers para emitir campos siguiendo las OTel semantic conventions for messaging. opentelemetry.io/docs/specs/otel/trace/semantic-conventions/messaging/

Se usa tanto en el lado publisher (inyección en headers AMQP) como en el consumer (enriquecimiento de log events estructurados). Centraliza las claves para evitar strings mágicos dispersos y facilitar los tests.

Constant Summary collapse

SYSTEM =

Clave: sistema de mensajería. Siempre ‘“rabbitmq”` en BugBunny. Flat-naming siguiendo el patrón de ExisRay (underscore sin dots).

:messaging_system
OPERATION =

Clave: tipo de operación (‘publish`, `receive`, `process`).

:messaging_operation
DESTINATION =

Clave: nombre del exchange destino.

:messaging_destination_name
ROUTING_KEY =

Clave: routing key del mensaje (específica de RabbitMQ).

:messaging_routing_key
MESSAGE_ID =

Clave: identificador único del mensaje. En BugBunny se mapea a ‘correlation_id`.

:messaging_message_id
SYSTEM_VALUE =

Valor constante para SYSTEM.

'rabbitmq'

Class Method Summary collapse

Class Method Details

.messaging_headers(operation:, destination:, routing_key:, message_id: nil) ⇒ Hash{String=>String}

Construye el hash de campos OTel para messaging.

Los campos son aptos tanto para inyectar en headers AMQP como para mergear en kwargs de log events estructurados.

Parameters:

  • operation (String)

    Una de: ‘“publish”`, `“receive”`, `“process”`.

  • destination (String, nil)

    Nombre del exchange destino (puede ser ‘“”` para default exchange).

  • routing_key (String, nil)

    Routing key final del mensaje.

  • message_id (String, nil) (defaults to: nil)

    Identificador del mensaje. Se omite si es ‘nil`.

Returns:

  • (Hash{String=>String})

    Hash con los campos OTel de messaging.



36
37
38
39
40
41
42
43
44
45
# File 'lib/bug_bunny/otel.rb', line 36

def self.messaging_headers(operation:, destination:, routing_key:, message_id: nil)
  fields = {
    SYSTEM => SYSTEM_VALUE,
    OPERATION => operation,
    DESTINATION => destination.to_s,
    ROUTING_KEY => routing_key.to_s
  }
  fields[MESSAGE_ID] = message_id.to_s if message_id
  fields
end