class Atatus::Spies::ElasticsearchSpy

@api private

Constants

NAME_FORMAT
SUBTYPE
TYPE

Public Class Methods

sanitizer() click to toggle source
# File lib/atatus/spies/elasticsearch.rb, line 29
def self.sanitizer
  @sanitizer ||= Atatus::Transport::Filters::HashSanitizer.new
end

Public Instance Methods

install() click to toggle source
# File lib/atatus/spies/elasticsearch.rb, line 33
def install
  if defined?(::Elasticsearch) &&
      defined?(::Elasticsearch::Transport) &&
      defined?(::Elasticsearch::Transport::Client)

    ::Elasticsearch::Transport::Client.class_eval do
      alias perform_request_without_apm perform_request

      def perform_request(method, path, *args, &block)
        unless Atatus.current_transaction
          return perform_request_without_apm(method, path, *args, &block)
        end

        name = format(NAME_FORMAT, method, path)
        statement = []

        statement << { params: args&.[](0) }

        if Atatus.agent.config.capture_elasticsearch_queries
          unless args[1].nil? || args[1].empty?
            statement << {
              body: Atatus::Spies::ElasticsearchSpy.sanitizer.strip_from!(args[1])
            }
          end
        end

        context = Span::Context.new(
          db: { statement: statement.reduce({}, :merge).to_json },
          destination: {
            name: SUBTYPE,
            resource: SUBTYPE,
            type: TYPE
          }
        )

        Atatus.with_span(
          name,
          TYPE,
          subtype: SUBTYPE,
          context: context
        ) { perform_request_without_apm(method, path, *args, &block) }
      end
    end

  end
end
perform_request(method, path, *args, &block) click to toggle source
# File lib/atatus/spies/elasticsearch.rb, line 41
def perform_request(method, path, *args, &block)
  unless Atatus.current_transaction
    return perform_request_without_apm(method, path, *args, &block)
  end

  name = format(NAME_FORMAT, method, path)
  statement = []

  statement << { params: args&.[](0) }

  if Atatus.agent.config.capture_elasticsearch_queries
    unless args[1].nil? || args[1].empty?
      statement << {
        body: Atatus::Spies::ElasticsearchSpy.sanitizer.strip_from!(args[1])
      }
    end
  end

  context = Span::Context.new(
    db: { statement: statement.reduce({}, :merge).to_json },
    destination: {
      name: SUBTYPE,
      resource: SUBTYPE,
      type: TYPE
    }
  )

  Atatus.with_span(
    name,
    TYPE,
    subtype: SUBTYPE,
    context: context
  ) { perform_request_without_apm(method, path, *args, &block) }
end