I am told that my software runs too slowly in production. To identify the line of code that's slow, I would insert puts statements as shown below, and the logs would indicate timestamps for the output, by looking at the time intervals of the log I can see which statements take the most time.
Is there a better way to go about this? I found some gems that measure at "function" level, but I'm aiming for "statement level" measurements.
def process_api_carts(shop)
  puts "B7BEC BCAA here2.1"
  pager = Pager.new(shop.shopify_client, '/admin/checkouts.json', 'checkouts') do |request|
    request.params['updated_at_min'] = 1.day.ago.to_s(:abandoned_cart_timestamp)
  end
  puts "B7BEC BCAA here2.2"
  carts = pager.to_a
  puts "B7BEC BCAA here2.3"
  carts.sort_by! do |cart|
    Time.zone.parse(cart['created_at'])
  end
  puts "B7BEC BCAA here2.4"
  carts.reverse!
  puts "B7BEC BCAA here2.5"
  # Some carts don't have a customer record attached. Don't know why
  carts.reject! do |cart|
    cart['customer'].nil?
  end
  puts "B7BEC BCAA here2.6"
  carts.uniq! do |cart|
    cart['customer']['id']
  end
  puts "B7BEC BCAA here2.7"
  carts.each do |checkout|
    begin
      puts "B7BEC BCAA here2.8"
      abandoned_cart = shop.abandoned_carts.create(
        body: checkout.to_json,
        shopify_id: checkout['id']
      )
      puts "B7BEC BCAA here2.9"
      shop.events.create(
        topic: Events::CartAbandoned::TOPIC,
        body: {
          type: 'api',
          abandoned_cart_id: abandoned_cart.id
        }.to_json
      )
      puts "B7BEC BCAA here2.10"
    end
  end
end
 
    