global

def print_trace!(all: false, max: 5)

def print_trace!(all: false, max: 5)
  if @trace.empty?
    @loog.debug('GitHub API trace is empty')
  else
    grouped =
      @trace.select { |e| e[:duration] > 0.05 || all }.group_by do |entry|
        uri = URI.parse(entry[:url])
        query = uri.query
        query = "?#{query.ellipsized(40)}" if query
        "#{uri.scheme}://#{uri.host}#{uri.path}#{query}"
      end
    message = grouped
      .sort_by { |_path, entries| -entries.count }
      .map do |path, entries|
        [
          '  ',
          path.gsub(%r{^https://api.github.com/}, '/'),
          ': ',
          entries.count,
          " (#{entries.sum { |e| e[:duration] }.seconds})"
        ].join
      end
      .take(max)
      .join("\n")
    @loog.info(
      "GitHub API trace (#{grouped.count} URLs vs #{@trace.count} requests, " \
      "#{@origin.rate_limit!.remaining} quota left):\n#{message}"
    )
    @trace.clear
  end
end