module ElasticAPM::Spies::ElasticsearchSpy::Ext

def perform_request(method, path, *args, &block)

def perform_request(method, path, *args, &block)
  unless ElasticAPM.current_transaction
    return super(method, path, *args, &block)
  end
  name = format(NAME_FORMAT, method, path)
  statement = []
  statement << { params: args&.[](0) }
  if ElasticAPM.agent.config.capture_elasticsearch_queries
    unless args[1].nil? || args[1].empty?
      body =
        ElasticAPM::Spies::ElasticsearchSpy
        .sanitizer.strip_from(args[1])
      statement << { body: body }
    end
  end
  context = Span::Context.new(
    db: { statement: statement.reduce({}, :merge).to_json },
    destination: {
      service: {
        name: SUBTYPE,
        resource: SUBTYPE,
        type: TYPE
      }
    }
  )
  ElasticAPM.with_span(
    name,
    TYPE,
    subtype: SUBTYPE,
    context: context
  ) { super(method, path, *args, &block) }
end