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.



56
57
58
59
60
61
62
63
64
65
# File 'lib/exis_ray/configuration.rb', line 56

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
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

#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



92
93
94
95
96
# File 'lib/exis_ray/configuration.rb', line 92

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)


72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/exis_ray/configuration.rb', line 72

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.



101
102
103
# File 'lib/exis_ray/configuration.rb', line 101

def json_logs?
  @log_format == :json
end