module ElasticAPM::Spies::DynamoDBSpy::Ext

def self.prepended(mod)

def self.prepended(mod)
  # Alias all available operations
  mod.api.operation_names.each do |operation_name|
    define_method(operation_name) do |params = {}, options = {}|
      cloud = ElasticAPM::Span::Context::Destination::Cloud.new(region: config.region)
      context = ElasticAPM::Span::Context.new(
        db: {
          instance: config.region,
          type: SUBTYPE,
          statement: params[:key_condition_expression]
        },
        destination: {
          cloud: cloud,
          service: {
            name: NAME,
            resource: SUBTYPE,
            type: TYPE
          }
        }
      )
      ElasticAPM.with_span(
        ElasticAPM::Spies::DynamoDBSpy.span_name(operation_name, params),
        TYPE,
        subtype: SUBTYPE,
        action: operation_name,
        context: context
      ) do
        ElasticAPM::Spies::DynamoDBSpy.without_net_http do
          super(params, options)
        end
      end
    end
  end
end