benchmarks_controller.rb 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # frozen_string_literal: true
  2. class BenchmarksController < ApplicationController
  3. ALL_DB_IDS = (1..10_000).to_a
  4. FORTUNES_TEMPLATE = ERB.new(Rage.root.join("app/views/fortunes.html.erb").read)
  5. before_action do
  6. headers["server"] = "rage"
  7. end
  8. def json
  9. render json: { message: "Hello, World!" }
  10. end
  11. def plaintext
  12. render plain: "Hello, World!"
  13. end
  14. def db
  15. render json: World.find(random_id)
  16. end
  17. def queries
  18. records = requested_ids.map do |id|
  19. World.find(id)
  20. end
  21. render json: records
  22. end
  23. def fortunes
  24. records = Fortune.pluck(:id, :message).map! { |id, message| { id:, message: } }
  25. records << Fortune.new(id: 0, message: "Additional fortune added at request time.")
  26. records.sort_by! { |record| record[:message] }
  27. render plain: FORTUNES_TEMPLATE.result(binding)
  28. headers["content-type"] = "text/html; charset=utf-8"
  29. end
  30. def updates
  31. records = requested_ids.map do |id|
  32. World.find(id)
  33. end
  34. updates = records.map do |record|
  35. new_value = random_id
  36. new_value = random_id until new_value != record.randomNumber
  37. record.randomNumber = new_value
  38. { id: record.id, randomnumber: new_value }
  39. end
  40. World.upsert_all(updates.sort_by! { |u| u[:id] })
  41. render json: records
  42. end
  43. private
  44. def requested_ids
  45. num = params[:queries].to_i
  46. if num > 500
  47. num = 500
  48. elsif num < 1
  49. num = 1
  50. end
  51. ALL_DB_IDS.sample(num)
  52. end
  53. def random_id
  54. Random.rand(9_999) + 1
  55. end
  56. end