类:Mongo::Server::Monitor Private

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
包括:
BackgroundThreadEvent::PublisherLoggable
定义于:
构建/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 命令定期轮询服务器,以使服务器保持最新状态。

是否所有工作都在背景线程中进行,以免干扰驾驶员执行的其他操作。

由于:

  • 2.0.0

在命名空间下定义

类: AppMetadata , Connection

常量摘要折叠

DEFAULT_HEARTBEAT_INTERVAL =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

服务器状态刷新之间的默认间隔为10秒。

由于:

  • 2.0.0

10.冻结
MIN_SCAN_INTERVAL =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

强制服务器扫描之间的最小时间间隔。 minHeartbeatFrequencyMS 是否位于 SDAM 规范中。

由于:

  • 2.0.0

0.5.冻结
RTT_WEIGHT_FACTOR =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

已弃用。

将在版本3.0中删除。

用于计算平均移动往返时间的权重因子 (Alpha)。

由于:

  • 2.0.0

0.2.冻结

Loggable中包含的常量

Loggable::PREFIX

实例属性摘要折叠

Event::Publisher中包含的属性

#event_listeners

实例方法摘要折叠

包含在BackgroundThread中的方法

# 运行! , # 运行?

Loggable中包含的方法

#log_debug#log_error#log_ Fatal#log_info#log_warn#logger

Event::Publisher中包含的方法

#publish

构造函数详情

#initialize (服务器, event_listeners, 监控, options = {}) ⇒监控

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

决不能在服务器之外直接实例化监视器。

创建新的服务器监控。

例子:

创建服务器监控。

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

参数:

  • server ( MongoDB Server )

    要监控的服务器。

  • event_listeners ( Event::Listeners )

    事件侦听器。

  • 监控 (监控)

    监控

  • 选项 哈希 (默认为: {}

    选项。

选项哈希 ( options ):

  • :connect_timeout 浮点

    建立监控连接时使用的超时时间(以秒为单位)。

  • :heartbeat_interval 浮点

    定期服务器检查之间的间隔。

  • :logger 记录器

    要使用的自定义记录器。

  • :monitor_app_metadata Mongo::Server::Monitor::AppMetadata

    用于常规监控连接的元数据。

  • :push_monitor_app_metadata Mongo::Server::Monitor::AppMetadata

    用于推送监视器连接的元数据。

  • :socket_timeout 浮点

    在监控连接上执行操作的超时时间(以秒为单位)。

由于:

  • 2.0.0



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

实例属性详细信息

# connectionMongo::Server::Monitor::Connection (readonly)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 connection 要使用的连接。

返回:

由于:

  • 2.0.0



103
104
105
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第103行

def 连接
  @connection
end

# Monitoring监控(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回监控 监控。

返回:

  • (监控)

    监控 监控。

由于:

  • 2.0.0



125
126
127
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第125行

def 监控
  @monitoring
end

# options哈希(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 options服务器选项。

返回:

  • (哈希)

    options服务器选项。

由于:

  • 2.0.0



106
107
108
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/monitor.rb', 第106行

def 选项
  @options
end

# 服务器Server (readonly)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回服务器此监控正在监控的服务器。

返回:

  • ( MongoDB Server )

    服务器此监控正在监控的服务器。

由于:

  • 2.0.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

检查服务器。

由于:

  • 2.0.0



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_intervalFloat

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

定期服务器检查之间的间隔。

返回:

  • (浮点)

    心跳间隔,以秒为单位。

由于:

  • 2.0.0



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_monitorServer::PushMonitor | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 推送监控(如果正在使用)。

返回:

由于:

  • 2.0.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

除非当前线程处于活动状态,否则重新启动服务器监控。

例子:

重新启动监控。

monitor.restart!

返回:

  • (线程)

    监控运行所在的线程。

由于:

  • 2.1.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 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
# 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 并更新服务器描述。

返回:

  • (描述)

    更新后的描述。

由于:

  • 2.0.0



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

停止背景线程,并在合理的时间内等待其终止。

返回:

  • ( true | false )

    线程是否已终止。

由于:

  • 2.0.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



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