rails_benchmark_suite 0.2.9 → 0.3.1

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/CHANGELOG.md +65 -0
  4. data/Gemfile.lock +29 -1
  5. data/README.md +103 -10
  6. data/bin/rails_benchmark_suite +35 -12
  7. data/docs/images/report_v0_3_1.png +0 -0
  8. data/lib/dummy/app/models/benchmark_job.rb +7 -0
  9. data/lib/dummy/app/models/benchmark_post.rb +9 -0
  10. data/lib/dummy/app/models/benchmark_user.rb +9 -0
  11. data/lib/dummy/app/views/rails_benchmark_suite/heft_view.html.erb +11 -0
  12. data/lib/dummy/config/benchmark_database.yml +16 -0
  13. data/lib/rails_benchmark_suite/configuration.rb +22 -0
  14. data/lib/rails_benchmark_suite/database_manager.rb +56 -0
  15. data/lib/rails_benchmark_suite/db_setup.rb +3 -0
  16. data/lib/rails_benchmark_suite/models/user.rb +4 -3
  17. data/lib/rails_benchmark_suite/reporter.rb +215 -5
  18. data/lib/rails_benchmark_suite/reporters/html_reporter.rb +52 -0
  19. data/lib/rails_benchmark_suite/runner.rb +46 -191
  20. data/lib/rails_benchmark_suite/schema.rb +5 -5
  21. data/lib/rails_benchmark_suite/templates/report.html.erb +187 -0
  22. data/lib/rails_benchmark_suite/version.rb +1 -1
  23. data/lib/rails_benchmark_suite/workload_runner.rb +158 -0
  24. data/lib/rails_benchmark_suite/{suites/active_record_suite.rb → workloads/active_record_workload.rb} +7 -7
  25. data/lib/rails_benchmark_suite/{suites/cache_heft_suite.rb → workloads/cache_heft_workload.rb} +2 -2
  26. data/lib/rails_benchmark_suite/{suites/image_heft_suite.rb → workloads/image_heft_workload.rb} +3 -4
  27. data/lib/rails_benchmark_suite/{suites/job_heft_suite.rb → workloads/job_heft_workload.rb} +4 -4
  28. data/lib/rails_benchmark_suite/workloads/view_heft_workload.rb +36 -0
  29. data/lib/rails_benchmark_suite.rb +3 -22
  30. data/rails_benchmark_suite.gemspec +7 -2
  31. metadata +92 -10
  32. data/lib/rails_benchmark_suite/suites/view_heft_suite.rb +0 -44
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_benchmark_suite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - RailsBenchmarkSuite Contributors
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-01-03 00:00:00.000000000 Z
10
+ date: 2026-01-04 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: benchmark-ips
@@ -121,6 +121,62 @@ dependencies:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
123
  version: '1.0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: tty-spinner
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.9'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.9'
138
+ - !ruby/object:Gem::Dependency
139
+ name: tty-table
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.12'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.12'
152
+ - !ruby/object:Gem::Dependency
153
+ name: tty-box
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.7'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.7'
166
+ - !ruby/object:Gem::Dependency
167
+ name: pastel
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.8'
173
+ type: :runtime
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.8'
124
180
  - !ruby/object:Gem::Dependency
125
181
  name: bundler
126
182
  requirement: !ruby/object:Gem::Requirement
@@ -163,8 +219,23 @@ dependencies:
163
219
  - - "~>"
164
220
  - !ruby/object:Gem::Version
165
221
  version: '5.0'
166
- description: Measures the 'Heft' (processing power) of a machine using realistic Rails
167
- workloads.
222
+ - !ruby/object:Gem::Dependency
223
+ name: ostruct
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '0.6'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '0.6'
236
+ description: Measures the Rails Heft Index (RHI), a weighted performance score based
237
+ on realistic Rails 8+ workloads across Active Record, caching, views, jobs, and
238
+ image processing.
168
239
  email:
169
240
  - team@rails.org
170
241
  executables:
@@ -181,20 +252,31 @@ files:
181
252
  - README.md
182
253
  - Rakefile
183
254
  - bin/rails_benchmark_suite
