module TingYun::Instrumentation::Mongo
Public Instance Methods
ensure_index_with_tingyun(spec, opts = {}, &block)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 71 def ensure_index_with_tingyun(spec, opts = {}, &block) klass_name, *metrics = tingyun_generate_metrics(:ensureIndex) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, opts, method(:record_mongo_duration), klass_name) do ensure_index_without_tingyun(spec, opts, &block) end end
hook_instrument_method(target_class)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 24 def hook_instrument_method(target_class) target_class.class_eval do require 'ting_yun/agent/method_tracer_helpers' def record_mongo_duration(duration) state = TingYun::Agent::TransactionState.tl_get if state state.timings.mon_duration = state.timings.mon_duration + duration * 1000 end end def tingyun_host_port return @db.connection.host_port if self.instance_variable_defined? :@db return @host_to_try if self.instance_variable_defined? :@host_to_try return ['Unknown', 'Unknown'] end def tingyun_generate_metrics(operation, payload = nil) payload ||= { :collection => self.name, :database => self.db.name } TingYun::Instrumentation::Support::MetricTranslator.metrics_for(operation, payload, tingyun_host_port) end def instrument_with_tingyun(name, payload = {}, &block) klass_name, *metrics = tingyun_generate_metrics(name, payload) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, payload, method(:record_mongo_duration), klass_name) do instrument_without_tingyun(name, payload, &block) end end alias_method :instrument_without_tingyun, :instrument alias_method :instrument, :instrument_with_tingyun end end
hook_instrument_methods()
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 16 def hook_instrument_methods hook_instrument_method(::Mongo::Collection) hook_instrument_method(::Mongo::Connection) hook_instrument_method(::Mongo::Cursor) hook_instrument_method(::Mongo::CollectionWriter) if defined?(::Mongo::CollectionWriter) end
install_mongo_instrumentation()
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 11 def install_mongo_instrumentation hook_instrument_methods instrument end
instrument()
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 59 def instrument ::Mongo::Collection.class_eval do def save_with_tingyun(doc, opts = {}, &block) y klass_name, *metrics = tingyun_generate_metrics(:save) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, opts, method(:record_mongo_duration), klass_name) do save_without_tingyun(doc, opts, &block) end end alias_method :save_without_tingyun, :save alias_method :save, :save_with_tingyun def ensure_index_with_tingyun(spec, opts = {}, &block) klass_name, *metrics = tingyun_generate_metrics(:ensureIndex) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, opts, method(:record_mongo_duration), klass_name) do ensure_index_without_tingyun(spec, opts, &block) end end alias_method :ensure_index_without_tingyun, :ensure_index alias_method :ensure_index, :ensure_index_with_tingyun end end
instrument_with_tingyun(name, payload = {}, &block)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 46 def instrument_with_tingyun(name, payload = {}, &block) klass_name, *metrics = tingyun_generate_metrics(name, payload) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, payload, method(:record_mongo_duration), klass_name) do instrument_without_tingyun(name, payload, &block) end end
record_mongo_duration(duration)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 28 def record_mongo_duration(duration) state = TingYun::Agent::TransactionState.tl_get if state state.timings.mon_duration = state.timings.mon_duration + duration * 1000 end end
save_with_tingyun(doc, opts = {}, &block)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 61 def save_with_tingyun(doc, opts = {}, &block) y klass_name, *metrics = tingyun_generate_metrics(:save) TingYun::Agent::MethodTracerHelpers.trace_execution_scoped(metrics, opts, method(:record_mongo_duration), klass_name) do save_without_tingyun(doc, opts, &block) end end
tingyun_generate_metrics(operation, payload = nil)
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 41 def tingyun_generate_metrics(operation, payload = nil) payload ||= { :collection => self.name, :database => self.db.name } TingYun::Instrumentation::Support::MetricTranslator.metrics_for(operation, payload, tingyun_host_port) end
tingyun_host_port()
click to toggle source
# File lib/ting_yun/instrumentation/mongo.rb, line 35 def tingyun_host_port return @db.connection.host_port if self.instance_variable_defined? :@db return @host_to_try if self.instance_variable_defined? :@host_to_try return ['Unknown', 'Unknown'] end