appsignal 3.0.20-java → 3.0.21.alpha.1-java
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/CHANGELOG.md +9 -0
- data/appsignal.gemspec +1 -0
- data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +7 -18
- data/lib/appsignal/version.rb +1 -1
- data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +21 -47
- data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +5 -1
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +11 -3
- data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +2 -2
- data/spec/lib/appsignal_spec.rb +58 -18
- data/spec/support/helpers/transaction_helpers.rb +10 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab615abe5b6e300341b57c3bc85147eba95e99730d382df8087eb636f777dd94
|
4
|
+
data.tar.gz: 38099b1d602f9aed9b67d38e24cee1fa7b63cf069ad806e218b8d360f4655806
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b0c2f190ea004672a780140a513c585d9bf543aab1caab1b2a4a9504da364efe552a7bd9d9f63d7f72e7249f78f9ca743120cb4c5d7382ffa9b605051a8a457
|
7
|
+
data.tar.gz: 85e43d5094ac8247abe40cade7fe61665a8fc1f0d655db63277db1a9875fa61ab675f35ef48f04f17a77882d80003b1c0d0dac4aff10f2ef6a25957b5f70796f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# AppSignal for Ruby gem Changelog
|
2
2
|
|
3
|
+
## 3.0.21.alpha.1
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
|
7
|
+
- [f19d9dcc](https://github.com/appsignal/appsignal-ruby/commit/f19d9dcc1c00103f5dc92951481becf4d4ade39e) patch - The MongoDB query sanitization now shows all the attributes in the query at all levels.
|
8
|
+
Only the actual values are filtered with a `?` character. Less MongoDB queries are now marked
|
9
|
+
as N+1 queries when they weren't the exact same query. This increases the number of unique events
|
10
|
+
AppSignal tracks for MongoDB queries.
|
11
|
+
|
3
12
|
## 3.0.20
|
4
13
|
|
5
14
|
### Added
|
data/appsignal.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
|
|
25
25
|
gem.extensions = %w[ext/extconf.rb]
|
26
26
|
|
27
27
|
gem.metadata = {
|
28
|
+
"rubygems_mfa_required" => "true",
|
28
29
|
"bug_tracker_uri" => "https://github.com/appsignal/appsignal-ruby/issues",
|
29
30
|
"changelog_uri" =>
|
30
31
|
"https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md",
|
@@ -21,28 +21,28 @@ module Appsignal
|
|
21
21
|
},
|
22
22
|
"insert" => {
|
23
23
|
"insert" => :allow,
|
24
|
-
"documents" => :
|
24
|
+
"documents" => :sanitize_document,
|
25
25
|
"ordered" => :allow
|
26
26
|
},
|
27
27
|
"update" => {
|
28
28
|
"update" => :allow,
|
29
|
-
"updates" => :
|
29
|
+
"updates" => :sanitize_document,
|
30
30
|
"ordered" => :allow
|
31
31
|
},
|
32
32
|
"findandmodify" => {
|
33
33
|
"findandmodify" => :allow,
|
34
34
|
"query" => :sanitize_document,
|
35
|
-
"update" => :
|
35
|
+
"update" => :sanitize_document,
|
36
36
|
"new" => :allow
|
37
37
|
},
|
38
38
|
"delete" => {
|
39
39
|
"delete" => :allow,
|
40
|
-
"deletes" => :
|
40
|
+
"deletes" => :sanitize_document,
|
41
41
|
"ordered" => :allow
|
42
42
|
},
|
43
43
|
"bulk" => {
|
44
44
|
"q" => :sanitize_document,
|
45
|
-
"u" => :
|
45
|
+
"u" => :sanitize_document,
|
46
46
|
"limit" => :allow,
|
47
47
|
"multi" => :allow,
|
48
48
|
"upsert" => :allow
|
@@ -68,20 +68,9 @@ module Appsignal
|
|
68
68
|
# Applies strategy on hash values based on keys
|
69
69
|
def self.apply_strategy(strategy, val)
|
70
70
|
case strategy
|
71
|
-
when :allow
|
72
|
-
when :deny then "?"
|
73
|
-
when :deny_array then "[?]"
|
71
|
+
when :allow then val
|
74
72
|
when :sanitize_document
|
75
|
-
Appsignal::Utils::QueryParamsSanitizer.sanitize(val,
|
76
|
-
when :sanitize_bulk
|
77
|
-
if val.length > 1
|
78
|
-
[
|
79
|
-
format(:bulk, val.first),
|
80
|
-
"[...]"
|
81
|
-
]
|
82
|
-
else
|
83
|
-
val.map { |v| format(:bulk, v) }
|
84
|
-
end
|
73
|
+
Appsignal::Utils::QueryParamsSanitizer.sanitize(val, false, :mongodb)
|
85
74
|
else "?"
|
86
75
|
end
|
87
76
|
end
|
data/lib/appsignal/version.rb
CHANGED
@@ -11,8 +11,12 @@ describe Appsignal::EventFormatter::MongoRubyDriver::QueryFormatter do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should apply a strategy for each key" do
|
14
|
+
# TODO: additional curly brackets required for issue
|
15
|
+
# https://github.com/rspec/rspec-mocks/issues/1460
|
16
|
+
# rubocop:disable Style/BracesAroundHashParameters
|
14
17
|
expect(formatter).to receive(:apply_strategy)
|
15
|
-
.with(:sanitize_document, "_id" => 1)
|
18
|
+
.with(:sanitize_document, { "_id" => 1 })
|
19
|
+
# rubocop:enable Style/BracesAroundHashParameters
|
16
20
|
|
17
21
|
expect(formatter).to receive(:apply_strategy)
|
18
22
|
.with(:allow, "users")
|
@@ -47,57 +51,27 @@ describe Appsignal::EventFormatter::MongoRubyDriver::QueryFormatter do
|
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
50
|
-
context "when strategy is deny" do
|
51
|
-
let(:strategy) { :deny }
|
52
|
-
let(:value) { { "_id" => 1 } }
|
53
|
-
|
54
|
-
it "should return a '?'" do
|
55
|
-
expect(formatter.apply_strategy(strategy, value)).to eql("?")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "when strategy is deny_array" do
|
60
|
-
let(:strategy) { :deny_array }
|
61
|
-
let(:value) { { "_id" => 1 } }
|
62
|
-
|
63
|
-
it "should return a sanitized array string" do
|
64
|
-
expect(formatter.apply_strategy(strategy, value)).to eql("[?]")
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
54
|
context "when strategy is sanitize_document" do
|
69
55
|
let(:strategy) { :sanitize_document }
|
70
|
-
let(:value)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
let(:value) { [{ "q" => { "_id" => 1 }, "u" => [{ "foo" => "bar" }] }] }
|
80
|
-
|
81
|
-
it "should return an array of sanitized bulk documents" do
|
82
|
-
expect(formatter.apply_strategy(strategy, value)).to eql([
|
83
|
-
{ "q" => { "_id" => "?" }, "u" => "[?]" }
|
84
|
-
])
|
56
|
+
let(:value) do
|
57
|
+
{
|
58
|
+
"_id" => 1,
|
59
|
+
"authors" => [
|
60
|
+
{ "name" => "BarBaz" },
|
61
|
+
{ "name" => "FooBar" },
|
62
|
+
{ "name" => "BarFoo", "surname" => "Baz" }
|
63
|
+
]
|
64
|
+
}
|
85
65
|
end
|
86
66
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
{ "
|
67
|
+
it "should return a sanitized document" do
|
68
|
+
expect(formatter.apply_strategy(strategy, value)).to eql(
|
69
|
+
"_id" => "?",
|
70
|
+
"authors" => [
|
71
|
+
{ "name" => "?" },
|
72
|
+
{ "name" => "?", "surname" => "?" }
|
92
73
|
]
|
93
|
-
|
94
|
-
|
95
|
-
it "should return only the first value of sanitized bulk documents" do
|
96
|
-
expect(formatter.apply_strategy(strategy, value)).to eql([
|
97
|
-
{ "q" => { "_id" => "?" }, "u" => "[?]" },
|
98
|
-
"[...]"
|
99
|
-
])
|
100
|
-
end
|
74
|
+
)
|
101
75
|
end
|
102
76
|
end
|
103
77
|
|
@@ -17,8 +17,12 @@ describe Appsignal::Hooks::MongoMonitorSubscriber do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should sanitize command" do
|
20
|
+
# TODO: additional curly brackets required for issue
|
21
|
+
# https://github.com/rspec/rspec-mocks/issues/1460
|
22
|
+
# rubocop:disable Style/BracesAroundHashParameters
|
20
23
|
expect(Appsignal::EventFormatter::MongoRubyDriver::QueryFormatter)
|
21
|
-
.to receive(:format).with("find", "foo" => "bar")
|
24
|
+
.to receive(:format).with("find", { "foo" => "bar" })
|
25
|
+
# rubocop:enable Style/BracesAroundHashParameters
|
22
26
|
|
23
27
|
subscriber.started(event)
|
24
28
|
end
|
@@ -228,10 +228,14 @@ describe Appsignal::Integrations::SidekiqMiddleware, :with_yaml_parse_error => f
|
|
228
228
|
let(:error) { ExampleException }
|
229
229
|
|
230
230
|
it "creates a transaction and adds the error" do
|
231
|
+
# TODO: additional curly brackets required for issue
|
232
|
+
# https://github.com/rspec/rspec-mocks/issues/1460
|
233
|
+
# rubocop:disable Style/BracesAroundHashParameters
|
231
234
|
expect(Appsignal).to receive(:increment_counter)
|
232
|
-
.with("sidekiq_queue_job_count", 1, :queue => "default", :status => :failed)
|
235
|
+
.with("sidekiq_queue_job_count", 1, { :queue => "default", :status => :failed })
|
233
236
|
expect(Appsignal).to receive(:increment_counter)
|
234
|
-
.with("sidekiq_queue_job_count", 1, :queue => "default", :status => :processed)
|
237
|
+
.with("sidekiq_queue_job_count", 1, { :queue => "default", :status => :processed })
|
238
|
+
# rubocop:enable Style/BracesAroundHashParameters
|
235
239
|
|
236
240
|
expect do
|
237
241
|
perform_job { raise error, "uh oh" }
|
@@ -267,8 +271,12 @@ describe Appsignal::Integrations::SidekiqMiddleware, :with_yaml_parse_error => f
|
|
267
271
|
|
268
272
|
context "without an error" do
|
269
273
|
it "creates a transaction with events" do
|
274
|
+
# TODO: additional curly brackets required for issue
|
275
|
+
# https://github.com/rspec/rspec-mocks/issues/1460
|
276
|
+
# rubocop:disable Style/BracesAroundHashParameters
|
270
277
|
expect(Appsignal).to receive(:increment_counter)
|
271
|
-
.with("sidekiq_queue_job_count", 1, :queue => "default", :status => :processed)
|
278
|
+
.with("sidekiq_queue_job_count", 1, { :queue => "default", :status => :processed })
|
279
|
+
# rubocop:enable Style/BracesAroundHashParameters
|
272
280
|
|
273
281
|
perform_job
|
274
282
|
|
@@ -117,7 +117,7 @@ describe Appsignal::Utils::QueryParamsSanitizer do
|
|
117
117
|
context "when value is an array" do
|
118
118
|
let(:value) { %w[foo bar] }
|
119
119
|
|
120
|
-
it "should sanitize all hash values with a single
|
120
|
+
it "should sanitize all hash values with a single question mark" do
|
121
121
|
expect(subject).to eq(["?"])
|
122
122
|
end
|
123
123
|
end
|
@@ -125,7 +125,7 @@ describe Appsignal::Utils::QueryParamsSanitizer do
|
|
125
125
|
context "when value is a mixed array" do
|
126
126
|
let(:value) { [nil, "foo", "bar"] }
|
127
127
|
|
128
|
-
it "should sanitize all hash values with a single
|
128
|
+
it "should sanitize all hash values with a single question mark" do
|
129
129
|
expect(subject).to eq(["?"])
|
130
130
|
end
|
131
131
|
end
|
data/spec/lib/appsignal_spec.rb
CHANGED
@@ -427,49 +427,89 @@ describe Appsignal do
|
|
427
427
|
end
|
428
428
|
|
429
429
|
describe ".monitor_single_transaction" do
|
430
|
+
around { |example| keep_transactions { example.run } }
|
431
|
+
|
430
432
|
context "with a successful call" do
|
431
|
-
it "
|
432
|
-
expect(Appsignal).to receive(:monitor_transaction).with(
|
433
|
-
"perform_job.something",
|
434
|
-
:key => :value
|
435
|
-
).and_yield
|
433
|
+
it "calls monitor_transaction and Appsignal.stop" do
|
436
434
|
expect(Appsignal).to receive(:stop)
|
437
435
|
|
438
|
-
Appsignal.monitor_single_transaction(
|
436
|
+
Appsignal.monitor_single_transaction(
|
437
|
+
"perform_job.something",
|
438
|
+
:controller => :my_controller,
|
439
|
+
:action => :my_action
|
440
|
+
) do
|
439
441
|
# nothing
|
440
442
|
end
|
443
|
+
|
444
|
+
transaction = last_transaction
|
445
|
+
transaction_hash = transaction.to_h
|
446
|
+
expect(transaction_hash).to include(
|
447
|
+
"action" => "my_controller#my_action"
|
448
|
+
)
|
449
|
+
expect(transaction_hash["events"]).to match([
|
450
|
+
hash_including(
|
451
|
+
"name" => "perform_job.something",
|
452
|
+
"title" => "",
|
453
|
+
"body" => "",
|
454
|
+
"body_format" => Appsignal::EventFormatter::DEFAULT
|
455
|
+
)
|
456
|
+
])
|
441
457
|
end
|
442
458
|
end
|
443
459
|
|
444
460
|
context "with an erroring call" do
|
445
461
|
let(:error) { ExampleException.new }
|
446
462
|
|
447
|
-
it "
|
448
|
-
expect(Appsignal).to receive(:monitor_transaction).with(
|
449
|
-
"perform_job.something",
|
450
|
-
:key => :value
|
451
|
-
).and_yield
|
463
|
+
it "calls monitor_transaction and stop and re-raises the error" do
|
452
464
|
expect(Appsignal).to receive(:stop)
|
453
465
|
|
454
466
|
expect do
|
455
|
-
Appsignal.monitor_single_transaction(
|
467
|
+
Appsignal.monitor_single_transaction(
|
468
|
+
"perform_job.something",
|
469
|
+
:controller => :my_controller,
|
470
|
+
:action => :my_action
|
471
|
+
) do
|
456
472
|
raise error
|
457
473
|
end
|
458
474
|
end.to raise_error(error)
|
475
|
+
|
476
|
+
transaction = last_transaction
|
477
|
+
transaction_hash = transaction.to_h
|
478
|
+
expect(transaction_hash).to include(
|
479
|
+
"action" => "my_controller#my_action"
|
480
|
+
)
|
481
|
+
expect(transaction_hash["events"]).to match([
|
482
|
+
hash_including(
|
483
|
+
"name" => "perform_job.something",
|
484
|
+
"title" => "",
|
485
|
+
"body" => "",
|
486
|
+
"body_format" => Appsignal::EventFormatter::DEFAULT
|
487
|
+
)
|
488
|
+
])
|
459
489
|
end
|
460
490
|
end
|
461
491
|
end
|
462
492
|
|
463
493
|
describe ".tag_request" do
|
464
|
-
|
494
|
+
let(:transaction) { http_request_transaction }
|
495
|
+
around do |example|
|
496
|
+
start_agent
|
497
|
+
with_current_transaction transaction do
|
498
|
+
keep_transactions { example.run }
|
499
|
+
end
|
500
|
+
end
|
465
501
|
|
466
502
|
context "with transaction" do
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
end
|
503
|
+
it "calls set_tags on the current transaction" do
|
504
|
+
Appsignal.tag_request("a" => "b")
|
505
|
+
transaction.complete # Manually trigger transaction sampling
|
471
506
|
|
472
|
-
|
507
|
+
expect(transaction.to_h).to include(
|
508
|
+
"sample_data" => hash_including(
|
509
|
+
"tags" => { "a" => "b" }
|
510
|
+
)
|
511
|
+
)
|
512
|
+
end
|
473
513
|
end
|
474
514
|
|
475
515
|
context "without transaction" do
|
@@ -56,6 +56,16 @@ module TransactionHelpers
|
|
56
56
|
Thread.current[:appsignal_transaction] = nil
|
57
57
|
end
|
58
58
|
|
59
|
+
# Set the current for the duration of the given block.
|
60
|
+
#
|
61
|
+
# Helper for {set_current_transaction} and {clear_current_transaction!}
|
62
|
+
def with_current_transaction(transaction)
|
63
|
+
set_current_transaction transaction
|
64
|
+
yield
|
65
|
+
ensure
|
66
|
+
clear_current_transaction!
|
67
|
+
end
|
68
|
+
|
59
69
|
# Track the AppSignal transaction JSON when a transaction gets completed
|
60
70
|
# ({Appsignal::Transaction.complete}).
|
61
71
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.21.alpha.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Robert Beekman
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-02-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
@@ -419,6 +419,7 @@ homepage: https://github.com/appsignal/appsignal-ruby
|
|
419
419
|
licenses:
|
420
420
|
- MIT
|
421
421
|
metadata:
|
422
|
+
rubygems_mfa_required: 'true'
|
422
423
|
bug_tracker_uri: https://github.com/appsignal/appsignal-ruby/issues
|
423
424
|
changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md
|
424
425
|
documentation_uri: https://docs.appsignal.com/ruby/
|
@@ -436,11 +437,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
436
437
|
version: '2.0'
|
437
438
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
438
439
|
requirements:
|
439
|
-
- - "
|
440
|
+
- - ">"
|
440
441
|
- !ruby/object:Gem::Version
|
441
|
-
version:
|
442
|
+
version: 1.3.1
|
442
443
|
requirements: []
|
443
|
-
rubygems_version: 3.
|
444
|
+
rubygems_version: 3.1.6
|
444
445
|
signing_key:
|
445
446
|
specification_version: 4
|
446
447
|
summary: Logs performance and exception data from your app to appsignal.com
|