sentry-ruby-core 4.4.0.pre.beta.0 → 4.5.0

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: cb17ca62057f29a255a7d725bd574775d840e987cbc3c067a9294b63311d26aa
4
- data.tar.gz: 9268967f80f8406bbcf3bf2b0dc150567b3adc16d1c4b38fd8ef5df5a1559737
3
+ metadata.gz: 77b33a511a0da9a3c16aa740b759444644f6c2108521963ab04400efb6479ed8
4
+ data.tar.gz: 8aa9963c54219234d00124993810a228228d2ef936cfbf394abba1523a074a87
5
5
  SHA512:
6
- metadata.gz: 3d57f757d5d7c36c24bf296fbb673c8afe20fb3fadc89c1a1f4046856188286f9db9c7fdd2b6c3d49e921a302f179f1c4acef4ac737b802cc0640e979eab0de8
7
- data.tar.gz: e5900027bce05c31a9bd10ea6fb2f660deee1494e37545a0637ea89767353add86b39fc4dde07de0c4ac9fcadb2f2d2bc8441308d4f89396e5c5de124ed7f445
6
+ metadata.gz: addd108239cdd58fa36c77407b30cf126d009dacb4eeecee64ab82110ebb646adbc35f7c9bc197c8050affd9b3ac5cf8e8e6f3a6c853c3877b66f154649bde32
7
+ data.tar.gz: 5738472cc230dcd31486b246f27f163fe4c80cf500f556b3d21eff1b1b8d80c7e0730ed02955dc969340e872001810553c16ecfb0e7e00f67c7541b807d508e4
data/.craft.yml CHANGED
@@ -26,4 +26,3 @@ targets:
26
26
  - name: github
27
27
  onlyIfPresent: /^sentry-ruby-core-\d.*\.gem$/
28
28
  tagPrefix: sentry-ruby-v
29
- changelog: sentry-ruby/CHANGELOG.md
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Changelog
2
2
 
3
- ## 4.4.0-beta.0
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
+
11
+ ## 4.4.1
12
+
13
+ - Apply patches when initializing the SDK [#1432](https://github.com/getsentry/sentry-ruby/pull/1432)
14
+
15
+ ## 4.4.0
4
16
 
5
17
  ### Features
6
18
 
@@ -60,6 +72,7 @@ It'll determine whether the SDK should run in the debugging mode. Default is `fa
60
72
  ### Bug Fixes
61
73
 
62
74
  - Check `Scope#set_context`'s value argument [#1415](https://github.com/getsentry/sentry-ruby/pull/1415)
75
+ - Disable tracing if events are not allowed to be sent [#1421](https://github.com/getsentry/sentry-ruby/pull/1421)
63
76
 
64
77
  ## 4.3.2
65
78
 
data/lib/sentry-ruby.rb CHANGED
@@ -7,7 +7,6 @@ require "sentry/exceptions"
7
7
  require "sentry/core_ext/object/deep_dup"
8
8
  require "sentry/utils/argument_checking_helper"
9
9
  require "sentry/utils/logging_helper"
10
- require "sentry/net/http"
11
10
  require "sentry/configuration"
12
11
  require "sentry/logger"
13
12
  require "sentry/event"
@@ -33,6 +32,8 @@ module Sentry
33
32
 
34
33
  LOGGER_PROGNAME = "sentry".freeze
35
34
 
35
+ SENTRY_TRACE_HEADER_NAME = "sentry-trace".freeze
36
+
36
37
  THREAD_LOCAL = :sentry_hub
37
38
 
38
39
  def self.sdk_meta
@@ -64,9 +65,26 @@ module Sentry
64
65
 
65
66
  attr_accessor :background_worker
66
67
 
68
+ @@registered_patches = []
69
+
70
+ def register_patch(&block)
71
+ registered_patches << block
72
+ end
73
+
74
+ def apply_patches(config)
75
+ registered_patches.each do |patch|
76
+ patch.call(config)
77
+ end
78
+ end
79
+
80
+ def registered_patches
81
+ @@registered_patches
82
+ end
83
+
67
84
  def init(&block)
68
85
  config = Configuration.new
69
86
  yield(config) if block_given?
87
+ apply_patches(config)
70
88
  client = Client.new(config)
71
89
  scope = Scope.new(max_breadcrumbs: config.max_breadcrumbs)
72
90
  hub = Hub.new(client, scope)
@@ -190,3 +208,6 @@ module Sentry
190
208
  end
191
209
  end
192
210
  end
211
+
212
+ # patches
213
+ require "sentry/net/http"
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,13 @@ 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
201
  self.release = detect_release
195
202
  self.sample_rate = 1.0
196
203
  self.send_modules = true
197
204
  self.send_default_pii = false
205
+ self.skip_rake_integration = false
198
206
  self.trusted_proxies = []
199
207
  self.dsn = ENV['SENTRY_DSN']
200
208
  self.server_name = server_name_from_env
@@ -293,7 +301,7 @@ module Sentry
293
301
  end
294
302
 
295
303
  def tracing_enabled?
296
- !!((@traces_sample_rate && @traces_sample_rate >= 0.0 && @traces_sample_rate <= 1.0) || @traces_sampler)
304
+ !!((@traces_sample_rate && @traces_sample_rate >= 0.0 && @traces_sample_rate <= 1.0) || @traces_sampler) && sending_allowed?
297
305
  end
298
306
 
299
307
  def stacktrace_builder
@@ -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)
@@ -84,4 +120,7 @@ module Sentry
84
120
  end
85
121
  end
86
122
 
87
- Net::HTTP.send(:prepend, Sentry::Net::HTTP)
123
+ Sentry.register_patch do
124
+ patch = Sentry::Net::HTTP
125
+ Net::HTTP.send(:prepend, patch) unless Net::HTTP.ancestors.include?(patch)
126
+ end
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.0-beta.0"
2
+ VERSION = "4.5.0"
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.0.pre.beta.0
4
+ version: 4.5.0
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-04-23 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -110,7 +110,7 @@ licenses:
110
110
  metadata:
111
111
  homepage_uri: https://github.com/getsentry/sentry-ruby
112
112
  source_code_uri: https://github.com/getsentry/sentry-ruby
113
- changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/sentry-ruby/CHANGELOG.md
113
+ changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md
114
114
  post_install_message:
115
115
  rdoc_options: []
116
116
  require_paths:
@@ -122,11 +122,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
122
  version: '2.4'
123
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  requirements:
125
- - - ">"
125
+ - - ">="
126
126
  - !ruby/object:Gem::Version
127
- version: 1.3.1
127
+ version: '0'
128
128
  requirements: []
129
- rubygems_version: 3.0.3.1
129
+ rubygems_version: 3.1.6
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: A gem that provides a client interface for the Sentry error logger