sentry-ruby-core 4.6.3 → 4.7.1

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: d11c35de1743f0035364e78a4866425e8976f632363ccc83f63a9f6954e43b29
4
- data.tar.gz: 79fe8dad952d06b588407109bc10a8f191ec04739edd5115efd3dbe7a32253d8
3
+ metadata.gz: b44d17f4c1d10102a398692daf891a9f0d506e9ad370ca7f942a4bca470ada00
4
+ data.tar.gz: 0a365e84e9f0881331492d37ad05869c70e514afd8932e26a2af919b2eb0f98b
5
5
  SHA512:
6
- metadata.gz: 38d2f4b123c3df2f28117997a769cf54ea1fa4af2eb1e14cc1492b54a23ad0ed53abd8f0ae2492e30abd50df1bccd79d6e8987227ec0dae5411e7130c13821f0
7
- data.tar.gz: c1c558a090aa8852b11af61e082ecf2977e948b7cce74c1331e1f019129376492169c901bb6a1b0b89802517b0b89559899e6f414ea93b80d40fee34565a2506
6
+ metadata.gz: 0c2a2e18a8f3d03f805b8c578c2240e02baa0e70b28b2929c14280bf34f958bb9f23e7a68a9c82d3a5d36490f42a796e22baa6316e5423e619229580ee47b227
7
+ data.tar.gz: 002762a3e85563716cc056fc86f0571d1198f6b1df219eec3782b57510b7e566f0be08a694d1f24b74f0146b2c01029922badd1c94f18a32bda0d830c672a92b
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 st0012
3
+ Copyright (c) 2020 getsentry
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -67,7 +67,7 @@ module Sentry
67
67
  type: severity >= 3 ? "error" : level
68
68
  )
69
69
 
70
- Sentry.add_breadcrumb(crumb)
70
+ Sentry.add_breadcrumb(crumb, hint: { severity: severity })
71
71
  end
72
72
  end
73
73
 
data/lib/sentry/client.rb CHANGED
@@ -26,7 +26,12 @@ module Sentry
26
26
  def capture_event(event, scope, hint = {})
27
27
  return unless configuration.sending_allowed?
28
28
 
29
- scope.apply_to_event(event, hint)
29
+ event = scope.apply_to_event(event, hint)
30
+
31
+ if event.nil?
32
+ log_info("Discarded event because one of the event processors returned nil")
33
+ return
34
+ end
30
35
 
31
36
  if async_block = configuration.async
32
37
  dispatch_async_event(async_block, event, hint)
@@ -52,10 +57,10 @@ module Sentry
52
57
  end
53
58
  end
54
59
 
55
- def event_from_message(message, hint = {})
60
+ def event_from_message(message, hint = {}, backtrace: nil)
56
61
  integration_meta = Sentry.integrations[hint[:integration]]
57
62
  event = Event.new(configuration: configuration, integration_meta: integration_meta, message: message)
58
- event.add_threads_interface(backtrace: caller)
63
+ event.add_threads_interface(backtrace: backtrace || caller)
59
64
  event
60
65
  end
61
66
 
@@ -89,7 +89,7 @@ module Sentry
89
89
  # You should probably append to this rather than overwrite it.
90
90
  attr_accessor :excluded_exceptions
91
91
 
92
- # Boolean to check nested exceptions when deciding if to exclude. Defaults to false
92
+ # Boolean to check nested exceptions when deciding if to exclude. Defaults to true
93
93
  attr_accessor :inspect_exception_causes_for_exclusion
94
94
  alias inspect_exception_causes_for_exclusion? inspect_exception_causes_for_exclusion
95
95
 
@@ -324,6 +324,15 @@ module Sentry
324
324
  log_error("Error detecting release", e, debug: debug)
325
325
  end
326
326
 
327
+ def csp_report_uri
328
+ if dsn && dsn.valid?
329
+ uri = dsn.csp_report_uri
330
+ uri += "&sentry_release=#{CGI.escape(release)}" if release && !release.empty?
331
+ uri += "&sentry_environment=#{CGI.escape(environment)}" if environment && !environment.empty?
332
+ uri
333
+ end
334
+ end
335
+
327
336
  private
328
337
 
329
338
  def excluded_exception?(incoming_exception)
data/lib/sentry/dsn.rb CHANGED
@@ -40,6 +40,10 @@ module Sentry
40
40
  server
41
41
  end
42
42
 
43
+ def csp_report_uri
44
+ "#{server}/api/#{project_id}/security/?sentry_key=#{public_key}"
45
+ end
46
+
43
47
  def envelope_endpoint
44
48
  "#{path}/api/#{project_id}/envelope/"
45
49
  end
data/lib/sentry/hub.rb CHANGED
@@ -108,7 +108,8 @@ module Sentry
108
108
 
109
109
  options[:hint] ||= {}
110
110
  options[:hint][:message] = message
111
- event = current_client.event_from_message(message, options[:hint])
111
+ backtrace = options.delete(:backtrace)
112
+ event = current_client.event_from_message(message, options[:hint], backtrace: backtrace)
112
113
  capture_event(event, **options, &block)
