config.ru 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. require 'erb'
  2. require 'active_record'
  3. require 'yaml'
  4. MAX_PK = 10_000
  5. QUERIES_MIN = 1
  6. QUERIES_MAX = 500
  7. Bundler.require :default
  8. db_config = YAML.load(ERB.new(File.read('config/database.yml')).result)[ENV['RACK_ENV']]
  9. ActiveRecord::Base.establish_connection(db_config)
  10. class World < ActiveRecord::Base
  11. self.table_name = 'World'
  12. end
  13. module Acme
  14. class HelloWorld < Grape::API
  15. get '/json' do
  16. {message:'Hello, World!'}
  17. end
  18. end
  19. class PlainText < Grape::API
  20. content_type :plain, 'text/plain'
  21. format :plain
  22. get '/plaintext' do
  23. 'Hello, World!'
  24. end
  25. end
  26. class DatabaseQueries < Grape::API
  27. helpers do
  28. def bounded_queries
  29. queries = params[:queries].to_i
  30. return QUERIES_MIN if queries < QUERIES_MIN
  31. return QUERIES_MAX if queries > QUERIES_MAX
  32. queries
  33. end
  34. # Return a random number between 1 and MAX_PK
  35. def rand1
  36. rand(MAX_PK).succ
  37. end
  38. end
  39. get '/db' do
  40. ActiveRecord::Base.connection_pool.with_connection do
  41. World.find(rand1).attributes
  42. end
  43. end
  44. get '/query' do
  45. ActiveRecord::Base.connection_pool.with_connection do
  46. Array.new(bounded_queries) do
  47. World.find(rand1)
  48. end
  49. end
  50. end
  51. get '/updates' do
  52. worlds =
  53. ActiveRecord::Base.connection_pool.with_connection do
  54. Array.new(bounded_queries) do
  55. world = World.find(rand1)
  56. new_value = rand1
  57. new_value = rand1 while new_value == world.randomNumber
  58. world.update(randomNumber: new_value)
  59. world
  60. end
  61. end
  62. end
  63. end
  64. class API < Grape::API
  65. before do
  66. header 'Date', Time.now.httpdate
  67. header 'Server', 'WebServer'
  68. end
  69. content_type :json, 'application/json'
  70. format :json
  71. mount ::Acme::HelloWorld
  72. mount ::Acme::PlainText
  73. mount ::Acme::DatabaseQueries
  74. end
  75. end
  76. run Acme::API