Clase: Mongo::Server::Monitor Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Incluye:
BackgroundThread, Evento::Publicador, Registrable
Definido en:
lib/mongo/server/monitor.rb,
lib/mongo/server/monitor/connection.rb,
lib/mongo/server/monitor/app_metadata.rb

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Responsable de sondear periódicamente un servidor a través de comandos hello para mantener el estado del servidor actualizado.

Todo el trabajo se realiza en un hilo de fondo para no interferir con otras operaciones realizadas por el controlador.

Desde:

  • 2.0.0

Definido en el espacio de nombres

Clases: AppMetadata, Conexión

Colapso delresumen constante

INTERVALO DE LATIDO PREDETERMINADO =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

El intervalo predeterminado entre actualizaciones del estado del servidor es 10 segundos.

Desde:

  • 2.0.0

10.freeze
INTERVALO MÍNIMO DE EXPLORACIÓN =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

El tiempo mínimo entre escaneos forzados del servidor. Es minHeartbeatFrequencyMS en la especificación SDAM.

Desde:

  • 2.0.0

0.5.freeze
FACTOR DE PESO RTT =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Obsoleto.

Se eliminará en la versión 3.0.

El factor de ponderación (alfa) para calcular el tiempo promedio de ida y vuelta en movimiento.

Desde:

  • 2.0.0

0.2.freeze

Constantes incluidas desde Loggable

Registrable::PREFIX

Colapso delresumen de atributos de instancia

Atributos incluidos desde Event::Publisher

#event_listeners

Colapso del resumen del método de instancia

Métodos incluidos desde BackgroundThread

#corre!, #corriendo?

Métodos incluidos en Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Métodos incluidos desde Event::Publisher

#publicar

Detalles del constructor

#inicializar(servidor, event_listeners, monitoreo, opciones = {}) ⇒ Monitor

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

El monitor nunca debe instanciarse directamente fuera de un servidor.

Crear el nuevo monitor del servidor.

Ejemplos:

Crear el monitor del servidor.

Mongo::Server::Monitor.new(address, listeners, monitoring)

Parámetros:

  • Server (Servidor)

    El servidor a monitorizar.

  • event_listeners (Evento::Escuchadores)

    Los oyentes de eventos.

  • vigilancia (Monitoreo)

    El monitoreo..

  • opciones (Hash) (predeterminado: {})

    Las opciones.

Opciones Hash(opciones):

  • :tiempo de espera de conexión (Flotar)

    El tiempo de espera, en segundos, que se utilizará al establecer la conexión de monitoreo.

  • :intervalo_de_latidos (Flotar)

    El intervalo entre comprobaciones regulares del servidor.

  • :logger (Registrador)

    Un registrador personalizado para utilizar.

  • :monitor_app_metadata (Mongo::Servidor::Monitor::AppMetadata)

    Los metadatos a utilizar para la conexión de monitoreo regular.

  • :push_monitor_app_metadata (Mongo::Servidor::Monitor::AppMetadata)

    Los metadatos que se utilizarán para la conexión del monitor push.

  • :tiempo de espera del socket (Flotar)

    El tiempo de espera, en segundos, para ejecutar operaciones en la conexión de supervisión.

Desde:

  • 2.0.0



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Archivo 'lib/mongo/server/monitor.rb', línea 78

def inicializar(Server, event_listeners, vigilancia, opciones = {})
  a no ser que vigilancia.is_a?(Monitoring)
    propagar ArgumentError, "Tipode monitorización incorrecto: #{monitoring.inspect}"
  end
  a no ser que opciones[:app_metadata]
    propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios'
  end
  a no ser que opciones[:push_monitor_app_metadata]
    propagar ArgumentError, 'Serequieren metadatos de la aplicación Push Monitor'
  end
  @server = Server
  @oyentes_de_eventos = event_listeners
  @monitoring = vigilancia
  @opciones = opciones.freeze
  @mutex = Mutex.Nuevo
  @sdam_mutex = Mutex.Nuevo
  @próximo_escaneo_más_temprano = @next_wanted_scan = Tiempo.ahora
  @update_mutex = Mutex.Nuevo
