paul_bunyan 2.0.0 → 2.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 +4 -4
- data/Appraisals +7 -0
- data/Dockerfile +11 -12
- data/Jenkinsfile +34 -6
- data/Rakefile +4 -2
- data/docker-compose.override.yml.example +2 -2
- data/gemfiles/rails_6.1.gemfile +7 -0
- data/gemfiles/rails_6.1.gemfile.lock +185 -0
- data/gemfiles/rails_7.0.gemfile +7 -0
- data/gemfiles/rails_7.0.gemfile.lock +184 -0
- data/lib/paul_bunyan/json_formatter.rb +7 -7
- data/lib/paul_bunyan/log_relayer.rb +25 -9
- data/lib/paul_bunyan/metadata_logging.rb +6 -6
- data/lib/paul_bunyan/railtie/log_subscriber.rb +3 -1
- data/lib/paul_bunyan/railtie.rb +0 -1
- data/lib/paul_bunyan/version.rb +1 -1
- data/paul_bunyan.gemspec +2 -2
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/widget.rb +2 -0
- data/spec/dummy/config/environments/development.rb +0 -14
- data/spec/dummy/db/migrate/20230301183442_create_widgets.rb +10 -0
- data/spec/dummy/db/schema.rb +21 -0
- data/spec/lib/paul_bunyan/log_relayer_spec.rb +14 -10
- data/spec/lib/paul_bunyan/metadata_logging_spec.rb +6 -6
- data/spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb +6 -2
- metadata +29 -31
- data/.travis.yml +0 -19
- data/lib/paul_bunyan/rails_ext/active_support_logger.rb +0 -11
- data/lib/paul_bunyan/rails_ext/instrumentation.rb +0 -41
- data/lib/paul_bunyan/rails_ext/rack_logger.rb +0 -24
- data/lib/paul_bunyan/rails_ext.rb +0 -8
- data/spec/dummy/config/initializers/assets.rb +0 -11
- data/spec/gemfiles/52.gemfile +0 -5
- data/spec/gemfiles/60.gemfile +0 -5
- data/spec/gemfiles/61.gemfile +0 -5
- data/spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb +0 -103
@@ -22,20 +22,6 @@ Rails.application.configure do
|
|
22
22
|
# Raise an error on page load if there are pending migrations.
|
23
23
|
config.active_record.migration_error = :page_load
|
24
24
|
|
25
|
-
# Debug mode disables concatenation and preprocessing of assets.
|
26
|
-
# This option may cause significant delays in view rendering with a large
|
27
|
-
# number of complex assets.
|
28
|
-
config.assets.debug = true
|
29
|
-
|
30
|
-
# Asset digests allow you to set far-future HTTP expiration dates on all assets,
|
31
|
-
# yet still be able to expire them through the digest params.
|
32
|
-
config.assets.digest = true
|
33
|
-
|
34
|
-
# Adds additional error checking when serving assets at runtime.
|
35
|
-
# Checks for improperly declared sprockets dependencies.
|
36
|
-
# Raises helpful error messages.
|
37
|
-
config.assets.raise_runtime_errors = true
|
38
|
-
|
39
25
|
# Raises error for missing translations
|
40
26
|
# config.action_view.raise_on_missing_translations = true
|
41
27
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead
|
2
|
+
# of editing this file, please use the migrations feature of Active Record to
|
3
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
+
#
|
5
|
+
# This file is the source Rails uses to define your schema when running `bin/rails
|
6
|
+
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
7
|
+
# be faster and is potentially less error prone than running all of your
|
8
|
+
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
|
+
# migrations use external dependencies or application code.
|
10
|
+
#
|
11
|
+
# It's strongly recommended that you check this file into your version control system.
|
12
|
+
|
13
|
+
ActiveRecord::Schema[7.0].define(version: 2023_03_01_183442) do
|
14
|
+
create_table "widgets", force: :cascade do |t|
|
15
|
+
t.string "name"
|
16
|
+
t.integer "quantity"
|
17
|
+
t.datetime "created_at", null: false
|
18
|
+
t.datetime "updated_at", null: false
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -337,6 +337,10 @@ describe PaulBunyan::LogRelayer do
|
|
337
337
|
end
|
338
338
|
end
|
339
339
|
|
340
|
+
# The funny `, **({})` bit can be removed once we don't test on ruby 2.7
|
341
|
+
# It ensures that the spec considers the arg to be a hash arg and not a kwarg
|
342
|
+
# on ruby < 3.0. The methods treat actual hashes and kwargs identically so
|
343
|
+
# it doesn't really matter which one it passes through as
|
340
344
|
context 'logging metadata' do
|
341
345
|
let(:my_metadata) { {foo: 'bar'} }
|
342
346
|
|
@@ -350,7 +354,7 @@ describe PaulBunyan::LogRelayer do
|
|
350
354
|
it 'delegates to all child loggers that support it' do
|
351
355
|
expect(primary).to receive(:add_metadata).with(my_metadata)
|
352
356
|
expect(secondary).to_not receive(:add_metadata)
|
353
|
-
double_relayer.add_metadata(my_metadata)
|
357
|
+
double_relayer.add_metadata(my_metadata, **({}))
|
354
358
|
end
|
355
359
|
end
|
356
360
|
|
@@ -376,29 +380,29 @@ describe PaulBunyan::LogRelayer do
|
|
376
380
|
it 'delegates to all child loggers' do
|
377
381
|
expect(primary).to receive(:remove_metadata).with(my_metadata)
|
378
382
|
expect(secondary).to_not receive(:remove_metadata)
|
379
|
-
double_relayer.remove_metadata(my_metadata)
|
383
|
+
double_relayer.remove_metadata(my_metadata, **({}))
|
380
384
|
end
|
381
385
|
end
|
382
386
|
|
383
387
|
describe '#with_metadata' do
|
384
388
|
before do
|
385
|
-
allow(single_relayer).to receive(:add_metadata).with(my_metadata)
|
386
|
-
allow(single_relayer).to receive(:remove_metadata).with(my_metadata)
|
389
|
+
allow(single_relayer).to receive(:add_metadata).with(my_metadata, **({}))
|
390
|
+
allow(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
|
387
391
|
end
|
388
392
|
|
389
393
|
it 'must call #add_metadata with the supplied hash' do
|
390
|
-
expect(single_relayer).to receive(:add_metadata).with(my_metadata)
|
391
|
-
expect { |b| single_relayer.with_metadata(my_metadata, &b) }.to yield_control
|
394
|
+
expect(single_relayer).to receive(:add_metadata).with(my_metadata, **({}))
|
395
|
+
expect { |b| single_relayer.with_metadata(my_metadata, **({}), &b) }.to yield_control
|
392
396
|
end
|
393
397
|
|
394
398
|
it 'must call #remove_metadata with the supplied hash' do
|
395
|
-
expect(single_relayer).to receive(:remove_metadata).with(my_metadata)
|
396
|
-
expect { |b| single_relayer.with_metadata(my_metadata, &b) }.to yield_control
|
399
|
+
expect(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
|
400
|
+
expect { |b| single_relayer.with_metadata(my_metadata, **({}), &b) }.to yield_control
|
397
401
|
end
|
398
402
|
|
399
403
|
it 'must call #remove_metadata when the block raises an exception' do
|
400
|
-
expect(single_relayer).to receive(:remove_metadata).with(my_metadata)
|
401
|
-
expect { single_relayer.with_metadata(my_metadata) do
|
404
|
+
expect(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
|
405
|
+
expect { single_relayer.with_metadata(my_metadata, **({})) do
|
402
406
|
fail StandardError, ':('
|
403
407
|
end
|
404
408
|
}.to raise_error(StandardError)
|
@@ -16,15 +16,15 @@ describe PaulBunyan::MetadataLogging do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'must delegate with_metadata to the formatter' do
|
19
|
-
expect(formatter).to receive(:with_metadata).with(foo: 'bar').and_yield
|
20
|
-
subject.with_metadata(foo: 'bar') do |logger|
|
19
|
+
expect(formatter).to receive(:with_metadata).with({hash: 123}, foo: 'bar').and_yield
|
20
|
+
subject.with_metadata({hash: 123}, foo: 'bar') do |logger|
|
21
21
|
expect(subject).to eq logger
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'must delegate add_metadata to the formatter' do
|
26
|
-
expect(formatter).to receive(:add_metadata).with(foo: 'bar')
|
27
|
-
subject.add_metadata(foo: 'bar')
|
26
|
+
expect(formatter).to receive(:add_metadata).with({hash: 123}, foo: 'bar')
|
27
|
+
subject.add_metadata({hash: 123}, foo: 'bar')
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'must delegate current_metadata to the formatter' do
|
@@ -33,8 +33,8 @@ describe PaulBunyan::MetadataLogging do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'must delegate remove_metadata to the formatter' do
|
36
|
-
expect(formatter).to receive(:remove_metadata).with(foo: 'bar')
|
37
|
-
subject.remove_metadata(foo: 'bar')
|
36
|
+
expect(formatter).to receive(:remove_metadata).with({hash: 123}, foo: 'bar')
|
37
|
+
subject.remove_metadata({hash: 123}, foo: 'bar')
|
38
38
|
end
|
39
39
|
|
40
40
|
context '#flush' do
|
@@ -61,6 +61,11 @@ module PaulBunyan
|
|
61
61
|
end
|
62
62
|
|
63
63
|
describe '#process_action(event)' do
|
64
|
+
let(:request) {
|
65
|
+
req = instance_double("ActionDispatch::Request", ip: "127.0.0.1", env: {
|
66
|
+
"action_dispatch.request_id" => "dfa6f7b5-8400-4572-a2f7-80504ed9d09a"
|
67
|
+
})
|
68
|
+
}
|
64
69
|
let(:event) {
|
65
70
|
ActiveSupport::Notifications::Event.new(
|
66
71
|
'process_action.action_controller',
|
@@ -74,8 +79,7 @@ module PaulBunyan
|
|
74
79
|
:format => :html,
|
75
80
|
:method => "GET",
|
76
81
|
:path => "/foos/42",
|
77
|
-
:
|
78
|
-
:ip => '127.0.0.1',
|
82
|
+
:request => request,
|
79
83
|
:status => 200,
|
80
84
|
:view_runtime => 220.038,
|
81
85
|
:db_runtime => 10.177,
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paul_bunyan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Duane Johnson
|
8
8
|
- Kenneth Romney
|
9
9
|
- Mark Severson
|
10
10
|
- Tyler Pickett
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2023-03-06 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: request_store
|
@@ -28,21 +28,21 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: appraisal
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- - "
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
36
|
+
version: 2.4.0
|
37
37
|
type: :development
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 2.4.0
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
45
|
+
name: bundler
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - ">="
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: rake
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
@@ -70,7 +70,7 @@ dependencies:
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: rspec
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
76
|
- - ">="
|
@@ -89,14 +89,14 @@ dependencies:
|
|
89
89
|
requirements:
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: '
|
92
|
+
version: '6.1'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
99
|
+
version: '6.1'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: sqlite3
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,7 +140,7 @@ extra_rdoc_files: []
|
|
140
140
|
files:
|
141
141
|
- ".dockerignore"
|
142
142
|
- ".gitignore"
|
143
|
-
-
|
143
|
+
- Appraisals
|
144
144
|
- Dockerfile
|
145
145
|
- Gemfile
|
146
146
|
- Guardfile
|
@@ -153,15 +153,15 @@ files:
|
|
153
153
|
- docker-compose.override.yml.example
|
154
154
|
- docker-compose.yml
|
155
155
|
- examples/host_middleware.rb
|
156
|
+
- gemfiles/rails_6.1.gemfile
|
157
|
+
- gemfiles/rails_6.1.gemfile.lock
|
158
|
+
- gemfiles/rails_7.0.gemfile
|
159
|
+
- gemfiles/rails_7.0.gemfile.lock
|
156
160
|
- lib/paul_bunyan.rb
|
157
161
|
- lib/paul_bunyan/json_formatter.rb
|
158
162
|
- lib/paul_bunyan/level.rb
|
159
163
|
- lib/paul_bunyan/log_relayer.rb
|
160
164
|
- lib/paul_bunyan/metadata_logging.rb
|
161
|
-
- lib/paul_bunyan/rails_ext.rb
|
162
|
-
- lib/paul_bunyan/rails_ext/active_support_logger.rb
|
163
|
-
- lib/paul_bunyan/rails_ext/instrumentation.rb
|
164
|
-
- lib/paul_bunyan/rails_ext/rack_logger.rb
|
165
165
|
- lib/paul_bunyan/railtie.rb
|
166
166
|
- lib/paul_bunyan/railtie/log_subscriber.rb
|
167
167
|
- lib/paul_bunyan/tagged_logging.rb
|
@@ -179,7 +179,9 @@ files:
|
|
179
179
|
- spec/dummy/app/helpers/application_helper.rb
|
180
180
|
- spec/dummy/app/mailers/.keep
|
181
181
|
- spec/dummy/app/models/.keep
|
182
|
+
- spec/dummy/app/models/application_record.rb
|
182
183
|
- spec/dummy/app/models/concerns/.keep
|
184
|
+
- spec/dummy/app/models/widget.rb
|
183
185
|
- spec/dummy/app/views/layouts/application.html.erb
|
184
186
|
- spec/dummy/bin/bundle
|
185
187
|
- spec/dummy/bin/rails
|
@@ -193,7 +195,6 @@ files:
|
|
193
195
|
- spec/dummy/config/environments/development.rb
|
194
196
|
- spec/dummy/config/environments/production.rb
|
195
197
|
- spec/dummy/config/environments/test.rb
|
196
|
-
- spec/dummy/config/initializers/assets.rb
|
197
198
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
198
199
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
199
200
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
@@ -205,20 +206,18 @@ files:
|
|
205
206
|
- spec/dummy/config/locales/en.yml
|
206
207
|
- spec/dummy/config/routes.rb
|
207
208
|
- spec/dummy/config/secrets.yml
|
209
|
+
- spec/dummy/db/migrate/20230301183442_create_widgets.rb
|
210
|
+
- spec/dummy/db/schema.rb
|
208
211
|
- spec/dummy/lib/assets/.keep
|
209
212
|
- spec/dummy/log/.keep
|
210
213
|
- spec/dummy/public/404.html
|
211
214
|
- spec/dummy/public/422.html
|
212
215
|
- spec/dummy/public/500.html
|
213
216
|
- spec/dummy/public/favicon.ico
|
214
|
-
- spec/gemfiles/52.gemfile
|
215
|
-
- spec/gemfiles/60.gemfile
|
216
|
-
- spec/gemfiles/61.gemfile
|
217
217
|
- spec/lib/paul_bunyan/json_formatter_spec.rb
|
218
218
|
- spec/lib/paul_bunyan/level_spec.rb
|
219
219
|
- spec/lib/paul_bunyan/log_relayer_spec.rb
|
220
220
|
- spec/lib/paul_bunyan/metadata_logging_spec.rb
|
221
|
-
- spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb
|
222
221
|
- spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb
|
223
222
|
- spec/lib/paul_bunyan/railtie_spec.rb
|
224
223
|
- spec/lib/paul_bunyan/tagged_logging_spec.rb
|
@@ -229,7 +228,7 @@ homepage: https://github.com/instructure/paul_bunyan
|
|
229
228
|
licenses:
|
230
229
|
- MIT
|
231
230
|
metadata: {}
|
232
|
-
post_install_message:
|
231
|
+
post_install_message:
|
233
232
|
rdoc_options: []
|
234
233
|
require_paths:
|
235
234
|
- lib
|
@@ -244,8 +243,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
243
|
- !ruby/object:Gem::Version
|
245
244
|
version: '0'
|
246
245
|
requirements: []
|
247
|
-
rubygems_version: 3.
|
248
|
-
signing_key:
|
246
|
+
rubygems_version: 3.1.6
|
247
|
+
signing_key:
|
249
248
|
specification_version: 4
|
250
249
|
summary: Logging for all the things
|
251
250
|
test_files:
|
@@ -259,7 +258,9 @@ test_files:
|
|
259
258
|
- spec/dummy/app/helpers/application_helper.rb
|
260
259
|
- spec/dummy/app/mailers/.keep
|
261
260
|
- spec/dummy/app/models/.keep
|
261
|
+
- spec/dummy/app/models/application_record.rb
|
262
262
|
- spec/dummy/app/models/concerns/.keep
|
263
|
+
- spec/dummy/app/models/widget.rb
|
263
264
|
- spec/dummy/app/views/layouts/application.html.erb
|
264
265
|
- spec/dummy/bin/bundle
|
265
266
|
- spec/dummy/bin/rails
|
@@ -273,7 +274,6 @@ test_files:
|
|
273
274
|
- spec/dummy/config/environments/development.rb
|
274
275
|
- spec/dummy/config/environments/production.rb
|
275
276
|
- spec/dummy/config/environments/test.rb
|
276
|
-
- spec/dummy/config/initializers/assets.rb
|
277
277
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
278
278
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
279
279
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
@@ -285,20 +285,18 @@ test_files:
|
|
285
285
|
- spec/dummy/config/locales/en.yml
|
286
286
|
- spec/dummy/config/routes.rb
|
287
287
|
- spec/dummy/config/secrets.yml
|
288
|
+
- spec/dummy/db/migrate/20230301183442_create_widgets.rb
|
289
|
+
- spec/dummy/db/schema.rb
|
288
290
|
- spec/dummy/lib/assets/.keep
|
289
291
|
- spec/dummy/log/.keep
|
290
292
|
- spec/dummy/public/404.html
|
291
293
|
- spec/dummy/public/422.html
|
292
294
|
- spec/dummy/public/500.html
|
293
295
|
- spec/dummy/public/favicon.ico
|
294
|
-
- spec/gemfiles/52.gemfile
|
295
|
-
- spec/gemfiles/60.gemfile
|
296
|
-
- spec/gemfiles/61.gemfile
|
297
296
|
- spec/lib/paul_bunyan/json_formatter_spec.rb
|
298
297
|
- spec/lib/paul_bunyan/level_spec.rb
|
299
298
|
- spec/lib/paul_bunyan/log_relayer_spec.rb
|
300
299
|
- spec/lib/paul_bunyan/metadata_logging_spec.rb
|
301
|
-
- spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb
|
302
300
|
- spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb
|
303
301
|
- spec/lib/paul_bunyan/railtie_spec.rb
|
304
302
|
- spec/lib/paul_bunyan/tagged_logging_spec.rb
|
data/.travis.yml
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.5
|
4
|
-
- 2.6
|
5
|
-
- 2.7
|
6
|
-
matrix:
|
7
|
-
fast_finish: true
|
8
|
-
# WWTD doesn't support allow_failures... yet
|
9
|
-
# allow_failures:
|
10
|
-
# - rvm: ruby-head
|
11
|
-
gemfile:
|
12
|
-
- spec/gemfiles/52.gemfile
|
13
|
-
- spec/gemfiles/60.gemfile
|
14
|
-
- spec/gemfiles/61.gemfile
|
15
|
-
script: bundle exec rspec
|
16
|
-
notifications:
|
17
|
-
email:
|
18
|
-
on_success: never
|
19
|
-
on_failure: never
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'active_support/logger'
|
2
|
-
|
3
|
-
# Sad hax but ActiveRecord insists on using this method for console sessions
|
4
|
-
# and everything uses it in development causing us to get double log lines :-(
|
5
|
-
module ActiveSupport
|
6
|
-
class Logger
|
7
|
-
def self.broadcast(_)
|
8
|
-
Module.new
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'action_controller/metal/instrumentation'
|
2
|
-
|
3
|
-
module ActionController
|
4
|
-
module Instrumentation
|
5
|
-
def process_action(*args)
|
6
|
-
raw_payload = base_payload.merge(custom_payload)
|
7
|
-
|
8
|
-
ActiveSupport::Notifications.instrument('start_processing.action_controller', raw_payload.dup)
|
9
|
-
|
10
|
-
ActiveSupport::Notifications.instrument('process_action.action_controller', raw_payload) do |payload|
|
11
|
-
begin
|
12
|
-
result = super
|
13
|
-
payload[:status] = response.status
|
14
|
-
result
|
15
|
-
ensure
|
16
|
-
append_info_to_payload(payload)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def base_payload
|
24
|
-
{
|
25
|
-
controller: self.class.name,
|
26
|
-
action: self.action_name,
|
27
|
-
params: request.filtered_parameters,
|
28
|
-
format: request.format.try(:ref),
|
29
|
-
method: request.request_method,
|
30
|
-
path: (request.filtered_path rescue 'unknown'),
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
def custom_payload
|
35
|
-
{
|
36
|
-
request_id: request.env['action_dispatch.request_id'],
|
37
|
-
ip: request.ip,
|
38
|
-
}
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'rails/rack/logger'
|
2
|
-
|
3
|
-
module Rails
|
4
|
-
module Rack
|
5
|
-
class Logger
|
6
|
-
|
7
|
-
# This was copied directly from the rails source and had
|
8
|
-
# the logging lines removed. N.B. this may break in future
|
9
|
-
# versions of rails.
|
10
|
-
def call_app(request, env)
|
11
|
-
instrumenter = ActiveSupport::Notifications.instrumenter
|
12
|
-
instrumenter.start 'request.action_dispatch', request: request
|
13
|
-
resp = @app.call(env)
|
14
|
-
resp[2] = ::Rack::BodyProxy.new(resp[2]) { finish(request) }
|
15
|
-
resp
|
16
|
-
rescue
|
17
|
-
finish(request)
|
18
|
-
raise
|
19
|
-
ensure
|
20
|
-
ActiveSupport::LogSubscriber.flush_all!
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Version of your assets, change this if you want to expire all your assets.
|
4
|
-
Rails.application.config.assets.version = '1.0'
|
5
|
-
|
6
|
-
# Add additional assets to the asset load path
|
7
|
-
# Rails.application.config.assets.paths << Emoji.images_path
|
8
|
-
|
9
|
-
# Precompile additional assets.
|
10
|
-
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
11
|
-
# Rails.application.config.assets.precompile += %w( search.js )
|
data/spec/gemfiles/52.gemfile
DELETED
data/spec/gemfiles/60.gemfile
DELETED
data/spec/gemfiles/61.gemfile
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActionController::Base do
|
4
|
-
let(:request_id) { '5ab8b021-71bf-40f9-97cc-136f7b626a66' }
|
5
|
-
|
6
|
-
around :each do |example|
|
7
|
-
begin
|
8
|
-
original_logger = PaulBunyan.logger.primary_logger
|
9
|
-
null_logger = Logger.new('/dev/null')
|
10
|
-
PaulBunyan.add_logger(null_logger)
|
11
|
-
PaulBunyan.remove_logger(original_logger)
|
12
|
-
|
13
|
-
example.run
|
14
|
-
ensure
|
15
|
-
PaulBunyan.add_logger(original_logger)
|
16
|
-
PaulBunyan.remove_logger(null_logger)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
before :each do
|
21
|
-
subject.request = build_request({
|
22
|
-
'action_dispatch.request_id' => request_id,
|
23
|
-
'REMOTE_ADDR' => '127.0.0.1',
|
24
|
-
})
|
25
|
-
subject.response = ActionDispatch::TestResponse.new
|
26
|
-
|
27
|
-
def subject.index(*args)
|
28
|
-
head :ok
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
describe '.process_action(*args)' do
|
34
|
-
context 'active support notification events' do
|
35
|
-
before do
|
36
|
-
allow(ActiveSupport::Notifications).to receive(:instrument)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'must emit a start_processing event in the action_controller namespace' do
|
40
|
-
subject.send(:process_action, :index)
|
41
|
-
expect(ActiveSupport::Notifications).to have_received(:instrument).
|
42
|
-
with('start_processing.action_controller', anything).once
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'must emit a process_action event in the action_controller namespace' do
|
46
|
-
subject.send(:process_action, :index)
|
47
|
-
expect(ActiveSupport::Notifications).to have_received(:instrument).
|
48
|
-
with('process_action.action_controller', anything).once
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'must include the original rails payload keys in the event payload' do
|
53
|
-
calling_index do |*args|
|
54
|
-
payload = args.last
|
55
|
-
expect(payload.keys).to include(
|
56
|
-
*[:controller, :action, :params, :format, :method, :path]
|
57
|
-
)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'must add the request id to the notification payload hash' do
|
62
|
-
calling_index do |*args|
|
63
|
-
payload = args.last
|
64
|
-
expect(payload).to include request_id: request_id
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'must add the request ip address to the notification payload' do
|
69
|
-
calling_index do |*args|
|
70
|
-
payload = args.last
|
71
|
-
expect(payload).to include ip: '127.0.0.1'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'with sensitive info in the query params' do
|
76
|
-
before do
|
77
|
-
subject.request = build_request({
|
78
|
-
'action_dispatch.parameter_filter' => [:password, :baz],
|
79
|
-
'PATH_INFO' => '/somewhere',
|
80
|
-
'QUERY_STRING' => 'password=foo&bar=baz&baz=qux',
|
81
|
-
})
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'filters the sensitive params' do
|
85
|
-
calling_index do |*args|
|
86
|
-
payload = args.last
|
87
|
-
expect(payload).to include path: '/somewhere?password=[FILTERED]&bar=baz&baz=[FILTERED]'
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def build_request(attrs)
|
94
|
-
factory_method = (Rails.version >= '5.0' ? :create : :new)
|
95
|
-
ActionDispatch::TestRequest.send(factory_method, attrs)
|
96
|
-
end
|
97
|
-
|
98
|
-
def calling_index(&block)
|
99
|
-
with_subscription_to('process_action.action_controller', block) do
|
100
|
-
subject.send(:process_action, :index)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|