sentry-ruby 4.1.1 → 4.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cf12a695558927106256af0d85575b36bf2675b1ba87cf13baec2e40354055f
4
- data.tar.gz: 418475b2abe315f62b642d38ced99b6c16b78ffa1fef7ef645203bf46dff72e9
3
+ metadata.gz: cbe0af63148c410c71208f7bac743d24e224b5265102d645831a9538262961dc
4
+ data.tar.gz: 9933997d430fc94d400f97b9e2319ab14ccfe1bd2ff42635eda5b13bd4e11621
5
5
  SHA512:
6
- metadata.gz: f4b5c90aad8d0249c29e901beb3569d4e0a89c53d35f8da459e97eb4134b989728c89ebc913b59f0db1b85c1903beedfcfb5968d5833d3fc2d5a6d209308212c
7
- data.tar.gz: 86acbab302abb4d2cd66c9cc447486dcbebef127bbfbc03df69f2085057965166c3afc6a3f969d046b157255d1e88d54f85e7fac5581daa112e798eda04db2c7
6
+ metadata.gz: a813b4fad61840a850b6dd82451d689272800b5d4e405ab50f80f99cfe69a371f770c1a8151491ccd2f10400822e0e4a98bc8c2ca1265b562139bd7ffc1cdd02
7
+ data.tar.gz: 1331331801ea39234c96e50e9fc469713efd48ee316e5620ae2c200f97a4a4d88810f942d707fb77dab7b458284ee11cad4b6153632cde4aa6014e2df5a89820
@@ -1,10 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.1.2
4
+
5
+ - before_send callback shouldn't be applied to transaction events [#1167](https://github.com/getsentry/sentry-ruby/pull/1167)
6
+ - Transaction improvements [#1170](https://github.com/getsentry/sentry-ruby/pull/1170)
7
+ - Support Ruby 3 [#1172](https://github.com/getsentry/sentry-ruby/pull/1172)
8
+ - Add Integrable module [#1177](https://github.com/getsentry/sentry-ruby/pull/1177)
9
+
3
10
  ## 4.1.1
4
11
 
5
12
  - Fix NoMethodError when sending is not allowed [#1161](https://github.com/getsentry/sentry-ruby/pull/1161)
6
13
  - Add notification for users who still use deprecated middlewares [#1160](https://github.com/getsentry/sentry-ruby/pull/1160)
7
- - Improve top-level api safety [#1161](https://github.com/getsentry/sentry-ruby/pull/1161)
14
+ - Improve top-level api safety [#1162](https://github.com/getsentry/sentry-ruby/pull/1162)
8
15
 
9
16
  ## 4.1.0
10
17
 
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
7
  gem "rspec", "~> 3.0"
8
- gem "codecov"
8
+ gem "codecov", "0.2.12"
9
9
 
10
10
  gem "pry"
11
11
  gem "rack" unless ENV["WITHOUT_RACK"] == "1"
@@ -40,6 +40,17 @@ module Sentry
40
40
  Time.now.utc
41
41
  end
42
42
 
43
+ class << self
44
+ def integrations
45
+ @integrations ||= {}
46
+ end
47
+
48
+ def register_integration(name, version)
49
+ meta = { name: "sentry.ruby.#{name}", version: version }.freeze
50
+ integrations[name.to_s] = meta
51
+ end
52
+ end
53
+
43
54
  class << self
44
55
  extend Forwardable
45
56
 
@@ -47,16 +47,18 @@ module Sentry
47
47
  event
48
48
  end
49
49
 
50
- def event_from_exception(exception)
50
+ def event_from_exception(exception, hint = {})
51
+ integration_meta = Sentry.integrations[hint[:integration]]
51
52
  return unless @configuration.exception_class_allowed?(exception)
52
53
 
53
- Event.new(configuration: configuration).tap do |event|
54
+ Event.new(configuration: configuration, integration_meta: integration_meta).tap do |event|
54
55
  event.add_exception_interface(exception)
55
56
  end
56
57
  end
57
58
 
58
- def event_from_message(message)
59
- Event.new(configuration: configuration, message: message)
59
+ def event_from_message(message, hint = {})
60
+ integration_meta = Sentry.integrations[hint[:integration]]
61
+ Event.new(configuration: configuration, integration_meta: integration_meta, message: message)
60
62
  end
61
63
 
62
64
  def event_from_transaction(transaction)
@@ -72,7 +74,9 @@ module Sentry
72
74
  end
73
75
 
74
76
  def send_event(event, hint = nil)
75
- event = configuration.before_send.call(event, hint) if configuration.before_send
77
+ event_type = event.is_a?(Event) ? event.type : event["type"]
78
+ event = configuration.before_send.call(event, hint) if configuration.before_send && event_type == "event"
79
+
76
80
  if event.nil?
77
81
  configuration.logger.info(LOGGER_PROGNAME) { "Discarded event because before_send returned nil" }
78
82
  return
@@ -20,7 +20,7 @@ module Sentry
20
20
  attr_accessor(*ATTRIBUTES)
21
21
  attr_reader :configuration, :request, :exception, :stacktrace
22
22
 
23
- def initialize(configuration:, message: nil)
23
+ def initialize(configuration:, integration_meta: nil, message: nil)
24
24
  # this needs to go first because some setters rely on configuration
25
25
  @configuration = configuration
26
26
 
@@ -28,7 +28,7 @@ module Sentry
28
28
  @event_id = SecureRandom.uuid.delete("-")
29
29
  @timestamp = Sentry.utc_now.iso8601
30
30
  @platform = :ruby
31
- @sdk = Sentry.sdk_meta
31
+ @sdk = integration_meta || Sentry.sdk_meta
32
32
 
33
33
  @user = {}
34
34
  @extra = {}
@@ -76,12 +76,12 @@ module Sentry
76
76
  def capture_exception(exception, **options, &block)
77
77
  return unless current_client
78
78
 
79
- event = current_client.event_from_exception(exception)
79
+ options[:hint] ||= {}
80
+ options[:hint][:exception] = exception
81
+ event = current_client.event_from_exception(exception, options[:hint])
80
82
 
81
83
  return unless event
82
84
 
83
- options[:hint] ||= {}
84
- options[:hint] = options[:hint].merge(exception: exception)
85
85
  capture_event(event, **options, &block)
86
86
  end
87
87
 
@@ -89,8 +89,8 @@ module Sentry
89
89
  return unless current_client
90
90
 
91
91
  options[:hint] ||= {}
92
- options[:hint] = options[:hint].merge(message: message)
93
- event = current_client.event_from_message(message)
92
+ options[:hint][:message] = message
93
+ event = current_client.event_from_message(message, options[:hint])
94
94
  capture_event(event, **options, &block)
95
95
  end
96
96
 
@@ -0,0 +1,24 @@
1
+ module Sentry
2
+ module Integrable
3
+ def register_integration(name:, version:)
4
+ Sentry.register_integration(name, version)
5
+ @integration_name = name
6
+ end
7
+
8
+ def integration_name
9
+ @integration_name
10
+ end
11
+
12
+ def capture_exception(exception, **options, &block)
13
+ options[:hint] ||= {}
14
+ options[:hint][:integration] = integration_name
15
+ Sentry.capture_exception(exception, **options, &block)
16
+ end
17
+
18
+ def capture_message(message, **options, &block)
19
+ options[:hint] ||= {}
20
+ options[:hint][:integration] = integration_name
21
+ Sentry.capture_message(message, **options, &block)
22
+ end
23
+ end
24
+ end
@@ -16,7 +16,7 @@ module Sentry
16
16
  scope.set_transaction_name(env["PATH_INFO"]) if env["PATH_INFO"]
17
17
  scope.set_rack_env(env)
18
18
 
19
- span = Sentry.start_transaction(name: scope.transaction_name, op: "rack.request")
19
+ span = Sentry.start_transaction(name: scope.transaction_name, op: transaction_op)
20
20
  scope.set_span(span)
21
21
 
22
22
  begin
@@ -25,13 +25,13 @@ module Sentry
25
25
  finish_span(span, 500)
26
26
  raise # Don't capture Sentry errors
27
27
  rescue Exception => e
28
- Sentry.capture_exception(e)
28
+ capture_exception(e)
29
29
  finish_span(span, 500)
30
30
  raise
31
31
  end
32
32
 
33
33
  exception = collect_exception(env)
34
- Sentry.capture_exception(exception) if exception
34
+ capture_exception(exception) if exception
35
35
 
36
36
  finish_span(span, response[0])
37
37
 
@@ -45,6 +45,14 @@ module Sentry
45
45
  env['rack.exception'] || env['sinatra.error']
46
46
  end
47
47
 
48
+ def transaction_op
49
+ "rack.request".freeze
50
+ end
51
+
52
+ def capture_exception(exception)
53
+ Sentry.capture_exception(exception)
54
+ end
55
+
48
56
  def finish_span(span, status_code)
49
57
  span.set_http_status(status_code)
50
58
  span.finish
@@ -77,7 +77,7 @@ module Sentry
77
77
 
78
78
  def start_child(**options)
79
79
  options = options.dup.merge(trace_id: @trace_id, parent_span_id: @span_id, sampled: @sampled)
80
- Span.new(options)
80
+ Span.new(**options)
81
81
  end
82
82
 
83
83
  def with_child_span(**options, &block)
@@ -67,8 +67,9 @@ module Sentry
67
67
  # Convert to hash
68
68
  event_hash = event.to_hash
69
69
 
70
- event_id = event_hash[:event_id] || event_hash['event_id']
71
- configuration.logger.info(LOGGER_PROGNAME) { "Sending event #{event_id} to Sentry" }
70
+ event_id = event_hash[:event_id] || event_hash["event_id"]
71
+ event_type = event_hash[:type] || event_hash["type"]
72
+ configuration.logger.info(LOGGER_PROGNAME) { "Sending #{event_type} #{event_id} to Sentry" }
72
73
  encode(event_hash)
73
74
  end
74
75
 
@@ -1,3 +1,3 @@
1
1
  module Sentry
2
- VERSION = "4.1.1"
2
+ VERSION = "4.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 4.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-21 00:00:00.000000000 Z
11
+ date: 2020-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -78,6 +78,7 @@ files:
78
78
  - lib/sentry/dsn.rb
79
79
  - lib/sentry/event.rb
80
80
  - lib/sentry/hub.rb
81
+ - lib/sentry/integrable.rb
81
82
  - lib/sentry/interface.rb
82
83
  - lib/sentry/interfaces/exception.rb
83
84
  - lib/sentry/interfaces/request.rb