# To run this profiling: # gem install ruby-prof # ruby -Ilib petstore_profiling.rb require 'petstore' require 'ruby-prof' class PetstoreProfiling attr_accessor :total, :new_pet_id, :output_file def initialize @total = 5 @new_pet_id = 50002 @output_file = './petstore_profiling.output' end def call_apis pet_api = Petstore::PetApi.new ### ADD PET ### pet = Petstore::Pet.new pet.id = new_pet_id pet.name = "profiler" pet.status = "available" pet.photo_urls = ["http://profiler.com"] # new tag tag = Petstore::Tag.new tag.id = new_pet_id # use the same id as pet tag.name = "profile tag 1" # new category category = Petstore::Category.new category.id = new_pet_id # use the same id as pet category.name = "profile category 1" pet.tags = [tag] pet.category = category # add a new pet (model) pet_api.add_pet(body: pet) ### GET PET ### pet = pet_api.get_pet_by_id(new_pet_id) ### UPDATE PET WITH FORM ### pet_api.update_pet_with_form(new_pet_id, name: 'new profiler', status: 'sold') ### DELETE PET ### pet_api.delete_pet(new_pet_id) rescue Petstore::ApiError => e puts "Caught error: #{e.message}" puts "HTTP response headers: #{e.response_headers}" puts "HTTP response body: #{e.response_body}" puts "HTTP status code: #{e.code}" end def run puts "Running profiling... (total: #{@total})" RubyProf.start @total.times { call_apis } result = RubyProf.stop printer = RubyProf::FlatPrinter.new(result) File.open(@output_file, 'w') do |file| printer.print(file) end puts "Profiling results written to #{@output_file}" end end if __FILE__ == $0 profiling = PetstoreProfiling.new profiling.run end