end

Detalles de los atributos de instancia

#conexiónMongo::Server::Monitor::Connection (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve la conexión La conexión a utilizar.

Devuelve:

Desde:

  • 2.0.0



103
104
105
# Archivo 'lib/mongo/server/monitor.rb', línea 103

def conexión
  @conexión
end

#monitoringMonitoring (readonly)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Monitoreo de devoluciones El monitoreo.

Devuelve:

Desde:

  • 2.0.0



125
126
127
# Archivo 'lib/mongo/server/monitor.rb', línea 125

def vigilancia
  @monitoring
end

#opcionesHash (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Opciones de retorno Las opciones del servidor.

Devuelve:

  • (Hash)

    opciones Las opciones del servidor.

Desde:

  • 2.0.0



106
107
108
# Archivo 'lib/mongo/server/monitor.rb', línea 106

def opciones
  @opciones
end

#servidorServidor (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el servidor El servidor que este monitor está monitoreando.

Devuelve:

  • (Servidor)

    servidor El servidor que este monitor está monitoreando.

Desde:

  • 2.0.0



100
101
102
# Archivo 'lib/mongo/server/monitor.rb', línea 100

def Server
  @server
end

Detalles del método de instancia

#create_push_monitor!(versión_de_topología) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# Archivo 'lib/mongo/server/monitor.rb', línea 173

def ¡crear_monitor_push!(versión_de_topología)
  @update_mutex.sincronizar hacer
    Si @push_monitor && !@push_monitor.¿correr?
      @push_monitor = nulo
    end

    @push_monitor ||= Monitor de empuje.Nuevo(
      yo,
      versión_de_topología,
      vigilancia,
      **Utils.shallow_symbolize_keys(opciones.unir(
        socket_timeout: intervalo de latidos + conexión.tiempo de espera del socket,
        app_metadata: opciones[:push_monitor_app_metadata],
        comprobar_documento: @conexión.check_document
      )),
    )
  end
end

#do_workobjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Realizar una comprobación del servidor.

Desde:

  • 2.0.0



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# Archivo 'lib/mongo/server/monitor.rb', línea 138

def hacer_trabajo
  ¡escanear!
  # @next_wanted_scan puede ser actualizado por el monitor push.
  # Sin embargo, debemos verificar el indicador de terminación para que el monitor
  # El hilo sale cuando se solicita.
  bucle hacer
    delta = @next_wanted_scan - Tiempo.ahora
    Si delta > 0
      señalado = Server.semáforo de escaneo.esperar(delta)
      Si señalado || @stop_requested
        break
      end
    else
      break
    end
  end
end

#heartbeat_intervalFloat

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

El intervalo entre comprobaciones regulares del servidor.

Devuelve:

  • (Flotar) -

    El intervalo entre los latidos del corazón, en segundos.

Desde:

  • 2.0.0



111
112
113
# Archivo 'lib/mongo/server/monitor.rb', línea 111

def intervalo de latidos
  opciones[:intervalo_de_latidos] || INTERVALO DE LATIDO PREDETERMINADO
end

#push_monitorServer::PushMonitor | nil

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el monitor de empuje, si se está utilizando uno.

Devuelve:

Desde:

  • 2.0.0



129
130
131
132
133
# Archivo 'lib/mongo/server/monitor.rb', línea 129

def monitor_push
  @update_mutex.sincronizar hacer
    @push_monitor
  end
end

#¡reinicia!Hilo

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Reinicia el monitor del servidor a menos que el hilo actual esté activo.

Ejemplos:

Reinicie el monitor.

monitor.restart!

Devuelve:

  • (Hilo) -

    El hilo en el que se ejecuta el monitor.

Desde:

  • 2.1.0



270
271
272
273
274
275
276
# Archivo 'lib/mongo/server/monitor.rb', línea 270

