paul_bunyan 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|