Class: ExisRay::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/exis_ray/configuration.rb

Overview

Clase de configuración global para la gema. Permite personalizar los headers de trazabilidad y definir las clases de la aplicación host que la gema utilizará para gestionar el contexto (Current) y el reporte de errores (Reporter).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Inicializa la configuración con valores por defecto compatibles con AWS X-Ray.



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/exis_ray/configuration.rb', line 75

def initialize
  @trace_header = "HTTP_X_AMZN_TRACE_ID"
  @propagation_trace_header = "X-Amzn-Trace-Id"
  @reporter_class = nil
  @current_class = nil
  @log_format = :text
  @log_subscriber_class = nil
  @service_version = default_service_version
  @deployment_environment = default_deployment_environment
  @emit_legacy_exception_keys = true
  @emit_legacy_path_key = true
end

Instance Attribute Details

#current_classString, ...

Se utiliza para inyectar/leer user_id, isp_id y correlation_id.

Examples:

‘Current’

Returns:

  • (String, Class, nil)

    El nombre de la clase de la aplicación host que hereda de ExisRay::Current.



28
29
30
# File 'lib/exis_ray/configuration.rb', line 28

def current_class
  @current_class
end

#deployment_environmentString?

Por defecto lee ‘Rails.env` si Rails está disponible.

Examples:

‘production’

Returns:

  • (String, nil)

    Entorno de despliegue. Equivale a ‘deployment.environment` de OTel.



53
54
55
# File 'lib/exis_ray/configuration.rb', line 53

def deployment_environment
  @deployment_environment
end

#emit_legacy_exception_keysBoolean

Default ‘true` durante la ventana de transición OTel v1.0. Setear a `false` cuando todos los consumers (dashboards, alertas, queries) hayan migrado a `exception.*` para reducir bytes y ruido en logs. Aplica a `ExisRay::LogSubscriber` (logs HTTP) y `ExisRay::TaskMonitor` (logs de tasks).

Examples:

false

Returns:

  • (Boolean)

    Si true, emite ‘error_class`/`error_message` junto a `exception.type`/`exception.message`.



62
63
64
# File 'lib/exis_ray/configuration.rb', line 62

def emit_legacy_exception_keys
  @emit_legacy_exception_keys
end

#emit_legacy_path_keyBoolean

junto a ‘url.path` (OTel v1.0). Default `true` durante la ventana de transición. Setear a `false` cuando los consumers (queries, dashboards, alertas) hayan migrado a `url.path` para reducir bytes y ruido en logs. Nota: `url.path` y `http_route` son semánticamente distintos (URL concreta vs template); coinciden como string solo en endpoints sin params — la dupe es esperada y no se elimina.

Examples:

false

Returns:

  • (Boolean)

    Si true, ‘ExisRay::LogSubscriber` emite `path` (nombre legacy Wispro)



72
73
74
# File 'lib/exis_ray/configuration.rb', line 72

def emit_legacy_path_key
  @emit_legacy_path_key
end

#log_formatSymbol

Puede ser ‘:text` (comportamiento por defecto de Rails) o `:json` (formato estructurado).

Examples:

:json

Returns:

  • (Symbol)

    El formato en el que se emitirán los logs de la aplicación.



34
35
36
# File 'lib/exis_ray/configuration.rb', line 34

def log_format
  @log_format
end

#log_subscriber_classString?

Usada para inyectar campos extra en cada log de request HTTP via ‘extra_fields`. Si es nil, se usa ExisRay::LogSubscriber directamente (sin campos extra).

Examples:

‘MyLogSubscriber’

Returns:

  • (String, nil)

    Nombre de la subclase de ExisRay::LogSubscriber de la app host.



41
42
43
# File 'lib/exis_ray/configuration.rb', line 41

def log_subscriber_class
  @log_subscriber_class
end

#propagation_trace_headerString

Por defecto es ‘X-Amzn-Trace-Id’.

Returns:

  • (String)

    La key del header HTTP que se enviará a otros servicios (formato estándar).



16
17
18
# File 'lib/exis_ray/configuration.rb', line 16

def propagation_trace_header
  @propagation_trace_header
end

#reporter_classString, ...

Se recomienda usar un String para evitar problemas de carga (autoloading) durante la inicialización.

Examples:

‘Choto’

Returns:

  • (String, Class, nil)

    El nombre de la clase de la aplicación host que hereda de Reporter.



22
23
24
# File 'lib/exis_ray/configuration.rb', line 22

def reporter_class
  @reporter_class
end

#service_versionString?

Por defecto intenta leer ‘Rails.application.config.x.version` si Rails está disponible.

Examples:

‘1.2.3’

Returns:

  • (String, nil)

    Versión del servicio. Equivale a ‘service.version` de OTel.



47
48
49
# File 'lib/exis_ray/configuration.rb', line 47

def service_version
  @service_version
end

#trace_headerString

Por defecto es ‘HTTP_X_AMZN_TRACE_ID’.

Returns:

  • (String)

    La key del header HTTP (formato Rack) donde se buscará el Trace ID entrante.



11
12
13
# File 'lib/exis_ray/configuration.rb', line 11

def trace_header
  @trace_header
end

Instance Method Details

#default_deployment_environmentObject



113
114
115
116
117
# File 'lib/exis_ray/configuration.rb', line 113

def default_deployment_environment
  return unless defined?(Rails) && Rails.respond_to?(:env)

  Rails.env.to_s
end

#default_service_versionString?

Lee la versión del servicio desde la configuración de Rails. Busca primero en ‘config.version` (atributo directo) y luego en `config.x.version` (custom config namespace). Retorna nil si ninguno está definido.

Returns:

  • (String, nil)


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/exis_ray/configuration.rb', line 93

def default_service_version
  return unless defined?(Rails) && Rails.application&.config

  config = Rails.application.config

  # Primero: config.version (atributo directo definido en Application)
  version = config.version if config.respond_to?(:version)
  return version.to_s if version.present?

  # Fallback: config.x.version (custom config namespace)
  if config.respond_to?(:x) && config.x.respond_to?(:version)
    x_version = config.x.version
    return x_version.to_s if x_version.present?
  end

  nil
rescue StandardError
  nil
end

#json_logs?Boolean

Indica si la aplicación está configurada para emitir logs en formato estructurado (JSON).

Returns:

  • (Boolean)

    ‘true` si `log_format` es `:json`, `false` en caso contrario.



122
123
124
# File 'lib/exis_ray/configuration.rb', line 122

def json_logs?
  @log_format == :json
end