hello_world.rb 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. require 'active_record'
  2. Bundler.require :default
  3. set :logging, false
  4. ActiveRecord::Base.logger = nil
  5. set :activerecord_logger, nil
  6. set :static, false
  7. set :template_engine, :slim
  8. Slim::Engine.set_default_options format: :html5, sort_attrs: false
  9. # Specify the encoder - otherwise, sinatra/json inefficiently
  10. # attempts to load one of several on each request
  11. set :json_encoder => :to_json
  12. # Don't prefix JSON results with { "world": {...} }
  13. ActiveRecord::Base.include_root_in_json = false
  14. db_config = { :database => 'hello_world', :username => 'benchmarkdbuser', :password => 'benchmarkdbpass', :pool => 256, :timeout => 5000 }
  15. adapter = RUBY_PLATFORM == 'java' ? 'jdbcmysql' : 'mysql2'
  16. set :database, db_config.merge(:adapter => adapter, :host => ENV['DB_HOST'])
  17. # The sinatra-activerecord gem registers before and after filters that
  18. # call expensive synchronized ActiveRecord methods on every request to
  19. # verify every connection in the pool, even for routes that don't use
  20. # the database. Clear those filters and handle connection management
  21. # ourselves, which is what applications seeking high throughput with
  22. # ActiveRecord need to do anyway.
  23. settings.filters[:before].clear
  24. settings.filters[:after].clear
  25. after do
  26. # Add mandatory HTTP headers to every response
  27. response['Server'] ||= ENV['WEB_SERVER'].freeze
  28. response['Date'] ||= Time.now.to_s
  29. end
  30. class World < ActiveRecord::Base
  31. self.table_name = "World"
  32. end
  33. class Fortune < ActiveRecord::Base
  34. self.table_name = "Fortune"
  35. end
  36. get '/json' do
  37. json :message => 'Hello, World!'
  38. end
  39. get '/plaintext' do
  40. response['Content-type'] = 'text/plain'
  41. 'Hello, World!'
  42. end
  43. get '/db' do
  44. worlds = ActiveRecord::Base.connection_pool.with_connection do
  45. World.find(Random.rand(10000) + 1)
  46. end
  47. json(worlds)
  48. end
  49. get '/queries' do
  50. queries = (params[:queries] || 1).to_i
  51. queries = 1 if queries < 1
  52. queries = 500 if queries > 500
  53. worlds = ActiveRecord::Base.connection_pool.with_connection do
  54. (1..queries).map do
  55. World.find(Random.rand(10000) + 1)
  56. end
  57. end
  58. json(worlds)
  59. end
  60. get '/fortunes' do
  61. @fortunes = Fortune.all
  62. @fortunes << Fortune.new(:id => 0, :message => "Additional fortune added at request time.")
  63. @fortunes = @fortunes.sort_by { |x| x.message }
  64. slim :fortunes
  65. end
  66. get '/updates' do
  67. queries = (params[:queries] || 1).to_i
  68. queries = 1 if queries < 1
  69. queries = 500 if queries > 500
  70. worlds = ActiveRecord::Base.connection_pool.with_connection do
  71. worlds = (1..queries).map do
  72. world = World.find(Random.rand(10000) + 1)
  73. world.randomNumber = Random.rand(10000) + 1
  74. World.update(world.id, :randomNumber => world.randomNumber)
  75. world
  76. end
  77. worlds
  78. end
  79. json(worlds)
  80. end