module Mongo::Monitoring::Publishable
Defines behaviour for an object that can publish monitoring events.
@since 2.1.0
Attributes
monitoring[R]
@return [ Monitoring ] monitoring The monitoring.
Public Instance Methods
publish_command(messages, operation_id = Monitoring.next_operation_id) { |messages| ... }
click to toggle source
Publish a command event to the global monitoring.
@example Publish a command event.
publish_command do |messages| # ... end
@param [ Array<Message> ] messages The messages.
@return [ Object ] The result of the yield.
@since 2.1.0
# File lib/mongo/monitoring/publishable.rb, line 39 def publish_command(messages, operation_id = Monitoring.next_operation_id) start = Time.now message = messages.first message.set_request_id payload = message.payload send_duration = duration(start) command_started(address, operation_id, payload) receive_start = Time.now begin result = yield(messages) total_duration = duration(receive_start) + send_duration command_completed(result, address, operation_id, payload, total_duration) result rescue Exception => e total_duration = duration(receive_start) + send_duration command_failed(nil, address, operation_id, payload, e.message, total_duration) raise e end end
publish_event(topic, event)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 59 def publish_event(topic, event) monitoring.succeeded(topic, event) end
publish_sdam_event(topic, event)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 63 def publish_sdam_event(topic, event) return unless monitoring? log_debug("EVENT: #{event.inspect}") monitoring.succeeded(topic, event) end
Private Instance Methods
command_completed(result, address, operation_id, payload, duration)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 79 def command_completed(result, address, operation_id, payload, duration) document = result ? (result.documents || []).first : nil if error?(document) parser = Error::Parser.new(document) command_failed(document, address, operation_id, payload, parser.message, duration) else command_succeeded(result, address, operation_id, payload, duration) end end
command_failed(failure, address, operation_id, payload, message, duration)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 102 def command_failed(failure, address, operation_id, payload, message, duration) monitoring.failed( Monitoring::COMMAND, Event::CommandFailed.generate(address, operation_id, payload, message, failure, duration) ) end
command_started(address, operation_id, payload)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 72 def command_started(address, operation_id, payload) monitoring.started( Monitoring::COMMAND, Event::CommandStarted.generate(address, operation_id, payload) ) end
command_succeeded(result, address, operation_id, payload, duration)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 89 def command_succeeded(result, address, operation_id, payload, duration) monitoring.succeeded( Monitoring::COMMAND, Event::CommandSucceeded.generate( address, operation_id, payload, result ? result.payload : nil, duration ) ) end
duration(start)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 109 def duration(start) Time.now - start end
error?(document)
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 113 def error?(document) document && (document['ok'] == 0 || document.key?('$err')) end
monitoring?()
click to toggle source
# File lib/mongo/monitoring/publishable.rb, line 117 def monitoring? options[:monitoring] != false end