sentry-ruby-core 4.4.1 → 4.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55322eb3e1391f625b292b0827c37a6e3c44ea4aacc6b9cc35a77f3feb2522a0
4
- data.tar.gz: 4d07834ec0038f98f990141b2997a5f6e0a00db33183d928d129dd67fa1324cd
3
+ metadata.gz: '069a03a0f4a0191b4a8a5ba1c7827e9c78423aea7d46f84a5112f7a4508a2f44'
4
+ data.tar.gz: df513f743bd7804084a42e8cf7dd8413bfd674e1a05fdbfaf1cc395a420237aa
5
5
  SHA512:
6
- metadata.gz: 220d28a57647a0c91d28502fe94913d87fcb5f81f7ae474da274ee5855350d911adb1c5b0786b0acbced0308bc37baf911203bda1d8b03348386e6e7f882db9e
7
- data.tar.gz: 443749298c01be72f32bbbb82759c3d8ffd765e72bb0134405685798e7d92584742f8402b1dd2bf88d5b079dc48d24690b9951fa3f88cbafad1d0aa01b2cb9c7
6
+ metadata.gz: 6586e7232c920d247ef5f8f837f1b759a52c48cbcb2c5caafc5e5097a3f803c86b9050b3b0cd4e6a648b4cda59b20ddc31e80a74dc5f6fabe93437a3da89938b
7
+ data.tar.gz: 4e0a36a001307b41b0d4fc03705b2d520bbc61ee1e1ecabc4a62a262f05b336e484771d9b0ca23ce92e4e8ba0eb60ca9bc3f40acce3be0b4946ca61336d362f5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ Individual gem's changelog has been deprecated. Please check the [project changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md).
4
+
5
+ ## 4.4.2
6
+
7
+ - Fix NoMethodError when SDK's dsn is nil [#1433](https://github.com/getsentry/sentry-ruby/pull/1433)
8
+ - fix: Update protocol version to 7 [#1434](https://github.com/getsentry/sentry-ruby/pull/1434)
9
+ - Fixes [#867](https://github.com/getsentry/sentry-ruby/issues/867)
10
+
3
11
  ## 4.4.1
4
12
 
5
13
  - Apply patches when initializing the SDK [#1432](https://github.com/getsentry/sentry-ruby/pull/1432)
data/Gemfile CHANGED
@@ -3,8 +3,7 @@ source "https://rubygems.org"
3
3
  gem "sentry-ruby-core", path: "./"
4
4
  gem "sentry-ruby", path: "./"
5
5
 
6
- # TODO: Remove this if https://github.com/jruby/jruby/issues/6547 is addressed
7
- gem "i18n", "<= 1.8.7"
6
+ gem "rack" unless ENV["WITHOUT_RACK"] == "1"
8
7
 
9
8
  gem "rake", "~> 12.0"
10
9
  gem "rspec", "~> 3.0"
@@ -12,10 +11,10 @@ gem "rspec-retry"
12
11
  gem "webmock"
13
12
  gem "timecop"
14
13
  gem "codecov", "0.2.12"
15
- gem "tapping_device"
16
14
 
15
+ gem "object_tracer"
16
+ gem "debug", github: "ruby/debug" if RUBY_VERSION.to_f >= 2.6
17
17
  gem "pry"
18
- gem "rack" unless ENV["WITHOUT_RACK"] == "1"
19
18
 
20
19
  gem "benchmark-ips"
21
20
  gem "benchmark_driver"
data/lib/sentry-ruby.rb CHANGED
@@ -32,6 +32,8 @@ module Sentry
32
32
 
33
33
  LOGGER_PROGNAME = "sentry".freeze
34
34
 
35
+ SENTRY_TRACE_HEADER_NAME = "sentry-trace".freeze
36
+
35
37
  THREAD_LOCAL = :sentry_hub
36
38
 
37
39
  def self.sdk_meta
@@ -82,6 +84,7 @@ module Sentry
82
84
  def init(&block)
83
85
  config = Configuration.new
84
86
  yield(config) if block_given?
87
+ config.detect_release
85
88
  apply_patches(config)
86
89
  client = Client.new(config)
87
90
  scope = Scope.new(max_breadcrumbs: config.max_breadcrumbs)
@@ -2,15 +2,16 @@ module Sentry
2
2
  class Breadcrumb
3
3
  DATA_SERIALIZATION_ERROR_MESSAGE = "[data were removed due to serialization issues]"
4
4
 
5
- attr_accessor :category, :data, :message, :level, :timestamp, :type
5
+ attr_accessor :category, :data, :level, :timestamp, :type
6
+ attr_reader :message
6
7
 
7
8
  def initialize(category: nil, data: nil, message: nil, timestamp: nil, level: nil, type: nil)
8
9
  @category = category
9
10
  @data = data || {}
10
11
  @level = level
11
- @message = message
12
12
  @timestamp = timestamp || Sentry.utc_now.to_i
13
13
  @type = type
14
+ self.message = message
14
15
  end
15
16
 
16
17
  def to_hash
@@ -24,6 +25,10 @@ module Sentry
24
25
  }
25
26
  end
26
27
 
28
+ def message=(msg)
29
+ @message = (msg || "").byteslice(0..Event::MAX_MESSAGE_SIZE_IN_BYTES)
30
+ end
31
+
27
32
  private
28
33
 
29
34
  def serialized_data
data/lib/sentry/client.rb CHANGED
@@ -30,7 +30,7 @@ module Sentry
30
30
 
31
31
  if async_block = configuration.async
32
32
  dispatch_async_event(async_block, event, hint)
33
- elsif hint.fetch(:background, true)
33
+ elsif configuration.background_worker_threads != 0 && hint.fetch(:background, true)
34
34
  dispatch_background_event(event, hint)
35
35
  else
36
36
  send_event(event, hint)
@@ -95,6 +95,14 @@ module Sentry
95
95
  raise
96
96
  end
97
97
 
98
+ def generate_sentry_trace(span)
99
+ return unless configuration.propagate_traces
100
+
101
+ trace = span.to_sentry_trace
102
+ log_debug("[Tracing] Adding #{SENTRY_TRACE_HEADER_NAME} header to outgoing request: #{trace}")
103
+ trace
104
+ end
105
+
98
106
  private
99
107
 
100
108
  def dispatch_background_event(event, hint)
@@ -106,6 +106,9 @@ module Sentry
106
106
  # Set automatically for Rails.
107
107
  attr_reader :project_root
108
108
 
109
+ # Insert sentry-trace to outgoing requests' headers
110
+ attr_accessor :propagate_traces
111
+
109
112
  # Array of rack env parameters to be included in the event sent to sentry.
110
113
  attr_accessor :rack_env_whitelist
111
114
 
@@ -127,6 +130,9 @@ module Sentry
127
130
  # will not be sent to Sentry.
128
131
  attr_accessor :send_default_pii
129
132
 
133
+ # Allow to skip Sentry emails within rake tasks
134
+ attr_accessor :skip_rake_integration
135
+
130
136
  # IP ranges for trusted proxies that will be skipped when calculating IP address.
131
137
  attr_accessor :trusted_proxies
132
138
 
@@ -190,11 +196,12 @@ module Sentry
190
196
  self.linecache = ::Sentry::LineCache.new
191
197
  self.logger = ::Sentry::Logger.new(STDOUT)
192
198
  self.project_root = Dir.pwd
199
+ self.propagate_traces = true
193
200
 
194
- self.release = detect_release
195
201
  self.sample_rate = 1.0
196
202
  self.send_modules = true
197
203
  self.send_default_pii = false
204
+ self.skip_rake_integration = false
198
205
  self.trusted_proxies = []
199
206
  self.dsn = ENV['SENTRY_DSN']
200
207
  self.server_name = server_name_from_env
@@ -306,10 +313,10 @@ module Sentry
306
313
  )
307
314
  end
308
315
 
309
- private
310
-
311
316
  def detect_release
312
- detect_release_from_env ||
317
+ return unless sending_allowed?
318
+
319
+ self.release ||= detect_release_from_env ||
313
320
  detect_release_from_git ||
314
321
  detect_release_from_capistrano ||
315
322
  detect_release_from_heroku
@@ -317,6 +324,8 @@ module Sentry
317
324
  log_error("Error detecting release", e, debug: debug)
318
325
  end
319
326
 
327
+ private
328
+
320
329
  def excluded_exception?(incoming_exception)
321
330
  excluded_exception_classes.any? do |excluded_exception|
322
331
  matches_exception?(excluded_exception, incoming_exception)
@@ -5,7 +5,36 @@ module Sentry
5
5
  module HTTP
6
6
  OP_NAME = "net.http"
7
7
 
8
+ # To explain how the entire thing works, we need to know how the original Net::HTTP#request works
9
+ # Here's part of its definition. As you can see, it usually calls itself inside a #start block
10
+ #
11
+ # ```
12
+ # def request(req, body = nil, &block)
13
+ # unless started?
14
+ # start {
15
+ # req['connection'] ||= 'close'
16
+ # return request(req, body, &block) # <- request will be called for the second time from the first call
17
+ # }
18
+ # end
19
+ # # .....
20
+ # end
21
+ # ```
22
+ #
23
+ # So when the entire flow looks like this:
24
+ #
25
+ # 1. #request is called.
26
+ # - But because the request hasn't started yet, it calls #start (which then calls #do_start)
27
+ # - At this moment @sentry_span is still nil, so #set_sentry_trace_header returns early
28
+ # 2. #do_start then creates a new Span and assigns it to @sentry_span
29
+ # 3. #request is called for the second time.
30
+ # - This time @sentry_span should present. So #set_sentry_trace_header will set the sentry-trace header on the request object
31
+ # 4. Once the request finished, it
32
+ # - Records a breadcrumb if http_logger is set
33
+ # - Finishes the Span inside @sentry_span and clears the instance variable
34
+ #
8
35
  def request(req, body = nil, &block)
36
+ set_sentry_trace_header(req)
37
+
9
38
  super.tap do |res|
10
39
  record_sentry_breadcrumb(req, res)
11
40
  record_sentry_span(req, res)
@@ -26,6 +55,13 @@ module Sentry
26
55
 
27
56
  private
28
57
 
58
+ def set_sentry_trace_header(req)
59
+ return unless @sentry_span
60
+
61
+ trace = Sentry.get_current_client.generate_sentry_trace(@sentry_span)
62
+ req[SENTRY_TRACE_HEADER_NAME] = trace if trace
63
+ end
64
+
29
65
  def record_sentry_breadcrumb(req, res)
30
66
  if Sentry.initialized? && Sentry.configuration.breadcrumbs_logger.include?(:http_logger)
31
67
  return if from_sentry_sdk?
@@ -71,8 +107,8 @@ module Sentry
71
107
  end
72
108
 
73
109
  def from_sentry_sdk?
74
- dsn_host = Sentry.configuration.dsn.host
75
- dsn_host == self.address
110
+ dsn = Sentry.configuration.dsn
111
+ dsn && dsn.host == self.address
76
112
  end
77
113
 
78
114
  def extract_request_info(req)
data/lib/sentry/rack.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  require 'rack'
2
2
 
3
3
  require 'sentry/rack/capture_exceptions'
4
- require 'sentry/rack/deprecations'
data/lib/sentry/rake.rb CHANGED
@@ -9,7 +9,7 @@ module Rake
9
9
  task_name = top_level_tasks.join(' ')
10
10
  scope.set_transaction_name(task_name)
11
11
  scope.set_tag("rake_task", task_name)
12
- end if Sentry.initialized?
12
+ end if Sentry.initialized? && !Sentry.configuration.skip_rake_integration
13
13
 
14
14
  orig_display_error_messsage(ex)
15
15
  end
@@ -3,7 +3,7 @@ require "base64"
3
3
 
4
4
  module Sentry
5
5
  class Transport
6
- PROTOCOL_VERSION = '5'
6
+ PROTOCOL_VERSION = '7'
7
7
  USER_AGENT = "sentry-ruby/#{Sentry::VERSION}"
8
8
 
9
9
  include LoggingHelper
@@ -1,3 +1,3 @@
1
1
  module Sentry
2
- VERSION = "4.4.1"
2
+ VERSION = "4.5.2"
3
3
  end
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/sentry-ruby/CHANGELOG.md"
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
20
20
 
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
data/sentry-ruby.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.metadata["homepage_uri"] = spec.homepage
17
17
  spec.metadata["source_code_uri"] = spec.homepage
18
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/sentry-ruby/CHANGELOG.md"
18
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
19
19
 
20
20
  spec.add_dependency "sentry-ruby-core", Sentry::VERSION
21
21
  spec.add_dependency "faraday", ">= 1.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-ruby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.1
4
+ version: 4.5.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: 2021-05-05 00:00:00.000000000 Z
11
+ date: 2021-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -46,7 +46,6 @@ extra_rdoc_files:
46
46
  - README.md
47
47
  - LICENSE.txt
48
48
  files:
49
- - ".craft.yml"
50
49
  - ".gitignore"
51
50
  - ".rspec"
52
51
  - CHANGELOG.md
@@ -61,7 +60,6 @@ files:
61
60
  - lib/sentry-ruby.rb
62
61
  - lib/sentry/background_worker.rb
63
62
  - lib/sentry/backtrace.rb
64
- - lib/sentry/benchmarks/benchmark_transport.rb
65
63
  - lib/sentry/breadcrumb.rb
66
64
  - lib/sentry/breadcrumb/sentry_logger.rb
67
65
  - lib/sentry/breadcrumb_buffer.rb
@@ -86,7 +84,6 @@ files:
86
84
  - lib/sentry/net/http.rb
87
85
  - lib/sentry/rack.rb
88
86
  - lib/sentry/rack/capture_exceptions.rb
89
- - lib/sentry/rack/deprecations.rb
90
87
  - lib/sentry/rake.rb
91
88
  - lib/sentry/scope.rb
92
89
  - lib/sentry/span.rb
@@ -110,7 +107,7 @@ licenses:
110
107
  metadata:
111
108
  homepage_uri: https://github.com/getsentry/sentry-ruby
112
109
  source_code_uri: https://github.com/getsentry/sentry-ruby
113
- changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/sentry-ruby/CHANGELOG.md
110
+ changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md
114
111
  post_install_message:
115
112
  rdoc_options: []
116
113
  require_paths:
@@ -126,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
123
  - !ruby/object:Gem::Version
127
124
  version: '0'
128
125
  requirements: []
129
- rubygems_version: 3.0.3.1
126
+ rubygems_version: 3.1.6
130
127
  signing_key:
131
128
  specification_version: 4
132
129
  summary: A gem that provides a client interface for the Sentry error logger
data/.craft.yml DELETED
@@ -1,29 +0,0 @@
1
- minVersion: '0.13.2'
2
- github:
3
- owner: getsentry
4
- repo: sentry-ruby
5
- changelogPolicy: simple
6
- preReleaseCommand: ruby ../.scripts/bump-version.rb
7
- releaseBranchPrefix: release-sentry-ruby
8
- statusProvider:
9
- name: github
10
- artifactProvider:
11
- name: github
12
- targets:
13
- # we always need to make sure sentry-ruby-core is present when pushing to any target
14
- - name: gem
15
- onlyIfPresent: /^sentry-ruby-core-\d.*\.gem$/
16
- - name: registry
17
- onlyIfPresent: /^sentry-ruby-core-\d.*\.gem$/
18
- type: sdk
19
- config:
20
- canonical: 'gem:sentry-ruby'
21
- - name: registry
22
- onlyIfPresent: /^sentry-ruby-core-\d.*\.gem$/
23
- type: sdk
24
- config:
25
- canonical: 'gem:sentry-ruby-core'
26
- - name: github
27
- onlyIfPresent: /^sentry-ruby-core-\d.*\.gem$/
28
- tagPrefix: sentry-ruby-v
29
- changelog: sentry-ruby/CHANGELOG.md
@@ -1,14 +0,0 @@
1
- module Sentry
2
- class BenchmarkTransport < Transport
3
- attr_accessor :events
4
-
5
- def initialize(*)
6
- super
7
- @events = []
8
- end
9
-
10
- def send_event(event)
11
- @events << encode(event.to_hash)
12
- end
13
- end
14
- end
@@ -1,19 +0,0 @@
1
- module Sentry
2
- module Rack
3
- class DeprecatedMiddleware
4
- def initialize(_)
5
- raise Sentry::Error.new <<~MSG
6
-
7
- You're seeing this message because #{self.class} has been replaced by Sentry::Rack::CaptureExceptions.
8
- Removing this middleware from your app and upgrading sentry-rails to 4.1.0+ should solve the issue.
9
- MSG
10
- end
11
- end
12
-
13
- class Tracing < DeprecatedMiddleware
14
- end
15
-
16
- class CaptureException < DeprecatedMiddleware
17
- end
18
- end
19
- end