class StackifyRubyAPM::Spies::DynamoDBSpy

@api private

Constants

TYPE

Public Instance Methods

install() click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/stackify_apm/spies/dynamo_db.rb, line 10
def install
  Aws::DynamoDB::Client.class_eval do
    # Alias all available operations
    api.operation_names.each do |operation_name|
      alias_method "#{operation_name}_without_apm", "#{operation_name}"

      define_method(operation_name) do |params = {}, options = {}|
        original_method = method("#{operation_name}_without_apm")
        return original_method.call(params, options) unless StackifyRubyAPM.current_transaction

        result = nil

        begin
          name = operation_name
          ctx = Span::Context.new(
            CATEGORY: 'Database',
            SUBCATEGORY: 'DynamoDB',
            ACTION: operation_name,
            URL: self.config.endpoint,
          )
        rescue Exception => e
          StackifyRubyAPM.agent.error "[DynamoDBSpy] Error: creating span context."
          StackifyRubyAPM.agent.error "[DynamoDBSpy] #{e.inspect}"
          return original_method.call(params, options)
        end

        StackifyRubyAPM.span name, TYPE, context: ctx do
          result = original_method.call(params, options)
          return result
        end
      end
    end
  end
end