module NewRelic::Agent::Instrumentation::Elasticsearch
Constants
- INSTRUMENTATION_NAME
- OPERATION
- PRODUCT_NAME
Public Instance Methods
perform_request_with_tracing(_method, _path, params = {}, body = nil, _headers = nil, *_args) { || ... }
click to toggle source
We need the positional arguments ‘params` and `body` to capture the nosql statement *args protects the instrumented method if new arguments are added to perform_request
# File lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb, line 17 def perform_request_with_tracing(_method, _path, params = {}, body = nil, _headers = nil, *_args) return yield unless NewRelic::Agent::Tracer.tracing_enabled? NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME) segment = NewRelic::Agent::Tracer.start_datastore_segment( product: PRODUCT_NAME, operation: nr_operation || OPERATION, host: nr_hosts[:host], port_path_or_id: nr_hosts[:port], database_name: nr_cluster_name ) begin NewRelic::Agent::Tracer.capture_segment_error(segment) { yield } ensure if segment segment.notice_nosql_statement(nr_reported_query(body || params)) segment.finish end end end
Private Instance Methods
nr_cluster_name()
click to toggle source
# File lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb, line 59 def nr_cluster_name return @nr_cluster_name if @nr_cluster_name return if nr_hosts.empty? NewRelic::Agent.disable_all_tracing do @nr_cluster_name ||= perform_request('GET', '/').body['cluster_name'] end rescue StandardError => e NewRelic::Agent.logger.error('Failed to get cluster name for elasticsearch', e) nil end
nr_hosts()
click to toggle source
# File lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb, line 71 def nr_hosts @nr_hosts ||= (transport.hosts.first || NewRelic::EMPTY_HASH) end
nr_operation()
click to toggle source
# File lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb, line 42 def nr_operation operation_index = caller_locations.index do |line| string = line.to_s string.include?('lib/elasticsearch/api') && !string.include?(OPERATION) end return nil unless operation_index caller_locations[operation_index].to_s.split('`')[-1].gsub(/\W/, '') end
nr_reported_query(query)
click to toggle source
# File lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb, line 52 def nr_reported_query(query) return unless NewRelic::Agent.config[:'elasticsearch.capture_queries'] return query unless NewRelic::Agent.config[:'elasticsearch.obfuscate_queries'] NewRelic::Agent::Datastores::NosqlObfuscator.obfuscate_statement(query) end