255
+ - docs/images/report_v0_3_1.png
256
+ - lib/dummy/app/models/benchmark_job.rb
257
+ - lib/dummy/app/models/benchmark_post.rb
258
+ - lib/dummy/app/models/benchmark_user.rb
259
+ - lib/dummy/app/views/rails_benchmark_suite/heft_view.html.erb
260
+ - lib/dummy/config/benchmark_database.yml
184
261
  - lib/rails_benchmark_suite.rb
262
+ - lib/rails_benchmark_suite/configuration.rb
263
+ - lib/rails_benchmark_suite/database_manager.rb
185
264
  - lib/rails_benchmark_suite/db_setup.rb
186
265
  - lib/rails_benchmark_suite/models/post.rb
187
266
  - lib/rails_benchmark_suite/models/simulated_job.rb
188
267
  - lib/rails_benchmark_suite/models/user.rb
189
268
  - lib/rails_benchmark_suite/reporter.rb
269
+ - lib/rails_benchmark_suite/reporters/html_reporter.rb
190
270
  - lib/rails_benchmark_suite/runner.rb
191
271
  - lib/rails_benchmark_suite/schema.rb
192
- - lib/rails_benchmark_suite/suites/active_record_suite.rb
193
- - lib/rails_benchmark_suite/suites/cache_heft_suite.rb
194
- - lib/rails_benchmark_suite/suites/image_heft_suite.rb
195
- - lib/rails_benchmark_suite/suites/job_heft_suite.rb
196
- - lib/rails_benchmark_suite/suites/view_heft_suite.rb
272
+ - lib/rails_benchmark_suite/templates/report.html.erb
197
273
  - lib/rails_benchmark_suite/version.rb
274
+ - lib/rails_benchmark_suite/workload_runner.rb
275
+ - lib/rails_benchmark_suite/workloads/active_record_workload.rb
276
+ - lib/rails_benchmark_suite/workloads/cache_heft_workload.rb
277
+ - lib/rails_benchmark_suite/workloads/image_heft_workload.rb
278
+ - lib/rails_benchmark_suite/workloads/job_heft_workload.rb
279
+ - lib/rails_benchmark_suite/workloads/view_heft_workload.rb
198
280
  - rails_benchmark_suite.gemspec
199
281
  homepage: https://github.com/overnet/rails_benchmark_suite
200
282
  licenses:
@@ -219,5 +301,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
301
  requirements: []
220
302
  rubygems_version: 3.6.2
221
303
  specification_version: 4
222
- summary: Rails-style functionality & performance benchmark tool
304
+ summary: Rails Heft Index (RHI) - Hardware benchmarking using realistic workloads
223
305
  test_files: []
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "action_view"
4
- require "ostruct"
5
-
6
- # Benchmark Suite
7
-
8
-
9
- # Helper for the suite
10
- module RailsBenchmarkSuiteNumberHelper
11
- def self.number_with_delimiter(number)
12
- number.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
13
- end
14
- end
15
-
16
- RailsBenchmarkSuite.register_suite("View Heft", weight: 0.2) do
17
- # Setup context once
18
- @view_renderer ||= begin
19
- lookup_context = ActionView::LookupContext.new([File.expand_path(__dir__)])
20
- ActionView::Base.with_empty_template_cache.new(lookup_context, {}, nil)
21
- end
22
-
23
- # Workload: Render a complex ERB template
24
- template = <<~ERB
25
- <h1>Dashboard for <%= user.name %></h1>
26
- <ul>
27
- <% posts.each do |post| %>
28
- <li>
29
- <strong><%= post.title %></strong>
30
- <p><%= post.body.truncate(50) %></p>
31
- <small>Views: <%= RailsBenchmarkSuiteNumberHelper.number_with_delimiter(post.views) %></small>
32
- </li>
33
- <% end %>
34
- </ul>
35
- <footer>Generated at <%= Time.now.to_s %></footer>
36
- ERB
37
-
38
- # Dummy Objects
39
- user = OpenStruct.new(name: "Speedy")
40
- posts = 100.times.map { |i| OpenStruct.new(title: "Post #{i}", body: "Content " * 10, views: i * 1000) }
41
-
42
- # Execution
43
- @view_renderer.render(inline: template, locals: { user: user, posts: posts })
44
- end