boot.rb 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # frozen_string_literal: true
  2. require "bundler/setup"
  3. require "time"
  4. require "oj"
  5. MAX_PK = 10_000
  6. QUERY_RANGE = (1..MAX_PK).freeze
  7. ALL_IDS = QUERY_RANGE.to_a
  8. QUERIES_MIN = 1
  9. QUERIES_MAX = 500
  10. SEQUEL_NO_ASSOCIATIONS = true
  11. # Use the OJ gem instead of the JSON one
  12. Oj.mimic_JSON()
  13. SERVER_STRING =
  14. if defined?(PhusionPassenger)
  15. [
  16. PhusionPassenger::SharedConstants::SERVER_TOKEN_NAME,
  17. PhusionPassenger::VERSION_STRING
  18. ].join("/").freeze
  19. elsif defined?(Puma)
  20. Puma::Const::PUMA_SERVER_STRING
  21. elsif defined?(Unicorn)
  22. Unicorn::HttpParser::DEFAULTS["SERVER_SOFTWARE"]
  23. end
  24. Bundler.require(:default) # Load core modules
  25. CONTENT_TYPE = 'Content-Type'
  26. JSON_TYPE = 'application/json'
  27. HTML_TYPE = 'text/html; charset=utf-8'
  28. PLAINTEXT_TYPE = 'text/plain'
  29. DATE_HEADER = 'Date'
  30. SERVER_HEADER = 'Server'
  31. def connect(dbtype)
  32. Bundler.require(dbtype) # Load database-specific modules
  33. adapters = {
  34. mysql: {
  35. mri: "mysql2"
  36. },
  37. postgresql: {
  38. mri: "postgres"
  39. }
  40. }
  41. opts = {}
  42. # Determine threading/thread pool size and timeout
  43. if defined?(Puma) &&
  44. (threads = Puma.cli_config.options.fetch(:max_threads)) > 1
  45. opts[:max_connections] = (2 * Math.log(threads)).floor
  46. opts[:pool_timeout] = 10
  47. else
  48. Sequel.single_threaded = true
  49. end
  50. Sequel.connect "%{adapter}://%{host}/%{database}?user=%{user}&password=%{password}" %
  51. {
  52. adapter:
  53. adapters.fetch(dbtype).fetch(:mri),
  54. host: "tfb-database",
  55. database: "hello_world",
  56. user: "benchmarkdbuser",
  57. password: "benchmarkdbpass"
  58. },
  59. opts
  60. end
  61. DB = connect ENV.fetch("DBTYPE").to_sym
  62. # Define ORM models
  63. class World < Sequel.Model(:World)
  64. def_column_alias(:randomnumber, :randomNumber) if DB.database_type == :mysql
  65. end
  66. class Fortune < Sequel.Model(:Fortune)
  67. # Allow setting id to zero (0) per benchmark requirements
  68. unrestrict_primary_key
  69. end
  70. [World, Fortune].each(&:freeze)
  71. DB.freeze