module ElasticAPM::Spies::S3Spy::Ext

@api private

Public Class Methods

prepended(mod) click to toggle source
Calls superclass method
# File lib/elastic_apm/spies/s3.rb, line 81
def self.prepended(mod)
  # Alias all available operations
  mod.api.operation_names.each do |operation_name|
    define_method(operation_name) do |params = {}, options = {}, &block|
      bucket_name = ElasticAPM::Spies::S3Spy.bucket_name(params)
      region = ElasticAPM::Spies::S3Spy.accesspoint_region(params) || config.region

      resource = "#{SUBTYPE}/#{bucket_name || 'unknown-bucket'}"
      context = ElasticAPM::Span::Context.new(
        db: {
          instance: config.region,
          type: SUBTYPE
        },
        destination: {
          address: config.endpoint.host,
          port: config.endpoint.port,
          service: {
            name: SUBTYPE,
            type: TYPE,
            resource: resource },
          cloud: { region: region }
        }
      )

      ElasticAPM.with_span(
        ElasticAPM::Spies::S3Spy.span_name(operation_name, bucket_name),
        TYPE,
        subtype: SUBTYPE,
        action: ElasticAPM::Spies::S3Spy.formatted_op_name(operation_name),
        context: context
      ) do
        ElasticAPM::Spies::S3Spy.without_net_http do
          super(params, options, &block)
        end
      end
    end
  end
end