Clase: Mongo::Server::Monitor Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::Servidor::Monitor
- Ampliado por:
- Reenviable
- 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.
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.
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.
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.
0.2.freeze
Constantes incluidas desde Loggable
Colapso delresumen de atributos de instancia
-
#conexión ⇒ Mongo::Servidor::Monitor::Conexión
solo lectura
privada
Conexión La conexión a utilizar.
-
#monitoring ⇒ Monitoring
solo lectura
privada
Monitoreo El monitoreo.
-
#options ⇒ Hash
solo lectura
privada
Opciones Las opciones del servidor.
-
#server ⇒ Server
solo lectura
privada
Servidor El servidor que este monitor está monitoreando.
Atributos incluidos desde Event::Publisher
Colapso del resumen del método de instancia
- #create_push_monitor!(versión_de_topología) ⇒ Objeto privada
-
#do_work ⇒ Objeto
privada
Realizar una comprobación del servidor.
-
#heartbeat_interval ⇒ Float
privada
El intervalo entre comprobaciones regulares del servidor.
-
#inicializar(servidor, event_listeners, monitoreo, opciones = {}) ⇒ Monitor
constructor
privada
Crear el nuevo monitor del servidor.
-
#push_monitor ⇒ Server::PushMonitor | nil
privada
El monitor de empuje, si se utiliza uno.
-
#¡reinicia! ⇒ Hilo
privada
Reinicia el monitor del servidor a menos que el hilo actual esté activo.
- #run_sdam_flow(result, aguardado: false, scan_error: nil) ⇒ objeto privada
-
#¡escanear! ⇒ Descripción
privada
Realice una verificación del servidor con limitación y actualice la descripción del servidor y el tiempo de ida y vuelta promedio.
-
#¡Alto! ⇒ verdadero | falso
Detenga el hilo en segundo plano y espere a que finalice durante un período de tiempo razonable.
- #¡detener_monitorización_de_push! ⇒ Objeto privada
- #to_s ⇒ Objeto privada
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
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.
El monitor nunca debe instanciarse directamente fuera de un servidor.
Crear el nuevo monitor del servidor.
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, = {}) a no ser que vigilancia.is_a?(Monitoring) propagar ArgumentError, "Tipode monitorización incorrecto: #{monitoring.inspect}" end a no ser que [:app_metadata] propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios' end a no ser que [: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 = .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ón ⇒ Mongo::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.
103 104 105 |
# Archivo 'lib/mongo/server/monitor.rb', línea 103 def conexión @conexión end |
#monitoring ⇒ Monitoring (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.
125 126 127 |
# Archivo 'lib/mongo/server/monitor.rb', línea 125 def vigilancia @monitoring end |
#opciones ⇒ Hash (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.
106 107 108 |
# Archivo 'lib/mongo/server/monitor.rb', línea 106 def @opciones end |
#servidor ⇒ Servidor (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.
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.
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(.unir( socket_timeout: intervalo de latidos + conexión.tiempo de espera del socket, app_metadata: [:push_monitor_app_metadata], comprobar_documento: @conexión.check_document )), ) end end |
#do_work ⇒ 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.
Realizar una comprobación del servidor.
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_interval ⇒ Float
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.
111 112 113 |
# Archivo 'lib/mongo/server/monitor.rb', línea 111 def intervalo de latidos [:intervalo_de_latidos] || INTERVALO DE LATIDO PREDETERMINADO end |
#push_monitor ⇒ Server::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.
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.
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.
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.
Si el reloj del sistema se retrasa, este método puede permanecer inactivo durante mucho tiempo.
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.
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.
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.
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_s ⇒ 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.
278 279 280 |
# Archivo 'lib/mongo/server/monitor.rb', línea 278 def a_s "#<#{self.clase.name}:#{object_id} #{servidor.address}>" end |