113
114
  end
114
115
 
@@ -135,6 +136,8 @@ module Sentry
135
136
  end
136
137
 
137
138
  def add_breadcrumb(breadcrumb, hint: {})
139
+ return unless configuration.enabled_in_current_env?
140
+
138
141
  if before_breadcrumb = current_client.configuration.before_breadcrumb
139
142
  breadcrumb = before_breadcrumb.call(breadcrumb, hint)
140
143
  end
@@ -57,7 +57,7 @@ module Sentry
57
57
  request.POST
58
58
  elsif request.body # JSON requests, etc
59
59
  data = request.body.read(MAX_BODY_LIMIT)
60
- data = data.force_encoding(Encoding::UTF_8) if data.respond_to?(:force_encoding)
60
+ data = encode_to_utf_8(data.to_s)
61
61
  request.body.rewind
62
62
  data
63
63
  end
@@ -76,7 +76,8 @@ module Sentry
76
76
  # Rack stores headers as HTTP_WHAT_EVER, we need What-Ever
77
77
  key = key.sub(/^HTTP_/, "")
78
78
  key = key.split('_').map(&:capitalize).join('-')
79
- memo[key] = value.to_s
79
+
80
+ memo[key] = encode_to_utf_8(value.to_s)
80
81
  rescue StandardError => e
81
82
  # Rails adds objects to the Rack env that can sometimes raise exceptions
82
83
  # when `to_s` is called.
@@ -87,6 +88,18 @@ module Sentry
87
88
  end
88
89
  end
89
90
 
91
+ def encode_to_utf_8(value)
92
+ if value.encoding != Encoding::UTF_8 && value.respond_to?(:force_encoding)
93
+ value = value.dup.force_encoding(Encoding::UTF_8)
94
+ end
95
+
96
+ if !value.valid_encoding?
97
+ value = value.scrub
98
+ end
99
+
100
+ value
101
+ end
102
+
90
103
  def is_skippable_header?(key)
91
104
  key.upcase != key || # lower-case envs aren't real http headers
92
105
  key == "HTTP_COOKIE" || # Cookies don't go here, they go somewhere else
data/lib/sentry/rake.rb CHANGED
@@ -1,30 +1,31 @@
1
1
  require "rake"
2
2
  require "rake/task"
3
3
 
4
- module Rake
5
- class Application
4
+ module Sentry
5
+ module Rake
6
+ module Application
7
+ def display_error_message(ex)
8
+ Sentry.capture_exception(ex, hint: { background: false }) do |scope|
9
+ task_name = top_level_tasks.join(' ')
10
+ scope.set_transaction_name(task_name)
11
+ scope.set_tag("rake_task", task_name)
12
+ end if Sentry.initialized? && !Sentry.configuration.skip_rake_integration
6
13
 
7
- alias orig_display_error_messsage display_error_message
8
- def display_error_message(ex)
9
- Sentry.capture_exception(ex, hint: { background: false }) do |scope|
10
- task_name = top_level_tasks.join(' ')
11
- scope.set_transaction_name(task_name)
12
- scope.set_tag("rake_task", task_name)
13
- end if Sentry.initialized? && !Sentry.configuration.skip_rake_integration
14
-
15
- orig_display_error_messsage(ex)
14
+ super
15
+ end
16
16
  end
17
- end
18
17
 
19
- class Task
20
- alias orig_execute execute
18
+ module Task
19
+ def execute(args=nil)
20
+ return super unless Sentry.initialized? && Sentry.get_current_hub
21
21
 
22
- def execute(args=nil)
23
- return orig_execute(args) unless Sentry.initialized? && Sentry.get_current_hub
24
-
25
- Sentry.get_current_hub.with_background_worker_disabled do
26
- orig_execute(args)
22
+ Sentry.get_current_hub.with_background_worker_disabled do
23
+ super
24
+ end
27
25
  end
28
26
  end
29
27
  end
30
28
  end
29
+
30
+ Rake::Application.prepend(Sentry::Rake::Application)
31
+ Rake::Task.prepend(Sentry::Rake::Task)
data/lib/sentry/scope.rb CHANGED
@@ -23,6 +23,7 @@ module Sentry
23
23
  event.user = user.merge(event.user)
24
24
  event.extra = extra.merge(event.extra)
25
25
  event.contexts = contexts.merge(event.contexts)
26
+ event.transaction = transaction_name if transaction_name
26
27
 
27
28
  if span
28
29
  event.contexts[:trace] = span.get_trace_context
@@ -30,7 +31,6 @@ module Sentry
30
31
 
31
32
  event.fingerprint = fingerprint
32
33
  event.level = level
33
- event.transaction = transaction_names.last
34
34
  event.breadcrumbs = breadcrumbs
35
35
  event.rack_env = rack_env if rack_env
36
36
 
@@ -1,3 +1,3 @@
1
1
  module Sentry
2
- VERSION = "4.6.3"
2
+ VERSION = "4.7.1"
3
3
  end
