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