Clase: Mongo::Server::Monitor Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::servidor::Monitor
- Ampliado por:
- Reenviable
- Incluye:
- BackgroundThread, Event::Publisher, Loggable
- 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. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.
Responsable de realizar consultas periódicas a un servidor a través de comandos hello para mantener actualizado el estado del servidor.
Realiza todo el trabajo en un hilo en segundo plano para no interferir con otras operaciones realizadas por el driver.
Definido bajo Namespace
clase: AppMetadata, Connection
Resumen de constantes colapsar
- DEFAULT_HEARTBEAT_INTERVAL =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.
El intervalo por defecto entre actualizaciones del estado del servidor es de 10 segundos.
10- MIN_SCAN_INTERVAL =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.
El tiempo mínimo entre escaneos forzados del servidor. minHeartbeatFrequencyMS en la especificación SDAM.
0.5- RTT_WEIGHT_FACTOR =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada 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
Constantes incluidas desde Loggable
Resumen de atributos de la instancia colapsar
-
#connection ⇒ Mongo::servidor::supervisar::Connection
Solo lectura
privado
Conexión La conexión que se va a usar.
-
#monitoring ⇒ Monitoring
Solo lectura
privado
Supervisión La supervisión.
-
#options ⇒ Hash
Solo lectura
privado
Opciones Las opciones del servidor.
-
#server ⇒ Server
Solo lectura
privado
Servidor El servidor que este monitor está supervisando.
Atributos incluidos de Event::Publisher
Resumen del método de instancia colapsar
- #create_push_monitor!(topology_version) ⇒ Object privado
-
#do_work ⇒ Objeto
privado
Realiza una verificación del servidor.
-
#heartbeat_interval ⇒ Float
privado
El intervalo entre comprobaciones regulares del servidor.
-
#inicializar(servidor, event_listeners, supervisión, opciones = {}) ⇒ Supervisar
constructor
privado
Cree el nuevo monitor de servidor.
-
#push_monitor ⇒ Server::PushMonitor | nil
privado
El monitor de empuje, si se está utilizando uno.
-
#reinicio! ⇒ Hilo
privado
Reinicia el monitor del servidor a menos que el proceso actual esté todavía en ejecución.
- #run_sdam_flow(result, aguardado: false, scan_error: nil) ⇒ objeto privado
-
#scan! ⇒ Descripción
privado
Realice una comprobación del servidor con limitación y actualice la descripción del servidor y el tiempo medio de ida y vuelta.
-
#stop! ⇒ true | false
Detener el hilo en segundo plano y esperar a que finalice durante un tiempo razonable.
- #stop_push_monitor! ⇒ objeto privado
- #to_s ⇒ Objeto privado
Métodos incluidos de BackgroundThread (Hilo de fondo)
Métodos incluidos desde Registrable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Métodos incluidos de Event::Publisher
Detalles del Constructor
#inicializar(servidor, listeners_de_eventos, supervisión, opciones = {}) ⇒ Monitor
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
El monitor nunca debe ser instanciado directamente fuera de un servidor.
Cree el nuevo monitor de servidor.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# Archivo 'lib/mongo/server/monitor.rb', línea 76 def inicializar(Server, event_listeners, Monitoring, = {}) propagar ArgumentError, "Tipo de supervisión incorrecto: #{supervisión.inspect}" a menos que Monitoring.is_a?(Monitoring) propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios' a menos que [:app_metadata] propagar ArgumentError, 'Los metadatos de la aplicación de monitor de notificaciones son obligatorios' a menos que [:push_monitor_app_metadata] @server = Server @event_listeners = event_listeners @monitoring = Monitoring @options = .freeze @mutex = Mutex (exclusión mutua).Nuevo @sdam_mutex = Mutex (exclusión mutua).Nuevo @next_earliest_scan = @next_wanted_scan = Tiempo.ahora @update_mutex = Mutex (exclusión mutua).Nuevo end |
Detalles de atributo de instancias
#conexión ⇒ Mongo::servidor::supervisar::Connection (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve la conexión La conexión a utilizar.
96 97 98 |
# Archivo 'lib/mongo/server/monitor.rb', línea 96 def Conexión @connection end |
#monitoring ⇒ Monitoring (readonly)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Supervisión de devoluciones La supervisión.
118 119 120 |
# Archivo 'lib/mongo/server/monitor.rb', línea 118 def Monitoring @monitoring end |
#opciones ⇒ Hash (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve las opciones Opciones del servidor.
99 100 101 |
# Archivo 'lib/mongo/server/monitor.rb', línea 99 def @options end |
#servidor ⇒ Servidor (sólo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Servidor de devoluciones El servidor que este supervisar está supervisando.
93 94 95 |
# Archivo 'lib/mongo/server/monitor.rb', línea 93 def Server @server end |
Detalles del método de instancia
#create_push_monitor!(topology_version) ⇒ Object
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# Archivo 'lib/mongo/server/monitor.rb', línea 162 def create_push_monitor!(topology_version) @update_mutex.sincronizar hacer @push_monitor = nulo si @push_monitor && !@push_monitor.¿corriendo? @push_monitor ||= PushMonitor.Nuevo( sí mismo, topology_version, Monitoring, **Utils.shallow_symbolize_keys(.fusionar( socket_timeout: intervalo_latido + Conexión.socket_timeout, app_metadata: [:push_monitor_app_metadata], check_document: @connection.check_document )) ) end end |
#do_work ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Realiza una verificación del servidor.
131 132 133 134 135 136 137 138 139 140 141 142 143 |
# Archivo 'lib/mongo/server/monitor.rb', línea 131 def realizar_trabajo ¡escanear! # @next_wanted_scan puede ser actualizado por el monitor de push. # Sin embargo, debemos comprobar la bandera de terminación para que el monitor # El hilo se cierra cuando se solicita. bucle hacer delta = @next_wanted_scan - Tiempo.ahora break a menos que delta > 0 señalado = Server.scan_semaphore.esperar(delta) break si señalado || @solicitud_detencion end end |
#heartbeat_interval ⇒ Float
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
El intervalo entre comprobaciones regulares del servidor.
104 105 106 |
# Archivo 'lib/mongo/server/monitor.rb', línea 104 def intervalo_latido [intervalo de latidos] || DEFAULT_HEARTBEAT_INTERVAL end |
#push_monitor ⇒ Server::PushMonitor | nil
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el monitor push, si se está utilizando uno.
122 123 124 125 126 |
# Archivo 'lib/mongo/server/monitor.rb', línea 122 def push_monitor @update_mutex.sincronizar hacer @push_monitor end end |
#reinicio! ⇒ Thread
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Reinicia el monitor del servidor a menos que el proceso actual esté todavía en ejecución.
257 258 259 260 261 262 263 |
# Archivo 'lib/mongo/server/monitor.rb', línea 257 def ¡reiniciar! si @thread && @thread.alive? @thread else ejecutar! end end |
#run_sdam_flow(result, awaited: false, scan_error: nil) ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# Archivo 'lib/mongo/server/monitor.rb', línea 223 def run_sdam_flow(Resultado, esperado: false, scan_error: nulo) @sdam_mutex.sincronizar hacer old_description = Server.Descripción new_description = Descripción.Nuevo( Server.dirección, Resultado, average_round_trip_time: Server.calculadora_de_tiempo_de_viaje_redondo.average_round_trip_time, minimum_round_trip_time: Server.calculadora_de_tiempo_de_viaje_redondo.minimum_round_trip_time ) Server.clúster.run_sdam_flow(Server.Descripción, new_description, esperado: en espera, scan_error: scan_error) Server.Descripción.tocar hacer |new_description| a menos que en espera si new_description.¿desconocido? && !old_description.¿desconocido? @next_earliest_scan = @next_wanted_scan = Tiempo.ahora else @next_earliest_scan = Tiempo.ahora + MIN_SCAN_INTERVAL @next_wanted_scan = Tiempo.ahora + intervalo_latido end end end end end |
#scan! ⇒ Descripción
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Si el reloj del sistema se atrasa, este método puede dormir 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á un valor de retorno.
Realice una comprobación del servidor con limitación y actualice la descripción del servidor y el tiempo medio de ida y vuelta.
Si se revisó el servidor hace menos de MIN_SCAN_INTERVAL segundos, se debe esperar hasta que hayan pasado MIN_SCAN_INTERVAL segundos desde la última revisión. A continuación, realiza la verificación que implica ejecutar hello en el servidor que se está supervisando y actualizar la descripción del servidor como resultado.
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# Archivo 'lib/mongo/server/monitor.rb', línea 206 def ¡escanear! # Normalmente, el hilo en segundo plano invocaría este método. # Pero también es posible invocar scan! directamente sobre un monitor. # Permitir que solo se realice un escaneo a la vez. @mutex.sincronizar hacer throttle_scan_frequency! begin Resultado = do_scan rescate StandardError => e run_sdam_flow({}, scan_error: e) else run_sdam_flow(Resultado) end end end |
#¡stop! ⇒ true | false
Detener el hilo en segundo plano y esperar a que finalice durante un tiempo razonable.
151 152 153 154 155 156 157 158 159 160 |
# Archivo 'lib/mongo/server/monitor.rb', línea 151 def ¡detente! stop_push_monitor! # Reenviar el valor de retorno de super super.tocar hacer # Importante: la desconexión debería ocurrir después del hilo en segundo plano # termina. Conexión&.¡desconectar! end end |
#stop_push_monitor! ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
179 180 181 182 183 184 185 186 |
# Archivo 'lib/mongo/server/monitor.rb', línea 179 def stop_push_monitor! @update_mutex.sincronizar hacer si @push_monitor @push_monitor.¡detente! @push_monitor = nulo end end end |
#to_s ⇒ Object
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
265 266 267 |
# Archivo 'lib/mongo/server/monitor.rb', línea 265 def to_s "#<#{self.clase.name}:#{object_id} #{servidor.address}>" end |