lib/new_relic/agent/instrumentation/mongo.rb in newrelic_rpm-3.16.0.318 vs lib/new_relic/agent/instrumentation/mongo.rb in newrelic_rpm-3.16.1.320

- old
+ new

@@ -63,27 +63,34 @@ end rescue => e NewRelic::Agent.logger.debug("Exception during Mongo statement gathering", e) end - def new_relic_generate_metrics(operation, payload = nil) - payload ||= { :collection => self.name, :database => self.db.name } - NewRelic::Agent::Datastores::Mongo::MetricTranslator.metrics_for(operation, payload) + def new_relic_default_payload + { :collection => self.name, :database => self.db.name } end + def new_relic_start_segment name, payload + product = NewRelic::Agent::Datastores::Mongo::MetricTranslator::MONGO_PRODUCT_NAME + op_and_col = NewRelic::Agent::Datastores::Mongo::MetricTranslator.operation_and_collection_for name, payload + if op_and_col + NewRelic::Agent::Transaction.start_datastore_segment product, *op_and_col + end + end + def instrument_with_new_relic_trace(name, payload = {}, &block) - metrics = new_relic_generate_metrics(name, payload) + segment = new_relic_start_segment name, payload - trace_execution_scoped(metrics) do - t0 = Time.now - + begin result = NewRelic::Agent.disable_all_tracing do instrument_without_new_relic_trace(name, payload, &block) end - new_relic_notice_statement(t0, payload, name) + new_relic_notice_statement(segment.start_time, payload, name) if segment result + ensure + segment.finish if segment end end alias_method :instrument_without_new_relic_trace, :instrument alias_method :instrument, :instrument_with_new_relic_trace @@ -91,20 +98,21 @@ end def instrument_save ::Mongo::Collection.class_eval do def save_with_new_relic_trace(doc, opts = {}, &block) - metrics = new_relic_generate_metrics(:save) - trace_execution_scoped(metrics) do - t0 = Time.now + segment = new_relic_start_segment :save, new_relic_default_payload + begin result = NewRelic::Agent.disable_all_tracing do save_without_new_relic_trace(doc, opts, &block) end - new_relic_notice_statement(t0, doc, :save) + new_relic_notice_statement(segment.start_time, doc, :save) if segment result + ensure + segment.finish if segment end end alias_method :save_without_new_relic_trace, :save alias_method :save, :save_with_new_relic_trace @@ -112,14 +120,13 @@ end def instrument_ensure_index ::Mongo::Collection.class_eval do def ensure_index_with_new_relic_trace(spec, opts = {}, &block) - metrics = new_relic_generate_metrics(:ensureIndex) - trace_execution_scoped(metrics) do - t0 = Time.now + segment = new_relic_start_segment :ensureIndex, new_relic_default_payload + begin result = NewRelic::Agent.disable_all_tracing do ensure_index_without_new_relic_trace(spec, opts, &block) end spec = case spec @@ -129,11 +136,13 @@ { spec => 1 } else spec.dup end - new_relic_notice_statement(t0, spec, :ensureIndex) + new_relic_notice_statement(segment.start_time, spec, :ensureIndex) if segment result + ensure + segment.finish if segment end end alias_method :ensure_index_without_new_relic_trace, :ensure_index alias_method :ensure_index, :ensure_index_with_new_relic_trace