text: from opbeat.instrumentation.packages.base import AbstractInstrumentedModule
  from opbeat.traces import trace
  from opbeat.utils.compat import urlparse
  
  
  class BotocoreInstrumentation(AbstractInstrumentedModule):
      name = 'botocore'
  
      instrument_list = [
          ('botocore.client', 'BaseClient._make_api_call'),
      ]
  
      def call(self, module, method, wrapped, instance, args, kwargs):
          if 'operation_name' in kwargs:
              operation_name = kwargs['operation_name']
          else:
              operation_name = args[0]
  
          target_endpoint = instance._endpoint.host
          parsed_url = urlparse.urlparse(target_endpoint)
          service, region, _ = parsed_url.hostname.split('.', 2)
  
          signature = '{}:{}'.format(service, operation_name)
          extra_data = {
              'service': service,
              'region': region,
              'operation': operation_name,
          }
  
          with trace(signature, 'ext.http.aws', extra_data, leaf=True):
              return wrapped(*args, **kwargs)
  