类:Mongo::Server::Monitor Private
- 继承:
-
对象
- 对象
- Mongo::Server::Monitor
- 扩展方式:
- 可转发
- 包括:
- BackgroundThread 、 Event::Publisher 、 Loggable
- 定义于:
- 构建/Ruby-driver-v2.19/lib/ mongo / 服务器/ 监控,
构建/Ruby-driver-v2.19/lib/ mongo / 服务器/ 监控/connection.rb,
构建/ruby-driver-v2.19/lib/ mongo / 服务器/ 监控/app_metadata.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
负责通过 hello 命令定期轮询服务器,以使服务器保持最新状态。
是否所有工作都在背景线程中进行,以免干扰驾驶员执行的其他操作。
在命名空间下定义
类: AppMetadata , Connection
常量摘要折叠
- DEFAULT_HEARTBEAT_INTERVAL =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
服务器状态刷新之间的默认间隔为10秒。
10.冻结
- MIN_SCAN_INTERVAL =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
强制服务器扫描之间的最小时间间隔。 minHeartbeatFrequencyMS 是否位于 SDAM 规范中。
0.5.冻结
- RTT_WEIGHT_FACTOR =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
已弃用。将在版本3.0中删除。
用于计算平均移动往返时间的权重因子 (Alpha)。
0.2.冻结
Loggable中包含的常量
实例属性摘要折叠
-
#连接⇒ Mongo::Server::Monitor::Connection
只读
private
连接 要使用的连接。
-
#监控⇒ 监控
只读
private
监控 监控。
-
# options ⇒ 哈希
只读
private
选项服务器选项。
-
#server ⇒ Server
只读
private
MongoDB Server此监控器正在监控的服务器。
Event::Publisher中包含的属性
实例方法摘要折叠
- # create_push_monitor! (topology_version) ⇒ 对象 private
-
# do_work ⇒ 对象
private
检查服务器。
-
# heartbeat_interval ⇒ Float
private
定期服务器检查之间的间隔。
-
#initialize (服务器, event_listeners, 监控, options = {}) ⇒ 监控
构造函数
private
创建新的服务器监控。
-
# push_monitor ⇒ Server::PushMonitor | nil
private
推送监视器(如果正在使用)。
-
#重新启动! ⇒ 线程
private
除非当前线程处于活动状态,否则重新启动服务器监控。
- # run_sdam_flow (result, awaited: false, scan_error: nil) ⇒ 对象 private
-
# scan! ⇒ 说明
private
对具有限制的服务器执行检查,并更新服务器的描述和平均往返时间。
-
# stop! ⇒ true | false
停止背景线程,并在合理的时间内等待其终止。
- # stop_push_monitor! ⇒ 对象 private
- # to_s ⇒ 对象 private
包含在BackgroundThread中的方法
Loggable中包含的方法
#log_debug 、 #log_error 、 #log_ Fatal 、 #log_info 、 #log_warn 、 #logger
Event::Publisher中包含的方法
构造函数详情
#initialize (服务器, event_listeners, 监控, options = {}) ⇒监控
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
决不能在服务器之外直接实例化监视器。
创建新的服务器监控。
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第78行 def 初始化(server, event_listeners, 监控, = {}) 除非 监控.is_a?(监控) 提高 ArgumentError, "错误的监控类型: #{ 监控 . Inspect } " end 除非 [:app_metadata] 提高 ArgumentError, ' App 元数据 is required ' end 除非 [:push_monitor_app_metadata] 提高 ArgumentError, '需要推送监控应用元数据' end @server = server @event_listeners = event_listeners @monitoring = 监控 @options = .冻结 @mutex = 互斥锁.new @sdam_mutex = 互斥锁.new @next_earliest_scan = @next_wanted_scan = 时间.now @update_mutex = 互斥锁.new end |
实例属性详细信息
# connection ⇒ Mongo::Server::Monitor::Connection (readonly)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 connection 要使用的连接。
103 104 105 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第103行 def 连接 @connection end |
# Monitoring ⇒监控(只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回监控 监控。
125 126 127 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第125行 def 监控 @monitoring end |
# options ⇒哈希(只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 options服务器选项。
106 107 108 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第106行 def @options end |
# 服务器 ⇒ Server (readonly)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回服务器此监控正在监控的服务器。
100 101 102 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第100行 def server @server end |
实例方法详细信息
# create_push_monitor! (topology_version) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第173行 def create_push_monitor!(topology_version) @update_mutex.同步 do if @push_monitor && !@push_monitor.运行? @push_monitor = nil end @push_monitor ||= PushMonitor.new( self, topology_version, 监控, **Utils.shallow_symbolize_keys(.合并(merge)( socket_timeout: heartbeat_interval + 连接.socket_timeout, app_metadata: [:push_monitor_app_metadata], check_document: @connection.check_document )), ) end end |
# do_work ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
检查服务器。
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第138行 def do_work scan! # @next_wanted_scan 可能会被推送监控更新。 # 但是,我们需要检查终止标志,以便监控 # 线程在请求时退出。 循环 do 增量 = @next_wanted_scan - 时间.now if 增量 > 0 已发出信号 = server.scan_semaphore.wait(增量) if 已发出信号 || @stop_requested 中断 end else 中断 end end end |
# heartbeat_interval ⇒ Float
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
定期服务器检查之间的间隔。
111 112 113 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第111行 def heartbeat_interval [:heartbeat_interval] || DEFAULT_HEARTBEAT_INTERVAL end |
# push_monitor ⇒ Server::PushMonitor | nil
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 推送监控(如果正在使用)。
129 130 131 132 133 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第129行 def push_monitor @update_mutex.同步 do @push_monitor end end |
#重新启动! ⇒线程
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
除非当前线程处于活动状态,否则重新启动服务器监控。
267 268 269 270 271 272 273 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第267行 def 重新启动! if @thread && @thread.alive? @thread else 运行! end end |
# run_sdam_flow (result, awaited: false, scan_error: nil) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第236行 def run_sdam_flow(结果, 等待: false, scan_error: nil) @sdam_mutex.同步 do old_description = server.描述 new_description = 说明.new(server.地址, 结果, average_round_trip_time: server.round_trip_time_averager.average_round_trip_time ) server.集群.run_sdam_flow(server.描述, new_description, 等待: 等待, scan_error: scan_error) server.描述.点击 do |new_description| 除非 等待 if new_description.未知? && !old_description.未知? @next_earliest_scan = @next_wanted_scan = 时间.now else @next_earliest_scan = 时间.now + MIN_SCAN_INTERVAL @next_wanted_scan = 时间.now + heartbeat_interval end end end end end |
# scan! ⇒说明
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果系统时钟向后移动,此方法可能会休眠很长时间。
此方法的返回值已弃用。 在版本3.0.0中,此方法没有返回值。
对具有限制的服务器执行检查,并更新服务器的描述和平均往返时间。
如果在 MIN_SCAN_INTERVAL 秒内检查服务器,则休眠直到自上次检查以来已经过 MIN_SCAN_INTERVAL 秒。 然后执行检查,其中包括在受监控的服务器上运行 hello 并更新服务器描述。
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第219行 def scan! # 通常,背景线程会调用此方法。 # 但也可以调用 scan!直接在监控上显示。 # 一次只允许执行一次扫描。 @mutex.同步 do Threat_scan_Frequency! 开始 结果 = do_scan 救援 => e run_sdam_flow({}, scan_error: e) else run_sdam_flow(结果) end end end |
# stop! ⇒ true | false
停止背景线程,并在合理的时间内等待其终止。
162 163 164 165 166 167 168 169 170 171 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第162行 def 停止! stop_push_monitor! # 转发父节点的返回值 超.点击 do # 重要提示:断开连接应在后台线程之后发生 # 终止。 连接&。断开连接! end end |
# stop_push_monitor! ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
192 193 194 195 196 197 198 199 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第192行 def stop_push_monitor! @update_mutex.同步 do if @push_monitor @push_monitor.停止! @push_monitor = nil end end end |
# to_s ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
275 276 277 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第275行 def to_s " #< #{ self . class . name } : #{ object_id } #{ 服务器 .解决} > " end |