derailed_benchmarks 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -24
- data/CHANGELOG.md +6 -1
- data/README.md +1 -1
- data/derailed_benchmarks.gemspec +2 -1
- data/gemfiles/{rails_3_2.gemfile → rails_5_2.gemfile} +1 -1
- data/gemfiles/{rails_4_0.gemfile → rails_6_0.gemfile} +1 -1
- data/lib/derailed_benchmarks/core_ext/kernel_require.rb +16 -7
- data/lib/derailed_benchmarks/require_tree.rb +1 -1
- data/lib/derailed_benchmarks/tasks.rb +24 -4
- data/lib/derailed_benchmarks/version.rb +1 -1
- data/test/derailed_benchmarks/core_ext/kernel_require_test.rb +3 -2
- data/test/fixtures/require/parent_one.rb +1 -0
- data/test/integration/tasks_test.rb +2 -2
- data/test/rails_app/config/initializers/secret_token.rb +5 -1
- data/test/test_helper.rb +7 -2
- metadata +21 -11
- data/gemfiles/rails_4_1.gemfile +0 -13
- data/gemfiles/rails_4_2.gemfile +0 -13
- data/gemfiles/rails_5_0.gemfile +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc052693e6702c9fae168ebd5af966409edfd862cb10f493eeeef6f2b56c702a
|
4
|
+
data.tar.gz: e68aa2d95326f0d462b6f531318277180f2f155098c930fec1f7d9d5055a90c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da2a2ddb042b1d7d50e2d6ef70dc281fbe09bac107b763e64fe26bb47b30a3a0b46580e618f7c97c29c689b3b0981333a902dbb32f3c8df340a6cc2c54db4cf9
|
7
|
+
data.tar.gz: 113502784b03d89cafc13ed4856db140352a83ab5e68393e5a09bd9f7942505aa0aec33d8b35858e97d873c2e6435fe1cdb140ae1915dbd60a4d7d2c82129310
|
data/.travis.yml
CHANGED
@@ -1,36 +1,17 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.3
|
5
|
-
- 2.4.0
|
3
|
+
- 2.5.5
|
4
|
+
- 2.6.3
|
6
5
|
- ruby-head
|
6
|
+
|
7
7
|
gemfile:
|
8
|
-
- gemfiles/rails_3_2.gemfile
|
9
|
-
- gemfiles/rails_4_0.gemfile
|
10
|
-
- gemfiles/rails_4_1.gemfile
|
11
|
-
- gemfiles/rails_4_2.gemfile
|
12
|
-
- gemfiles/rails_5_0.gemfile
|
13
8
|
- gemfiles/rails_5_1.gemfile
|
9
|
+
- gemfiles/rails_5_2.gemfile
|
10
|
+
- gemfiles/rails_6_0.gemfile
|
14
11
|
|
15
12
|
before_install:
|
16
13
|
- gem install bundler
|
17
14
|
|
18
15
|
matrix:
|
19
|
-
# Ruby 2.4 doesn't work with devise + rails 3/4, so just skip the builds to
|
20
|
-
# avoid travis runs we expect to fail. This is due to the Integer/Fixnum
|
21
|
-
# change if I am not mistaken.
|
22
|
-
exclude:
|
23
|
-
- rvm: 2.4.0
|
24
|
-
gemfile: gemfiles/rails_3_2.gemfile
|
25
|
-
- rvm: 2.4.0
|
26
|
-
gemfile: gemfiles/rails_4_0.gemfile
|
27
|
-
- rvm: 2.4.0
|
28
|
-
gemfile: gemfiles/rails_4_1.gemfile
|
29
|
-
- rvm: ruby-head
|
30
|
-
gemfile: gemfiles/rails_3_2.gemfile
|
31
|
-
- rvm: ruby-head
|
32
|
-
gemfile: gemfiles/rails_4_0.gemfile
|
33
|
-
- rvm: ruby-head
|
34
|
-
gemfile: gemfiles/rails_4_1.gemfile
|
35
16
|
allow_failures:
|
36
17
|
- rvm: ruby-head
|
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# A Log of Changes!
|
2
2
|
|
3
|
+
## 1.3.6
|
4
|
+
|
5
|
+
- `require_relative` is now measured [commit](https://github.com/schneems/derailed_benchmarks/commit/af11bcc46a4fa24f79e4897a51034927a56e077e)
|
6
|
+
- Fix bug preventing a specific Rails 6 file from being loaded (https://github.com/schneems/derailed_benchmarks/pull/134)
|
7
|
+
- `exit(1)` is called instead of raise (https://github.com/schneems/derailed_benchmarks/pull/127)
|
8
|
+
|
3
9
|
## [1.3.5]
|
4
10
|
|
5
11
|
- Output of `test` now emits the word "derailed" for easier grepping.
|
6
12
|
- Fix "already initialized constant" warning
|
7
13
|
|
8
|
-
|
9
14
|
## [1.3.4]
|
10
15
|
|
11
16
|
- Allow for "warming up tasks" via WARM_COUNT env var #119
|
data/README.md
CHANGED
@@ -579,7 +579,7 @@ If you're trying to authenticate a non-user model, you'll need to write your own
|
|
579
579
|
|
580
580
|
### Custom Authentication Strategy
|
581
581
|
|
582
|
-
To implement your own authentication strategy You will need to create a class that [inherits from auth_helper.rb](lib/derailed_benchmarks/auth_helper.rb). You will need to implement a `setup` and a `call` method. You can see an example of [how the devise auth helper was written](lib/derailed_benchmarks/auth_helpers/devise.rb). You can put this code in your `perf.rake` file.
|
582
|
+
To implement your own authentication strategy You will need to create a class that [inherits from auth_helper.rb](lib/derailed_benchmarks/auth_helper.rb). You will need to implement a `setup` and a `call` method. You can see an example of [how the devise auth helper was written](lib/derailed_benchmarks/auth_helpers/devise.rb) and [how it can be done for Clearance](https://gist.github.com/zavan/f4d34dd86bf825db549a0ac28c7e10d5). You can put this code in your `perf.rake` file.
|
583
583
|
|
584
584
|
```ruby
|
585
585
|
class MyCustomAuth < DerailedBenchmarks::AuthHelper
|
data/derailed_benchmarks.gemspec
CHANGED
@@ -29,7 +29,8 @@ Gem::Specification.new do |gem|
|
|
29
29
|
gem.add_dependency "thor", "~> 0.19"
|
30
30
|
|
31
31
|
gem.add_development_dependency "capybara", "~> 2"
|
32
|
-
gem.add_development_dependency "
|
32
|
+
gem.add_development_dependency "m"
|
33
|
+
gem.add_development_dependency "rails", "> 3", "<= 6"
|
33
34
|
gem.add_development_dependency "devise", "> 3", "< 5"
|
34
35
|
gem.add_development_dependency "appraisal", "2.2.0"
|
35
36
|
end
|
@@ -9,6 +9,9 @@ ENV['CUT_OFF'] ||= "0.3"
|
|
9
9
|
# Monkey patch kernel to ensure that all `require` calls call the same
|
10
10
|
# method
|
11
11
|
module Kernel
|
12
|
+
|
13
|
+
private
|
14
|
+
|
12
15
|
alias :original_require :require
|
13
16
|
REQUIRE_STACK = []
|
14
17
|
|
@@ -16,13 +19,14 @@ module Kernel
|
|
16
19
|
Kernel.require(file)
|
17
20
|
end
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
def require_relative(file)
|
23
|
+
# Kernel.require_relative(file)
|
24
|
+
require File.expand_path("../#{file}", caller_locations(1, 1)[0].absolute_path)
|
25
|
+
end
|
26
|
+
|
23
27
|
class << self
|
24
28
|
alias :original_require :require
|
25
|
-
|
29
|
+
alias :original_require_relative :require_relative
|
26
30
|
end
|
27
31
|
|
28
32
|
# The core extension we use to measure require time of all requires
|
@@ -60,7 +64,12 @@ TOP_REQUIRE = DerailedBenchmarks::RequireTree.new("TOP")
|
|
60
64
|
REQUIRE_STACK.push(TOP_REQUIRE)
|
61
65
|
|
62
66
|
Kernel.define_singleton_method(:require) do |file|
|
63
|
-
measure_memory_impact(file)
|
67
|
+
measure_memory_impact(file) do |file|
|
68
|
+
# "source_annotation_extractor" is deprecated in Rails 6
|
69
|
+
# # if we don't skip the library it leads to a crash
|
70
|
+
# next if file == "rails/source_annotation_extractor" && Rails.version >= '6.0'
|
71
|
+
original_require(file)
|
72
|
+
end
|
64
73
|
end
|
65
74
|
|
66
75
|
# Don't forget to assign a cost to the top level
|
@@ -69,4 +78,4 @@ TOP_REQUIRE.cost = cost_before_requiring_anything
|
|
69
78
|
def TOP_REQUIRE.print_sorted_children(*args)
|
70
79
|
self.cost = GetProcessMem.new.mb - self.cost
|
71
80
|
super
|
72
|
-
end
|
81
|
+
end
|
@@ -96,14 +96,35 @@ namespace :perf do
|
|
96
96
|
def call_app(path = File.join("/", PATH_TO_HIT))
|
97
97
|
cmd = "curl #{CURL_HTTP_HEADER_ARGS} 'http://localhost:#{@port}#{path}' -s --fail 2>&1"
|
98
98
|
response = `#{cmd}`
|
99
|
-
|
99
|
+
unless $?.success?
|
100
|
+
STDERR.puts "Couldn't call app."
|
101
|
+
STDERR.puts "Bad request to #{cmd.inspect} \n\n***RESPONSE***:\n\n#{ response.inspect }"
|
102
|
+
|
103
|
+
FileUtils.mkdir_p("tmp")
|
104
|
+
File.open("tmp/fail.html", "w+") {|f| f.write response.body }
|
105
|
+
|
106
|
+
`open #{File.expand_path("tmp/fail.html")}` if ENV["DERAILED_DEBUG"]
|
107
|
+
|
108
|
+
exit(1)
|
109
|
+
end
|
100
110
|
end
|
101
111
|
else
|
102
112
|
@app = Rack::MockRequest.new(DERAILED_APP)
|
103
113
|
|
104
114
|
def call_app
|
105
115
|
response = @app.get(PATH_TO_HIT, RACK_HTTP_HEADERS)
|
106
|
-
|
116
|
+
if response.status != 200
|
117
|
+
STDERR.puts "Couldn't call app. Bad request to #{PATH_TO_HIT}! Resulted in #{response.status} status."
|
118
|
+
STDERR.puts "\n\n***RESPONSE BODY***\n\n"
|
119
|
+
STDERR.puts response.body
|
120
|
+
|
121
|
+
FileUtils.mkdir_p("tmp")
|
122
|
+
File.open("tmp/fail.html", "w+") {|f| f.write response.body }
|
123
|
+
|
124
|
+
`open #{File.expand_path("tmp/fail.html")}` if ENV["DERAILED_DEBUG"]
|
125
|
+
|
126
|
+
exit(1)
|
127
|
+
end
|
107
128
|
response
|
108
129
|
end
|
109
130
|
end
|
@@ -199,8 +220,7 @@ namespace :perf do
|
|
199
220
|
end
|
200
221
|
|
201
222
|
task :ram_over_time do
|
202
|
-
|
203
|
-
Rake::Task["perf:ram_over_time"].invoke
|
223
|
+
raise "Use mem_over_time"
|
204
224
|
end
|
205
225
|
|
206
226
|
desc "iterations per second"
|
@@ -22,8 +22,9 @@ class KernelRequireTest < ActiveSupport::TestCase
|
|
22
22
|
test "core extension profiles useage" do
|
23
23
|
require fixtures_dir("require/parent_one.rb")
|
24
24
|
parent = assert_node_in_parent("parent_one.rb", TOP_REQUIRE)
|
25
|
-
|
25
|
+
assert_node_in_parent("child_one.rb", parent)
|
26
26
|
child_two = assert_node_in_parent("child_two.rb", parent)
|
27
|
-
|
27
|
+
assert_node_in_parent("relative_child", parent)
|
28
|
+
assert_node_in_parent("raise_child.rb", child_two)
|
28
29
|
end
|
29
30
|
end
|
@@ -12,7 +12,7 @@ class TasksTest < ActiveSupport::TestCase
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def rake(cmd, options = {})
|
15
|
-
assert_success = options[:assert_success]
|
15
|
+
assert_success = options.key?(:assert_success) ? options[:assert_success] : true
|
16
16
|
env = options[:env] || {}
|
17
17
|
env_string = env.map {|key, value| "#{key.shellescape}=#{value.to_s.shellescape}" }.join(" ")
|
18
18
|
cmd = "env #{env_string} bundle exec rake -f perf.rake #{cmd} --trace"
|
@@ -48,7 +48,7 @@ class TasksTest < ActiveSupport::TestCase
|
|
48
48
|
|
49
49
|
test 'TEST_COUNT' do
|
50
50
|
result = rake "perf:test", env: { "TEST_COUNT" => 1 }
|
51
|
-
assert_match "1 requests", result
|
51
|
+
assert_match "1 derailed requests", result
|
52
52
|
end
|
53
53
|
|
54
54
|
test 'WARM_COUNT' do
|
@@ -4,4 +4,8 @@
|
|
4
4
|
# If you change this key, all old signed cookies will become invalid!
|
5
5
|
# Make sure the secret is at least 30 characters and all random,
|
6
6
|
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
-
Dummy::Application.config.
|
7
|
+
if Dummy::Application.config.respond_to?(:secret_key_base)
|
8
|
+
Dummy::Application.config.secret_key_base = 'bedc31c5fff702ea808045bbbc5123455f1c00ecd005a1f667a5f04332100a6abf22cfcee2b3d39b8f677c03bb6503cf1c3b65c1287b9e13bd0d20c6431ec6ab'
|
9
|
+
else
|
10
|
+
Dummy::Application.config.secret_token = 'bedc31c5fff702ea808045bbbc5123455f1c00ecd005a1f667a5f04332100a6abf22cfcee2b3d39b8f677c03bb6503cf1c3b65c1287b9e13bd0d20c6431ec6ab'
|
11
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -27,12 +27,17 @@ Capybara.default_driver = :rack_test
|
|
27
27
|
Capybara.default_selector = :css
|
28
28
|
|
29
29
|
# Run any available migration
|
30
|
-
|
30
|
+
if Rails.gem_version >= Gem::Version.new('5.2.0')
|
31
|
+
ActiveRecord::MigrationContext
|
32
|
+
.new(File.expand_path("../rails_app/db/migrate/", __FILE__))
|
33
|
+
.migrate
|
34
|
+
else
|
35
|
+
ActiveRecord::Migrator.migrate(File.expand_path("../rails_app/db/migrate/", __FILE__))
|
36
|
+
end
|
31
37
|
|
32
38
|
# Load support files
|
33
39
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
34
40
|
|
35
|
-
|
36
41
|
class ActiveSupport::IntegrationCase
|
37
42
|
def assert_has_content?(content)
|
38
43
|
assert has_content?(content), "Expected #{page.body} to include #{content.inspect}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: derailed_benchmarks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Schneeman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: heapy
|
@@ -128,6 +128,20 @@ dependencies:
|
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '2'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: m
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
146
|
name: rails
|
133
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,7 +149,7 @@ dependencies:
|
|
135
149
|
- - ">"
|
136
150
|
- !ruby/object:Gem::Version
|
137
151
|
version: '3'
|
138
|
-
- - "
|
152
|
+
- - "<="
|
139
153
|
- !ruby/object:Gem::Version
|
140
154
|
version: '6'
|
141
155
|
type: :development
|
@@ -145,7 +159,7 @@ dependencies:
|
|
145
159
|
- - ">"
|
146
160
|
- !ruby/object:Gem::Version
|
147
161
|
version: '3'
|
148
|
-
- - "
|
162
|
+
- - "<="
|
149
163
|
- !ruby/object:Gem::Version
|
150
164
|
version: '6'
|
151
165
|
- !ruby/object:Gem::Dependency
|
@@ -200,12 +214,9 @@ files:
|
|
200
214
|
- bin/derailed
|
201
215
|
- derailed_benchmarks.gemspec
|
202
216
|
- gemfiles/.bundle/config
|
203
|
-
- gemfiles/rails_3_2.gemfile
|
204
|
-
- gemfiles/rails_4_0.gemfile
|
205
|
-
- gemfiles/rails_4_1.gemfile
|
206
|
-
- gemfiles/rails_4_2.gemfile
|
207
|
-
- gemfiles/rails_5_0.gemfile
|
208
217
|
- gemfiles/rails_5_1.gemfile
|
218
|
+
- gemfiles/rails_5_2.gemfile
|
219
|
+
- gemfiles/rails_6_0.gemfile
|
209
220
|
- lib/derailed_benchmarks.rb
|
210
221
|
- lib/derailed_benchmarks/auth_helper.rb
|
211
222
|
- lib/derailed_benchmarks/auth_helpers/devise.rb
|
@@ -288,8 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
299
|
- !ruby/object:Gem::Version
|
289
300
|
version: '0'
|
290
301
|
requirements: []
|
291
|
-
|
292
|
-
rubygems_version: 2.7.6
|
302
|
+
rubygems_version: 3.0.3
|
293
303
|
signing_key:
|
294
304
|
specification_version: 4
|
295
305
|
summary: Benchmarks designed to performance test your ENTIRE site
|
data/gemfiles/rails_4_1.gemfile
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "rails", "~> 4.1.0"
|
6
|
-
|
7
|
-
group :development, :test do
|
8
|
-
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
|
10
|
-
gem "test-unit", "~> 3.0"
|
11
|
-
end
|
12
|
-
|
13
|
-
gemspec path: "../"
|
data/gemfiles/rails_4_2.gemfile
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "rails", "~> 4.2.0"
|
6
|
-
|
7
|
-
group :development, :test do
|
8
|
-
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
|
10
|
-
gem "test-unit", "~> 3.0"
|
11
|
-
end
|
12
|
-
|
13
|
-
gemspec path: "../"
|
data/gemfiles/rails_5_0.gemfile
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "rails", "~> 5.0.0"
|
6
|
-
|
7
|
-
group :development, :test do
|
8
|
-
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
9
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
|
10
|
-
gem "test-unit", "~> 3.0"
|
11
|
-
end
|
12
|
-
|
13
|
-
gemspec path: "../"
|