self.prepended

in lib/elastic_apm/spies/s3.rb [80:118]


        def self.prepended(mod)
          
          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