airbrake-ruby 4.12.0 → 4.13.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/lib/airbrake-ruby.rb +15 -8
- data/lib/airbrake-ruby/filters/thread_filter.rb +1 -1
- data/lib/airbrake-ruby/performance_breakdown.rb +14 -9
- data/lib/airbrake-ruby/query.rb +16 -10
- data/lib/airbrake-ruby/queue.rb +22 -6
- data/lib/airbrake-ruby/request.rb +13 -6
- data/lib/airbrake-ruby/stat.rb +8 -5
- data/lib/airbrake-ruby/truncator.rb +2 -2
- data/lib/airbrake-ruby/version.rb +1 -1
- data/spec/filters/thread_filter_spec.rb +3 -1
- data/spec/queue_spec.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21b45126851240764d75da35e8f7fbc7c73effdda1b01854065dc25db0c351e3
|
4
|
+
data.tar.gz: 5dd7a704b0a16a841fb93b30b72a0acf28cb887f2e7abdda57e48078289d107b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9252437e39b4a415e2e90ca8a4434540ecd7e45737bdacd788e772a308fbc6c1f231c293eaa11aaaf90310f695f7a44e87b7511cd5af204259949746a6e85013
|
7
|
+
data.tar.gz: 969b2e55a423d02f241e04ccb27eeb13d352dbe3b0f4394c53dccdf4a3bab8c4d59e19ac7a9c7e455a08b5c22340e49b126581b1be90adcd972faaa79fbb6e11
|
data/lib/airbrake-ruby.rb
CHANGED
@@ -84,6 +84,13 @@ module Airbrake
|
|
84
84
|
# special cases where we need to work around older implementations
|
85
85
|
JRUBY = (RUBY_ENGINE == 'jruby')
|
86
86
|
|
87
|
+
# @return [Boolean] true if this Ruby supports safe levels and tainting,
|
88
|
+
# to guard against using deprecated or unsupported features.
|
89
|
+
HAS_SAFE_LEVEL = (
|
90
|
+
RUBY_ENGINE == 'ruby' &&
|
91
|
+
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7')
|
92
|
+
)
|
93
|
+
|
87
94
|
class << self
|
88
95
|
# @since v4.2.3
|
89
96
|
# @api private
|
@@ -364,7 +371,7 @@ module Airbrake
|
|
364
371
|
# @since v3.0.0
|
365
372
|
# @see Airbrake::PerformanceNotifier#notify
|
366
373
|
def notify_request(request_info, stash = {})
|
367
|
-
request = Request.new(request_info)
|
374
|
+
request = Request.new(**request_info)
|
368
375
|
request.stash.merge!(stash)
|
369
376
|
performance_notifier.notify(request)
|
370
377
|
end
|
@@ -374,7 +381,7 @@ module Airbrake
|
|
374
381
|
# @since v4.10.0
|
375
382
|
# @see .notify_request
|
376
383
|
def notify_request_sync(request_info, stash = {})
|
377
|
-
request = Request.new(request_info)
|
384
|
+
request = Request.new(**request_info)
|
378
385
|
request.stash.merge!(stash)
|
379
386
|
performance_notifier.notify_sync(request)
|
380
387
|
end
|
@@ -407,7 +414,7 @@ module Airbrake
|
|
407
414
|
# @since v3.2.0
|
408
415
|
# @see Airbrake::PerformanceNotifier#notify
|
409
416
|
def notify_query(query_info, stash = {})
|
410
|
-
query = Query.new(query_info)
|
417
|
+
query = Query.new(**query_info)
|
411
418
|
query.stash.merge!(stash)
|
412
419
|
performance_notifier.notify(query)
|
413
420
|
end
|
@@ -418,7 +425,7 @@ module Airbrake
|
|
418
425
|
# @since v4.10.0
|
419
426
|
# @see .notify_query
|
420
427
|
def notify_query_sync(query_info, stash = {})
|
421
|
-
query = Query.new(query_info)
|
428
|
+
query = Query.new(**query_info)
|
422
429
|
query.stash.merge!(stash)
|
423
430
|
performance_notifier.notify_sync(query)
|
424
431
|
end
|
@@ -446,7 +453,7 @@ module Airbrake
|
|
446
453
|
# @return [void]
|
447
454
|
# @since v4.2.0
|
448
455
|
def notify_performance_breakdown(breakdown_info, stash = {})
|
449
|
-
performance_breakdown = PerformanceBreakdown.new(breakdown_info)
|
456
|
+
performance_breakdown = PerformanceBreakdown.new(**breakdown_info)
|
450
457
|
performance_breakdown.stash.merge!(stash)
|
451
458
|
performance_notifier.notify(performance_breakdown)
|
452
459
|
end
|
@@ -456,7 +463,7 @@ module Airbrake
|
|
456
463
|
# @since v4.10.0
|
457
464
|
# @see .notify_performance_breakdown
|
458
465
|
def notify_performance_breakdown_sync(breakdown_info, stash = {})
|
459
|
-
performance_breakdown = PerformanceBreakdown.new(breakdown_info)
|
466
|
+
performance_breakdown = PerformanceBreakdown.new(**breakdown_info)
|
460
467
|
performance_breakdown.stash.merge!(stash)
|
461
468
|
performance_notifier.notify_sync(performance_breakdown)
|
462
469
|
end
|
@@ -484,7 +491,7 @@ module Airbrake
|
|
484
491
|
# @since v4.9.0
|
485
492
|
# @see .notify_queue_sync
|
486
493
|
def notify_queue(queue_info, stash = {})
|
487
|
-
queue = Queue.new(queue_info)
|
494
|
+
queue = Queue.new(**queue_info)
|
488
495
|
queue.stash.merge!(stash)
|
489
496
|
performance_notifier.notify(queue)
|
490
497
|
end
|
@@ -493,7 +500,7 @@ module Airbrake
|
|
493
500
|
# @since v4.10.0
|
494
501
|
# @see .notify_queue
|
495
502
|
def notify_queue_sync(queue_info, stash = {})
|
496
|
-
queue = Queue.new(queue_info)
|
503
|
+
queue = Queue.new(**queue_info)
|
497
504
|
queue.stash.merge!(stash)
|
498
505
|
performance_notifier.notify_sync(queue)
|
499
506
|
end
|
@@ -72,7 +72,7 @@ module Airbrake
|
|
72
72
|
thread_info[:group] = th.group.list.map(&:inspect)
|
73
73
|
thread_info[:priority] = th.priority
|
74
74
|
|
75
|
-
thread_info[:safe_level] = th.safe_level
|
75
|
+
thread_info[:safe_level] = th.safe_level if Airbrake::HAS_SAFE_LEVEL
|
76
76
|
end
|
77
77
|
|
78
78
|
def sanitize_value(value)
|
@@ -5,16 +5,16 @@ module Airbrake
|
|
5
5
|
# @see Airbrake.notify_breakdown
|
6
6
|
# @api public
|
7
7
|
# @since v4.2.0
|
8
|
-
# rubocop:disable Metrics/
|
9
|
-
PerformanceBreakdown
|
10
|
-
:method, :route, :response_type, :groups, :start_time, :end_time, :timing,
|
11
|
-
:time
|
12
|
-
) do
|
8
|
+
# rubocop:disable Metrics/ParameterLists
|
9
|
+
class PerformanceBreakdown
|
13
10
|
include HashKeyable
|
14
11
|
include Ignorable
|
15
12
|
include Stashable
|
16
13
|
include Mergeable
|
17
14
|
|
15
|
+
attr_accessor :method, :route, :response_type, :groups, :start_time,
|
16
|
+
:end_time, :timing, :time
|
17
|
+
|
18
18
|
def initialize(
|
19
19
|
method:,
|
20
20
|
route:,
|
@@ -26,9 +26,14 @@ module Airbrake
|
|
26
26
|
time: Time.now
|
27
27
|
)
|
28
28
|
@time_utc = TimeTruncate.utc_truncate_minutes(time)
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
@method = method
|
30
|
+
@route = route
|
31
|
+
@response_type = response_type
|
32
|
+
@groups = groups
|
33
|
+
@start_time = start_time
|
34
|
+
@end_time = end_time
|
35
|
+
@timing = timing
|
36
|
+
@time = time
|
32
37
|
end
|
33
38
|
|
34
39
|
def destination
|
@@ -48,5 +53,5 @@ module Airbrake
|
|
48
53
|
}.delete_if { |_key, val| val.nil? }
|
49
54
|
end
|
50
55
|
end
|
51
|
-
# rubocop:enable Metrics/
|
56
|
+
# rubocop:enable Metrics/ParameterLists
|
52
57
|
end
|
data/lib/airbrake-ruby/query.rb
CHANGED
@@ -4,17 +4,17 @@ module Airbrake
|
|
4
4
|
# @see Airbrake.notify_query
|
5
5
|
# @api public
|
6
6
|
# @since v3.2.0
|
7
|
-
# rubocop:disable Metrics/ParameterLists
|
8
|
-
Query
|
9
|
-
:method, :route, :query, :func, :file, :line, :start_time, :end_time,
|
10
|
-
:timing, :time
|
11
|
-
) do
|
7
|
+
# rubocop:disable Metrics/ParameterLists
|
8
|
+
class Query
|
12
9
|
include HashKeyable
|
13
10
|
include Ignorable
|
14
11
|
include Stashable
|
15
12
|
include Mergeable
|
16
13
|
include Grouppable
|
17
14
|
|
15
|
+
attr_accessor :method, :route, :query, :func, :file, :line, :start_time,
|
16
|
+
:end_time, :timing, :time
|
17
|
+
|
18
18
|
def initialize(
|
19
19
|
method:,
|
20
20
|
route:,
|
@@ -28,10 +28,16 @@ module Airbrake
|
|
28
28
|
time: Time.now
|
29
29
|
)
|
30
30
|
@time_utc = TimeTruncate.utc_truncate_minutes(time)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
@method = method
|
32
|
+
@route = route
|
33
|
+
@query = query
|
34
|
+
@func = func
|
35
|
+
@file = file
|
36
|
+
@line = line
|
37
|
+
@start_time = start_time
|
38
|
+
@end_time = end_time
|
39
|
+
@timing = timing
|
40
|
+
@time = time
|
35
41
|
end
|
36
42
|
|
37
43
|
def destination
|
@@ -53,6 +59,6 @@ module Airbrake
|
|
53
59
|
'line' => line,
|
54
60
|
}.delete_if { |_key, val| val.nil? }
|
55
61
|
end
|
56
|
-
# rubocop:enable Metrics/ParameterLists
|
62
|
+
# rubocop:enable Metrics/ParameterLists
|
57
63
|
end
|
58
64
|
end
|
data/lib/airbrake-ruby/queue.rb
CHANGED
@@ -4,14 +4,15 @@ module Airbrake
|
|
4
4
|
# @see Airbrake.notify_queue
|
5
5
|
# @api public
|
6
6
|
# @since v4.9.0
|
7
|
-
# rubocop:disable Metrics/
|
8
|
-
Queue
|
9
|
-
:queue, :error_count, :groups, :start_time, :end_time, :timing, :time
|
10
|
-
) do
|
7
|
+
# rubocop:disable Metrics/ParameterLists
|
8
|
+
class Queue
|
11
9
|
include HashKeyable
|
12
10
|
include Ignorable
|
13
11
|
include Stashable
|
14
12
|
|
13
|
+
attr_accessor :queue, :error_count, :groups, :start_time, :end_time,
|
14
|
+
:timing, :time
|
15
|
+
|
15
16
|
def initialize(
|
16
17
|
queue:,
|
17
18
|
error_count:,
|
@@ -22,7 +23,13 @@ module Airbrake
|
|
22
23
|
time: Time.now
|
23
24
|
)
|
24
25
|
@time_utc = TimeTruncate.utc_truncate_minutes(time)
|
25
|
-
|
26
|
+
@queue = queue
|
27
|
+
@error_count = error_count
|
28
|
+
@groups = groups
|
29
|
+
@start_time = start_time
|
30
|
+
@end_time = end_time
|
31
|
+
@timing = timing
|
32
|
+
@time = time
|
26
33
|
end
|
27
34
|
|
28
35
|
def destination
|
@@ -51,6 +58,15 @@ module Airbrake
|
|
51
58
|
def merge(other)
|
52
59
|
self.error_count += other.error_count
|
53
60
|
end
|
61
|
+
|
62
|
+
# Queues don't have routes, but we want to define this to make sure our
|
63
|
+
# filter API is consistent (other models define this property)
|
64
|
+
#
|
65
|
+
# @return [String] empty route
|
66
|
+
# @see https://github.com/airbrake/airbrake-ruby/pull/537
|
67
|
+
def route
|
68
|
+
''
|
69
|
+
end
|
54
70
|
end
|
55
|
-
# rubocop:enable Metrics/
|
71
|
+
# rubocop:enable Metrics/ParameterLists
|
56
72
|
end
|
@@ -4,16 +4,17 @@ module Airbrake
|
|
4
4
|
# @see Airbrake.notify_request
|
5
5
|
# @api public
|
6
6
|
# @since v3.2.0
|
7
|
-
# rubocop:disable Metrics/
|
8
|
-
Request
|
9
|
-
:method, :route, :status_code, :start_time, :end_time, :timing, :time
|
10
|
-
) do
|
7
|
+
# rubocop:disable Metrics/ParameterLists
|
8
|
+
class Request
|
11
9
|
include HashKeyable
|
12
10
|
include Ignorable
|
13
11
|
include Stashable
|
14
12
|
include Mergeable
|
15
13
|
include Grouppable
|
16
14
|
|
15
|
+
attr_accessor :method, :route, :status_code, :start_time, :end_time,
|
16
|
+
:timing, :time
|
17
|
+
|
17
18
|
def initialize(
|
18
19
|
method:,
|
19
20
|
route:,
|
@@ -24,7 +25,13 @@ module Airbrake
|
|
24
25
|
time: Time.now
|
25
26
|
)
|
26
27
|
@time_utc = TimeTruncate.utc_truncate_minutes(time)
|
27
|
-
|
28
|
+
@method = method
|
29
|
+
@route = route
|
30
|
+
@status_code = status_code
|
31
|
+
@start_time = start_time
|
32
|
+
@end_time = end_time
|
33
|
+
@timing = timing
|
34
|
+
@time = time
|
28
35
|
end
|
29
36
|
|
30
37
|
def destination
|
@@ -44,5 +51,5 @@ module Airbrake
|
|
44
51
|
}.delete_if { |_key, val| val.nil? }
|
45
52
|
end
|
46
53
|
end
|
47
|
-
# rubocop:enable Metrics/
|
54
|
+
# rubocop:enable Metrics/ParameterLists
|
48
55
|
end
|
data/lib/airbrake-ruby/stat.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'base64'
|
2
2
|
|
3
|
-
# rubocop:disable Metrics/BlockLength
|
4
3
|
module Airbrake
|
5
4
|
# Stat is a data structure that allows accumulating performance data (route
|
6
5
|
# performance, SQL query performance and such). It's powered by TDigests.
|
@@ -14,14 +13,19 @@ module Airbrake
|
|
14
13
|
# stat.to_h # Pack and serialize data so it can be transmitted.
|
15
14
|
#
|
16
15
|
# @since v3.2.0
|
17
|
-
Stat
|
16
|
+
class Stat
|
17
|
+
attr_accessor :count, :sum, :sumsq, :tdigest
|
18
|
+
|
18
19
|
# @param [Integer] count How many times this stat was incremented
|
19
20
|
# @param [Float] sum The sum of duration in milliseconds
|
20
21
|
# @param [Float] sumsq The squared sum of duration in milliseconds
|
21
22
|
# @param [TDigest::TDigest] tdigest Packed durations. By default,
|
22
23
|
# compression is 20
|
23
24
|
def initialize(count: 0, sum: 0.0, sumsq: 0.0, tdigest: TDigest.new(0.05))
|
24
|
-
|
25
|
+
@count = count
|
26
|
+
@sum = sum
|
27
|
+
@sumsq = sumsq
|
28
|
+
@tdigest = tdigest
|
25
29
|
end
|
26
30
|
|
27
31
|
# @return [Hash{String=>Object}] stats as a hash with compressed TDigest
|
@@ -67,7 +71,6 @@ module Airbrake
|
|
67
71
|
def inspect
|
68
72
|
"#<struct Airbrake::Stat count=#{count}, sum=#{sum}, sumsq=#{sumsq}>"
|
69
73
|
end
|
70
|
-
|
74
|
+
alias pretty_print inspect
|
71
75
|
end
|
72
76
|
end
|
73
|
-
# rubocop:enable Metrics/BlockLength
|
@@ -108,8 +108,8 @@ module Airbrake
|
|
108
108
|
return str if utf8_string && str.valid_encoding?
|
109
109
|
|
110
110
|
temp_str = str.dup
|
111
|
-
temp_str.encode!(TEMP_ENCODING, ENCODING_OPTIONS) if utf8_string
|
112
|
-
temp_str.encode!('utf-8', ENCODING_OPTIONS)
|
111
|
+
temp_str.encode!(TEMP_ENCODING, **ENCODING_OPTIONS) if utf8_string
|
112
|
+
temp_str.encode!('utf-8', **ENCODING_OPTIONS)
|
113
113
|
end
|
114
114
|
end
|
115
115
|
end
|
@@ -258,7 +258,9 @@ RSpec.describe Airbrake::Filters::ThreadFilter do
|
|
258
258
|
expect(notice[:params][:thread][:priority]).to eq(0)
|
259
259
|
end
|
260
260
|
|
261
|
-
it "appends safe_level", skip:
|
261
|
+
it "appends safe_level", skip: (
|
262
|
+
"Not supported on this version of Ruby." unless Airbrake::HAS_SAFE_LEVEL
|
263
|
+
) do
|
262
264
|
subject.call(notice)
|
263
265
|
expect(notice[:params][:thread][:safe_level]).to eq(0)
|
264
266
|
end
|
data/spec/queue_spec.rb
CHANGED
@@ -18,4 +18,13 @@ RSpec.describe Airbrake::Queue do
|
|
18
18
|
expect(queue.end_time).to eq(time + 1)
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
describe "#route" do
|
23
|
+
it "always returns an empty route" do
|
24
|
+
queue = described_class.new(
|
25
|
+
queue: 'a', error_count: 0, start_time: Time.now,
|
26
|
+
)
|
27
|
+
expect(queue.route).to be_empty
|
28
|
+
end
|
29
|
+
end
|
21
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: airbrake-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airbrake Technologies, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbtree3
|