rubybench_runner 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +44 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/rubybench_runner +101 -0
- data/lib/rubybench_runner.rb +17 -0
- data/lib/rubybench_runner/base_runner.rb +233 -0
- data/lib/rubybench_runner/configurations.rb +68 -0
- data/lib/rubybench_runner/dependencies_checker.rb +39 -0
- data/lib/rubybench_runner/helpers_version +1 -0
- data/lib/rubybench_runner/rails/.bundle/config +4 -0
- data/lib/rubybench_runner/rails/benchmarks/assets/javascripts/application.js +3 -0
- data/lib/rubybench_runner/rails/benchmarks/assets/javascripts/one.js.erb +5 -0
- data/lib/rubybench_runner/rails/benchmarks/assets/javascripts/two.js +1 -0
- data/lib/rubybench_runner/rails/benchmarks/form_partials/first.html.erb +17 -0
- data/lib/rubybench_runner/rails/benchmarks/form_partials/heavy/_item.html.erb +12 -0
- data/lib/rubybench_runner/rails/benchmarks/form_partials/heavy/_second.html.erb +7 -0
- data/lib/rubybench_runner/rails/benchmarks/form_partials/heavy/_third.html.erb +8 -0
- data/lib/rubybench_runner/rails/benchmarks/form_partials/layouts/application.html.erb +29 -0
- data/lib/rubybench_runner/rails/benchmarks/partials/first.html.erb +19 -0
- data/lib/rubybench_runner/rails/benchmarks/partials/heavy/_item.html.erb +0 -0
- data/lib/rubybench_runner/rails/benchmarks/partials/heavy/_second.html.erb +7 -0
- data/lib/rubybench_runner/rails/benchmarks/partials/heavy/_third.html.erb +3 -0
- data/lib/rubybench_runner/rails/benchmarks/partials/layouts/application.html.erb +29 -0
- data/lib/rubybench_runner/rails/benchmarks/support/benchmark_rails.rb +14 -0
- data/lib/rubybench_runner/rails/benchmarks/support/echo_channel.rb +13 -0
- data/lib/rubybench_runner/rails/benchmarks/support/request_helper.rb +9 -0
- data/lib/rubybench_runner/rails/benchmarks/support/url_generation_base.rb +79 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/_form.html.erb +29 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/edit.html.erb +6 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/index.html.erb +32 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/index.json.jbuilder +4 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/new.html.erb +5 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/show.html.erb +19 -0
- data/lib/rubybench_runner/rails/benchmarks/views/posts/show.json.jbuilder +1 -0
- data/lib/rubybench_runner/rails_runner.rb +91 -0
- data/lib/rubybench_runner/support/benchmark_runner.rb +62 -0
- data/lib/rubybench_runner/support/helpers.rb +11 -0
- data/lib/rubybench_runner/support/setup/.bundle/config +4 -0
- data/lib/rubybench_runner/support/setup/Gemfile +11 -0
- data/lib/rubybench_runner/support/setup/bm_create_string_columns_setup.rb +16 -0
- data/lib/rubybench_runner/support/setup/bm_destroy_setup.rb +12 -0
- data/lib/rubybench_runner/support/setup/bm_discourse_setup.rb +164 -0
- data/lib/rubybench_runner/support/setup/bm_finders_setup.rb +37 -0
- data/lib/rubybench_runner/support/setup/bm_preload_setup.rb +41 -0
- data/lib/rubybench_runner/support/setup/bm_save_setup.rb +12 -0
- data/lib/rubybench_runner/support/setup/bm_scope_all_setup.rb +32 -0
- data/lib/rubybench_runner/support/setup/bm_scope_where_setup.rb +30 -0
- data/lib/rubybench_runner/support/setup/bm_validations_invalid_setup.rb +18 -0
- data/lib/rubybench_runner/support/setup/bm_validations_valid_setup.rb +30 -0
- data/lib/rubybench_runner/support/setup/bm_with_default_scope_setup.rb +29 -0
- data/lib/rubybench_runner/version.rb +5 -0
- data/rubybench_runner.gemspec +34 -0
- metadata +200 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
module RubybenchRunner
|
2
|
+
class Configurations
|
3
|
+
CONFIG_PATH = File.join(Dir.home, ".rubybench_runner_config")
|
4
|
+
CONFIG_VERSION = 1
|
5
|
+
MYSQL_MAPPING = {
|
6
|
+
user: :username,
|
7
|
+
dbname: :database
|
8
|
+
}
|
9
|
+
DEFAULTS = {
|
10
|
+
postgres: {
|
11
|
+
user: "postgres",
|
12
|
+
dbname: "rubybench",
|
13
|
+
host: "localhost",
|
14
|
+
port: 5432,
|
15
|
+
password: nil
|
16
|
+
},
|
17
|
+
mysql2: {
|
18
|
+
user: "root",
|
19
|
+
dbname: "rubybench",
|
20
|
+
host: "localhost",
|
21
|
+
port: 3306,
|
22
|
+
password: nil
|
23
|
+
},
|
24
|
+
config_version: CONFIG_VERSION
|
25
|
+
}
|
26
|
+
def initialize(mysql_map: false)
|
27
|
+
@mysql_map = mysql_map
|
28
|
+
if !File.exists?(CONFIG_PATH)
|
29
|
+
File.write(CONFIG_PATH, YAML.dump(DEFAULTS))
|
30
|
+
end
|
31
|
+
|
32
|
+
if !config_changed?
|
33
|
+
puts "Error: You haven't configured how RubybenchRunner should connect to the database servers on your machine. Please update the #{CONFIG_PATH} file to have the right configurations."
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def [](key)
|
39
|
+
key = key.to_s
|
40
|
+
result = config
|
41
|
+
key.split(".").each do |k|
|
42
|
+
result = result[k] || result[k.to_sym]
|
43
|
+
end
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
def config
|
48
|
+
content = File.read(CONFIG_PATH)
|
49
|
+
if content != @content
|
50
|
+
@content = content
|
51
|
+
@parsed = YAML.load(@content)
|
52
|
+
if @mysql_map
|
53
|
+
MYSQL_MAPPING.each do |old, new|
|
54
|
+
next if !@parsed[:mysql2].key?(old)
|
55
|
+
val = @parsed[:mysql2][old]
|
56
|
+
@parsed[:mysql2][new] = val
|
57
|
+
@parsed[:mysql2].delete(old)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
@parsed
|
62
|
+
end
|
63
|
+
|
64
|
+
def config_changed?
|
65
|
+
File.read(CONFIG_PATH) != YAML.dump(DEFAULTS)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module RubybenchRunner
|
2
|
+
# TODO: ideally those should be fetched from rubybench.org API
|
3
|
+
CURRENT_PG_VERSION = "9.6"
|
4
|
+
CURRENT_MYSQL_VERSION = "5.6.24"
|
5
|
+
|
6
|
+
class MissingDependency < StandardError; end
|
7
|
+
class DependenciesChecker
|
8
|
+
def self.check
|
9
|
+
check_pg
|
10
|
+
check_mysql
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.check_pg
|
14
|
+
output = `pg_config --version`.strip
|
15
|
+
output =~ /^PostgreSQL ([\d.]+)/
|
16
|
+
version = $1
|
17
|
+
if version != CURRENT_PG_VERSION
|
18
|
+
warn("PostgreSQL", version, CURRENT_PG_VERSION)
|
19
|
+
end
|
20
|
+
rescue Errno::ENOENT
|
21
|
+
raise MissingDependency.new("Postgres doesn't seem to be installed on your system. Please install it and run the benchmarks again")
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.check_mysql
|
25
|
+
version = `mysql_config --version`.strip
|
26
|
+
if version != CURRENT_MYSQL_VERSION
|
27
|
+
warn("MySQL", version, CURRENT_MYSQL_VERSION)
|
28
|
+
end
|
29
|
+
rescue Errno::ENOENT
|
30
|
+
raise MissingDependency.new("MySQL doesn't seem to be installed on your system. Please install it and run the benchmarks again")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.warn(program, installed, recommended)
|
34
|
+
puts <<~ALERT
|
35
|
+
Warning: rubybench.org is currently running version #{recommended} of #{program}, you're running version #{installed}.
|
36
|
+
ALERT
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
1
|
@@ -0,0 +1 @@
|
|
1
|
+
alert()
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= content_for(:title, "my title") %>
|
2
|
+
<%= content_for(:meta) { "embedded content" * 20 } %>
|
3
|
+
<% 3.times do |record| %>
|
4
|
+
<%= record %>
|
5
|
+
<p>
|
6
|
+
London is the capital city of England. It is the most populous city in the United Kingdom,
|
7
|
+
with a metropolitan area of over 13 million inhabitants.
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
Standing on the River Thames, London has been a major settlement for two millennia,
|
11
|
+
its history going back to its founding by the Romans, who named it Londinium.
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<%= render partial: 'third', locals: { users: users } %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= render collection: posts, partial: 'item', as: :post %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= yield(:title) %></title>
|
4
|
+
<meta><%= yield(:meta) %></meta>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
|
8
|
+
<div id="header">
|
9
|
+
<h1>City Gallery</h1>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div id="nav">
|
13
|
+
London<br>
|
14
|
+
Paris<br>
|
15
|
+
Tokyo<br>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div id="section">
|
19
|
+
<h1>London</h1>
|
20
|
+
<%= yield %>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div id="footer">
|
24
|
+
Copyright © W3Schools.com
|
25
|
+
</div>
|
26
|
+
|
27
|
+
</body>
|
28
|
+
|
29
|
+
</html>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= content_for(:title, "my title") %>
|
2
|
+
<%= content_for(:meta) { "embedded content" * 20 } %>
|
3
|
+
<% records.times do |record| %>
|
4
|
+
<%= record %>
|
5
|
+
<p>
|
6
|
+
London is the capital city of England. It is the most populous city in the United Kingdom,
|
7
|
+
with a metropolitan area of over 13 million inhabitants.
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
Standing on the River Thames, London has been a major settlement for two millennia,
|
11
|
+
its history going back to its founding by the Romans, who named it Londinium.
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<%= render partial: 'second', locals: { posts: posts, users: users } %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= render collections: posts, partial: 'item' %>
|
18
|
+
|
19
|
+
<%= debug @more_records %>
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= yield(:title) %></title>
|
4
|
+
<meta><%= yield(:meta) %></meta>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
|
8
|
+
<div id="header">
|
9
|
+
<h1>City Gallery</h1>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div id="nav">
|
13
|
+
London<br>
|
14
|
+
Paris<br>
|
15
|
+
Tokyo<br>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div id="section">
|
19
|
+
<h1>London</h1>
|
20
|
+
<%= yield %>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div id="footer">
|
24
|
+
Copyright © W3Schools.com
|
25
|
+
</div>
|
26
|
+
|
27
|
+
</body>
|
28
|
+
|
29
|
+
</html>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rails'
|
2
|
+
|
3
|
+
require_relative '../../../support/benchmark_runner'
|
4
|
+
require_relative '../../../support/helpers'
|
5
|
+
|
6
|
+
module Benchmark
|
7
|
+
module Rails
|
8
|
+
def rails(label = nil, version: ::Rails.version.to_s, time:, disable_gc: true, warmup: 3, &block)
|
9
|
+
Benchmark::Runner.run(label, version: version, time: time, disable_gc: disable_gc, warmup: warmup, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
extend Benchmark::Rails
|
14
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'action_controller/railtie'
|
5
|
+
|
6
|
+
class NullLogger < Logger
|
7
|
+
def initialize(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(*args, &block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class BenchmarkApp < Rails::Application
|
15
|
+
routes.append do
|
16
|
+
namespace :editor do
|
17
|
+
resources :professionals
|
18
|
+
resource :message
|
19
|
+
end
|
20
|
+
|
21
|
+
scope path: '/prices' do
|
22
|
+
get 'info' => 'prices#info'
|
23
|
+
end
|
24
|
+
|
25
|
+
scope '/coupon' do
|
26
|
+
get 'some' => 'coupons#some'
|
27
|
+
end
|
28
|
+
|
29
|
+
root to: "home#index"
|
30
|
+
|
31
|
+
resources :topics do
|
32
|
+
resources :messages do
|
33
|
+
resources :likes
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
resources :professionals, only: [:index] do
|
38
|
+
collection do
|
39
|
+
match 'category/:specialization_id', to: 'professionals#by_category', as: :by_category, via: [:get, :post]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
get "/listings/:any" => redirect("/properties/%{any}"), as: :listing_redirect
|
44
|
+
|
45
|
+
constraints id: /\d+(.*)/ do
|
46
|
+
get '/residential/*addressing_slug/:id',
|
47
|
+
to: 'residential_listings#show',
|
48
|
+
as: :residential
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
config.secret_token = "s"*30
|
53
|
+
config.secret_key_base = 'foo'
|
54
|
+
config.consider_all_requests_local = false
|
55
|
+
|
56
|
+
# simulate production
|
57
|
+
config.cache_classes = true
|
58
|
+
config.eager_load = true
|
59
|
+
config.action_controller.perform_caching = true
|
60
|
+
|
61
|
+
# otherwise deadlock occured
|
62
|
+
config.middleware.delete "Rack::Lock"
|
63
|
+
|
64
|
+
# to disable log files
|
65
|
+
config.logger = NullLogger.new
|
66
|
+
config.active_support.deprecation = :log
|
67
|
+
end
|
68
|
+
|
69
|
+
BenchmarkApp.initialize!
|
70
|
+
|
71
|
+
class Router
|
72
|
+
include BenchmarkApp.routes.url_helpers
|
73
|
+
|
74
|
+
def default_url_options
|
75
|
+
{
|
76
|
+
host: 'railsperf.io'
|
77
|
+
}
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= form_for(@post) do |f| %>
|
2
|
+
<% if @post.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @post.errors.full_messages.each do |message| %>
|
8
|
+
<li><%= message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :title %><br>
|
16
|
+
<%= f.text_field :title %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :body %><br>
|
20
|
+
<%= f.text_field :body %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :author %><br>
|
24
|
+
<%= f.text_field :author %>
|
25
|
+
</div>
|
26
|
+
<div class="actions">
|
27
|
+
<%= f.submit %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<h1>Listing Posts</h1>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th>Title</th>
|
9
|
+
<th>Body</th>
|
10
|
+
<th>Author</th>
|
11
|
+
<th colspan="3"></th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
|
15
|
+
<tbody>
|
16
|
+
<%= posts_path %>
|
17
|
+
<% @posts.each do |post| %>
|
18
|
+
<tr>
|
19
|
+
<td><%= post.title %></td>
|
20
|
+
<td><%= post.body %></td>
|
21
|
+
<td><%= post.author %></td>
|
22
|
+
<td><%= link_to 'Show', post %></td>
|
23
|
+
<td><%= link_to 'Edit', edit_post_path(post) %></td>
|
24
|
+
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
25
|
+
</tr>
|
26
|
+
<% end %>
|
27
|
+
</tbody>
|
28
|
+
</table>
|
29
|
+
|
30
|
+
<br>
|
31
|
+
|
32
|
+
<%= link_to 'New Post', new_post_path %>
|