def ¡Reanudar!
  Si @hilo && @hilo.alive?
    @hilo
  else
    ¡correr!
  end
end

#run_sdam_flow(resultado, esperado: falso, error de escaneo: nulo) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
# Archivo 'lib/mongo/server/monitor.rb', línea 236

def ejecutar_sdam_flow(resultado, esperado: false, error de escaneo: nulo)
  @sdam_mutex.sincronizar hacer
    descripción antigua = Server.Descripción

    new_description = Descripción.Nuevo(
      Server.dirección,
      resultado,
      tiempo promedio de ida y vuelta: Server.calculadora de tiempo de ida y vuelta.tiempo promedio de ida y vuelta,
      tiempo mínimo de ida y vuelta: Server.calculadora de tiempo de ida y vuelta.tiempo mínimo de ida y vuelta
    )

    Server.clúster.ejecutar_sdam_flow(Server.Descripción, new_description, esperado: esperado, error de escaneo: scan_error)

    Server.Descripción.grifo hacer |new_description|
      a no ser que esperado
        Si new_description.¿desconocido? && !descripción antigua.¿desconocido?
          @próximo_escaneo_más_temprano = @next_wanted_scan = Tiempo.ahora
        else
          @próximo_escaneo_más_temprano = Tiempo.ahora + INTERVALO DE EXPLORACIÓN MÍNIMA
          @next_wanted_scan = Tiempo.ahora + intervalo de latidos
        end
      end
    end
  end
end

#¡escanear!Descripción

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Si el reloj del sistema se retrasa, este método puede permanecer inactivo durante mucho tiempo.

Nota:

El valor de retorno de este método está obsoleto. En la versión 3.0.0, este método no tendrá valor de retorno.

Realice una verificación del servidor con limitación y actualice la descripción del servidor y el tiempo de ida y vuelta promedio.

Si el servidor se revisó hace menos de MIN_SCAN_INTERVAL segundos, suspenda el servicio hasta que transcurran MIN_SCAN_INTERVAL segundos desde la última verificación. A continuación, realice la verificación, que implica ejecutar "hello" en el servidor monitoreado y actualizar su descripción.

Devuelve:

Desde:

  • 2.0.0



219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# Archivo 'lib/mongo/server/monitor.rb', línea 219

def ¡escanear!
  # Normalmente, el hilo en segundo plano invocaría este método.
  # Pero también es posible invocar scan! directamente en un monitor.
  # Permitir que sólo se realice un escaneo a la vez.
  @mutex.sincronizar hacer
    ¡frecuencia de escaneo del acelerador!

    begin
      resultado = hacer_escanear
    rescate => e
      ejecutar_sdam_flow({}, error de escaneo: e)
    else
      ejecutar_sdam_flow(resultado)
    end
  end
end

#¡Alto!verdadero | falso

Detenga el hilo en segundo plano y espere a que finalice durante un período de tiempo razonable.

Devuelve:

  • (verdadero | falso)

    Si el hilo fue terminado.

Desde:

  • 2.0.0



162
163
164
165
166
167
168
169
170
171
# Archivo 'lib/mongo/server/monitor.rb', línea 162

def ¡detener!
  stop_push_monitor!

  # Valor de retorno del super de avance
  Super.grifo hacer
    # Importante: la desconexión debe ocurrir después del hilo en segundo plano
    # termina.
    conexión&.¡desconectar!
  end
end

#¡detener_monitorización_de_push!Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



192
193
194
195
196
197
198
199
# Archivo 'lib/mongo/server/monitor.rb', línea 192

def stop_push_monitor!
  @update_mutex.sincronizar hacer
    Si @push_monitor
      @push_monitor.¡detener!
      @push_monitor = nulo
    end
  end
end

#to_sObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



278
279
280
# Archivo 'lib/mongo/server/monitor.rb', línea 278

def a_s
  "#<#{self.clase.name}:#{object_id} #{servidor.address}>"
end