|
@@ -2,6 +2,10 @@ require 'erb'
|
|
require 'active_record'
|
|
require 'active_record'
|
|
require 'yaml'
|
|
require 'yaml'
|
|
|
|
|
|
|
|
+MAX_PK = 10_000
|
|
|
|
+QUERIES_MIN = 1
|
|
|
|
+QUERIES_MAX = 500
|
|
|
|
+
|
|
Bundler.require :default
|
|
Bundler.require :default
|
|
|
|
|
|
db_config = YAML.load(ERB.new(File.read('config/database.yml')).result)[ENV['RACK_ENV']]
|
|
db_config = YAML.load(ERB.new(File.read('config/database.yml')).result)[ENV['RACK_ENV']]
|
|
@@ -28,38 +32,45 @@ module Acme
|
|
end
|
|
end
|
|
|
|
|
|
class DatabaseQueries < Grape::API
|
|
class DatabaseQueries < Grape::API
|
|
|
|
+ helpers do
|
|
|
|
+ def bounded_queries
|
|
|
|
+ queries = params[:queries].to_i
|
|
|
|
+ return QUERIES_MIN if queries < QUERIES_MIN
|
|
|
|
+ return QUERIES_MAX if queries > QUERIES_MAX
|
|
|
|
+ queries
|
|
|
|
+ end
|
|
|
|
+
|
|
|
|
+ # Return a random number between 1 and MAX_PK
|
|
|
|
+ def rand1
|
|
|
|
+ rand(MAX_PK).succ
|
|
|
|
+ end
|
|
|
|
+ end
|
|
|
|
+
|
|
get '/db' do
|
|
get '/db' do
|
|
ActiveRecord::Base.connection_pool.with_connection do
|
|
ActiveRecord::Base.connection_pool.with_connection do
|
|
- World.find(Random.rand(10000) + 1)
|
|
|
|
|
|
+ World.find(rand1).attributes
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
get '/query' do
|
|
get '/query' do
|
|
- queries = params[:queries].to_i
|
|
|
|
- queries = 1 if queries < 1
|
|
|
|
- queries = 500 if queries > 500
|
|
|
|
-
|
|
|
|
ActiveRecord::Base.connection_pool.with_connection do
|
|
ActiveRecord::Base.connection_pool.with_connection do
|
|
- (1..queries).map do
|
|
|
|
- World.find(Random.rand(10000) + 1)
|
|
|
|
|
|
+ Array.new(bounded_queries) do
|
|
|
|
+ World.find(rand1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
get '/updates' do
|
|
get '/updates' do
|
|
- queries = params[:queries].to_i
|
|
|
|
- queries = 1 if queries < 1
|
|
|
|
- queries = 500 if queries > 500
|
|
|
|
-
|
|
|
|
- ActiveRecord::Base.connection_pool.with_connection do
|
|
|
|
- worlds = (1..queries).map do
|
|
|
|
- world = World.find(Random.rand(10000) + 1)
|
|
|
|
- world.randomNumber = Random.rand(10000) + 1
|
|
|
|
- World.update(world.id, :randomNumber => world.randomNumber)
|
|
|
|
- world
|
|
|
|
|
|
+ worlds =
|
|
|
|
+ ActiveRecord::Base.connection_pool.with_connection do
|
|
|
|
+ Array.new(bounded_queries) do
|
|
|
|
+ world = World.find(rand1)
|
|
|
|
+ new_value = rand1
|
|
|
|
+ new_value = rand1 while new_value == world.randomNumber
|
|
|
|
+ world.update(randomNumber: new_value)
|
|
|
|
+ world
|
|
|
|
+ end
|
|
end
|
|
end
|
|
- worlds
|
|
|
|
- end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
@@ -68,7 +79,6 @@ module Acme
|
|
header 'Date', Time.now.httpdate
|
|
header 'Date', Time.now.httpdate
|
|
header 'Server', 'WebServer'
|
|
header 'Server', 'WebServer'
|
|
end
|
|
end
|
|
-
|
|
|
|
content_type :json, 'application/json'
|
|
content_type :json, 'application/json'
|
|
format :json
|
|
format :json
|
|
|
|
|