data/lib/sentry-ruby.rb CHANGED
@@ -36,15 +36,27 @@ module Sentry
36
36
 
37
37
  THREAD_LOCAL = :sentry_hub
38
38
 
39
- def self.sdk_meta
40
- META
41
- end
39
+ class << self
40
+ attr_accessor :background_worker
42
41
 
43
- def self.utc_now
44
- Time.now.utc
45
- end
42
+ ##### Patch Registration #####
43
+ #
44
+ def register_patch(&block)
45
+ registered_patches << block
46
+ end
46
47
 
47
- class << self
48
+ def apply_patches(config)
49
+ registered_patches.each do |patch|
50
+ patch.call(config)
51
+ end
52
+ end
53
+
54
+ def registered_patches
55
+ @registered_patches ||= []
56
+ end
57
+
58
+ ##### Integrations #####
59
+ #
48
60
  # Returns a hash that contains all the integrations that have been registered to the main SDK.
49
61
  def integrations
50
62
  @integrations ||= {}
@@ -55,32 +67,16 @@ module Sentry
55
67
  meta = { name: "sentry.ruby.#{name}", version: version }.freeze
56
68
  integrations[name.to_s] = meta
57
69
  end
58
- end
59
70
 
60
- class << self
71
+ ##### Method Delegation #####
72
+ #
61
73
  extend Forwardable
62
74
 
63
75
  def_delegators :get_current_client, :configuration, :send_event
64
76
  def_delegators :get_current_scope, :set_tags, :set_extras, :set_user, :set_context
65
77
 
66
- attr_accessor :background_worker
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
-
78
+ ##### Main APIs #####
79
+ #
84
80
  def init(&block)
85
81
  config = Configuration.new
86
82
  yield(config) if block_given?
@@ -94,14 +90,26 @@ module Sentry
94
90
  @background_worker = Sentry::BackgroundWorker.new(config)
95
91
  end
96
92
 
93
+ # Returns an uri for security policy reporting that's generated from the given DSN
94
+ # (To learn more about security policy reporting: https://docs.sentry.io/product/security-policy-reporting/)
95
+ #
96
+ # It returns nil if
97
+ #
98
+ # 1. The SDK is not initialized yet.
99
+ # 2. The DSN is not provided or is invalid.
100
+ def csp_report_uri
101
+ return unless initialized?
102
+ configuration.csp_report_uri
103
+ end
104
+
97
105
  # Returns the main thread's active hub.
98
106
  def get_main_hub
99
107
  @main_hub
100
108
  end
101
109
 
102
110
  # Takes an instance of Sentry::Breadcrumb and stores it to the current active scope.
103
- def add_breadcrumb(breadcrumb)
104
- get_current_hub&.add_breadcrumb(breadcrumb)
111
+ def add_breadcrumb(breadcrumb, **options)
112
+ get_current_hub&.add_breadcrumb(breadcrumb, **options)
105
113
  end
106
114
 
107
115
  # Returns the current active hub.
@@ -193,6 +201,9 @@ module Sentry
193
201
  get_current_hub&.last_event_id
194
202
  end
195
203
 
204
+
205
+ ##### Helpers #####
206
+ #
196
207
  def sys_command(command)
197
208
  result = `#{command} 2>&1` rescue nil
198
209
  return if result.nil? || result.empty? || ($CHILD_STATUS && $CHILD_STATUS.exitstatus != 0)
@@ -207,6 +218,14 @@ module Sentry
207
218
  def logger
208
219
  configuration.logger
209
220
  end
221
+
222
+ def sdk_meta
223
+ META
224
+ end
225
+
226
+ def utc_now
227
+ Time.now.utc
228
+ end
210
229
  end
211
230
  end
212
231
 
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["Sentry Team"]
7
7
  spec.description = spec.summary = "A gem that provides a client interface for the Sentry error logger"
8
8
  spec.email = "accounts@sentry.io"
9
- spec.license = 'Apache-2.0'
9
+ spec.license = 'MIT'
10
10
  spec.homepage = "https://github.com/getsentry/sentry-ruby"
11
11
 
12
12
  spec.platform = Gem::Platform::RUBY
data/sentry-ruby.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["Sentry Team"]
7
7
  spec.description = spec.summary = "A gem that provides a client interface for the Sentry error logger"
8
8
  spec.email = "accounts@sentry.io"
9
- spec.license = 'Apache-2.0'
9
+ spec.license = 'MIT'
10
10
  spec.homepage = "https://github.com/getsentry/sentry-ruby"
11
11
 
12
12
  spec.platform = Gem::Platform::RUBY
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.6.3
4
+ version: 4.7.1
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-07-26 00:00:00.000000000 Z
11
+ date: 2021-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -103,7 +103,7 @@ files:
103
103
  - sentry-ruby.gemspec
104
104
  homepage: https://github.com/getsentry/sentry-ruby
105
105
  licenses:
106
- - Apache-2.0
106
+ - MIT
107
107
  metadata:
108
108
  homepage_uri: https://github.com/getsentry/sentry-ruby
109
109
  source_code_uri: https://github.com/getsentry/sentry-ruby