sentry-ruby-core 4.8.3 → 5.0.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/README.md +2 -0
- data/lib/sentry/background_worker.rb +3 -1
- data/lib/sentry/backtrace.rb +0 -3
- data/lib/sentry/breadcrumb.rb +22 -3
- data/lib/sentry/breadcrumb_buffer.rb +14 -0
- data/lib/sentry/client.rb +35 -2
- data/lib/sentry/configuration.rb +4 -3
- data/lib/sentry/event.rb +54 -18
- data/lib/sentry/hub.rb +3 -0
- data/lib/sentry/interface.rb +1 -10
- data/lib/sentry/interfaces/exception.rb +11 -3
- data/lib/sentry/interfaces/request.rb +34 -18
- data/lib/sentry/interfaces/stacktrace.rb +4 -0
- data/lib/sentry/interfaces/stacktrace_builder.rb +37 -10
- data/lib/sentry/interfaces/threads.rb +10 -2
- data/lib/sentry/net/http.rb +49 -64
- data/lib/sentry/scope.rb +67 -1
- data/lib/sentry/span.rb +83 -8
- data/lib/sentry/transaction.rb +42 -9
- data/lib/sentry/transaction_event.rb +8 -0
- data/lib/sentry/transport/configuration.rb +1 -2
- data/lib/sentry/transport/http_transport.rb +52 -35
- data/lib/sentry/transport.rb +4 -1
- data/lib/sentry/utils/logging_helper.rb +4 -4
- data/lib/sentry/version.rb +1 -1
- data/lib/sentry-ruby.rb +41 -2
- data/sentry-ruby-core.gemspec +0 -1
- data/sentry-ruby.gemspec +0 -1
- metadata +2 -16
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "net/http"
|
4
|
+
require "zlib"
|
5
5
|
|
6
6
|
module Sentry
|
7
7
|
class HTTPTransport < Transport
|
@@ -12,12 +12,12 @@ module Sentry
|
|
12
12
|
DEFAULT_DELAY = 60
|
13
13
|
RETRY_AFTER_HEADER = "retry-after"
|
14
14
|
RATE_LIMIT_HEADER = "x-sentry-rate-limits"
|
15
|
+
USER_AGENT = "sentry-ruby/#{Sentry::VERSION}"
|
15
16
|
|
16
|
-
attr_reader :conn
|
17
|
+
attr_reader :conn
|
17
18
|
|
18
19
|
def initialize(*args)
|
19
20
|
super
|
20
|
-
@adapter = @transport_configuration.http_adapter || Faraday.default_adapter
|
21
21
|
@conn = set_conn
|
22
22
|
@endpoint = @dsn.envelope_endpoint
|
23
23
|
end
|
@@ -30,29 +30,37 @@ module Sentry
|
|
30
30
|
encoding = GZIP_ENCODING
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
headers = {
|
34
|
+
'Content-Type' => CONTENT_TYPE,
|
35
|
+
'Content-Encoding' => encoding,
|
36
|
+
'X-Sentry-Auth' => generate_auth_header,
|
37
|
+
'User-Agent' => USER_AGENT
|
38
|
+
}
|
39
|
+
|
40
|
+
response = conn.start do |http|
|
41
|
+
request = ::Net::HTTP::Post.new(@endpoint, headers)
|
42
|
+
request.body = data
|
43
|
+
http.request(request)
|
38
44
|
end
|
39
45
|
|
40
|
-
if
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
if response.code.match?(/\A2\d{2}/)
|
47
|
+
if has_rate_limited_header?(response)
|
48
|
+
handle_rate_limited_response(response)
|
49
|
+
end
|
50
|
+
else
|
51
|
+
error_info = "the server responded with status #{response.code}"
|
45
52
|
|
46
|
-
|
47
|
-
|
48
|
-
handle_rate_limited_response(e.response[:headers])
|
53
|
+
if response.code == "429"
|
54
|
+
handle_rate_limited_response(response)
|
49
55
|
else
|
50
|
-
error_info += "\nbody: #{
|
51
|
-
error_info += " Error in headers is: #{
|
56
|
+
error_info += "\nbody: #{response.body}"
|
57
|
+
error_info += " Error in headers is: #{response['x-sentry-error']}" if response['x-sentry-error']
|
52
58
|
end
|
53
|
-
end
|
54
59
|
|
55
|
-
|
60
|
+
raise Sentry::ExternalError, error_info
|
61
|
+
end
|
62
|
+
rescue SocketError => e
|
63
|
+
raise Sentry::ExternalError.new(e.message)
|
56
64
|
end
|
57
65
|
|
58
66
|
private
|
@@ -120,31 +128,40 @@ module Sentry
|
|
120
128
|
end
|
121
129
|
|
122
130
|
def set_conn
|
123
|
-
server = @dsn.server
|
131
|
+
server = URI(@dsn.server)
|
124
132
|
|
125
133
|
log_debug("Sentry HTTP Transport connecting to #{server}")
|
126
134
|
|
127
|
-
|
128
|
-
|
129
|
-
builder.response :raise_error
|
130
|
-
builder.options.merge! faraday_opts
|
131
|
-
builder.headers[:user_agent] = "sentry-ruby/#{Sentry::VERSION}"
|
132
|
-
builder.adapter(*adapter)
|
133
|
-
end
|
134
|
-
end
|
135
|
+
use_ssl = server.scheme == "https"
|
136
|
+
port = use_ssl ? 443 : 80
|
135
137
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
138
|
+
connection =
|
139
|
+
if proxy = @transport_configuration.proxy
|
140
|
+
::Net::HTTP.new(server.hostname, port, proxy[:uri].hostname, proxy[:uri].port, proxy[:user], proxy[:password])
|
141
|
+
else
|
142
|
+
::Net::HTTP.new(server.hostname, port, nil)
|
143
|
+
end
|
144
|
+
|
145
|
+
connection.use_ssl = use_ssl
|
146
|
+
connection.read_timeout = @transport_configuration.timeout
|
147
|
+
connection.write_timeout = @transport_configuration.timeout if connection.respond_to?(:write_timeout)
|
148
|
+
connection.open_timeout = @transport_configuration.open_timeout
|
149
|
+
|
150
|
+
ssl_configuration.each do |key, value|
|
151
|
+
connection.send("#{key}=", value)
|
140
152
|
end
|
153
|
+
|
154
|
+
connection
|
141
155
|
end
|
142
156
|
|
143
157
|
def ssl_configuration
|
144
|
-
{
|
158
|
+
configuration = {
|
145
159
|
verify: @transport_configuration.ssl_verification,
|
146
160
|
ca_file: @transport_configuration.ssl_ca_file
|
147
161
|
}.merge(@transport_configuration.ssl || {})
|
162
|
+
|
163
|
+
configuration[:verify_mode] = configuration.delete(:verify) ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
|
164
|
+
configuration
|
148
165
|
end
|
149
166
|
end
|
150
167
|
end
|
data/lib/sentry/transport.rb
CHANGED
@@ -23,7 +23,10 @@ module Sentry
|
|
23
23
|
|
24
24
|
include LoggingHelper
|
25
25
|
|
26
|
-
attr_reader :
|
26
|
+
attr_reader :rate_limits, :discarded_events, :last_client_report_sent
|
27
|
+
|
28
|
+
# @deprecated Use Sentry.logger to retrieve the current logger instead.
|
29
|
+
attr_reader :logger
|
27
30
|
|
28
31
|
def initialize(configuration)
|
29
32
|
@logger = configuration.logger
|
@@ -6,21 +6,21 @@ module Sentry
|
|
6
6
|
message = "#{message}: #{exception.message}"
|
7
7
|
message += "\n#{exception.backtrace.join("\n")}" if debug
|
8
8
|
|
9
|
-
logger.error(LOGGER_PROGNAME) do
|
9
|
+
@logger.error(LOGGER_PROGNAME) do
|
10
10
|
message
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
def log_info(message)
|
15
|
-
logger.info(LOGGER_PROGNAME) { message }
|
15
|
+
@logger.info(LOGGER_PROGNAME) { message }
|
16
16
|
end
|
17
17
|
|
18
18
|
def log_debug(message)
|
19
|
-
logger.debug(LOGGER_PROGNAME) { message }
|
19
|
+
@logger.debug(LOGGER_PROGNAME) { message }
|
20
20
|
end
|
21
21
|
|
22
22
|
def log_warn(message)
|
23
|
-
logger.warn(LOGGER_PROGNAME) { message }
|
23
|
+
@logger.warn(LOGGER_PROGNAME) { message }
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/sentry/version.rb
CHANGED
data/lib/sentry-ruby.rb
CHANGED
@@ -18,7 +18,6 @@ require "sentry/transaction"
|
|
18
18
|
require "sentry/hub"
|
19
19
|
require "sentry/background_worker"
|
20
20
|
|
21
|
-
|
22
21
|
[
|
23
22
|
"sentry/rake",
|
24
23
|
"sentry/rack",
|
@@ -101,7 +100,47 @@ module Sentry
|
|
101
100
|
|
102
101
|
extend Forwardable
|
103
102
|
|
103
|
+
# @!macro [new] configuration
|
104
|
+
# The Configuration object that's used for configuring the client and its transport.
|
105
|
+
# @return [Configuration]
|
106
|
+
# @!macro [new] send_event
|
107
|
+
# Sends the event to Sentry.
|
108
|
+
# @param event [Event] the event to be sent.
|
109
|
+
# @param hint [Hash] the hint data that'll be passed to `before_send` callback.
|
110
|
+
# @return [Event]
|
111
|
+
|
112
|
+
# @!method configuration
|
113
|
+
# @!macro configuration
|
114
|
+
# @!method send_event
|
115
|
+
# @!macro send_event
|
104
116
|
def_delegators :get_current_client, :configuration, :send_event
|
117
|
+
|
118
|
+
# @!macro [new] set_extras
|
119
|
+
# Updates the scope's extras attribute by merging with the old value.
|
120
|
+
# @param extras [Hash]
|
121
|
+
# @return [Hash]
|
122
|
+
# @!macro [new] set_user
|
123
|
+
# Sets the scope's user attribute.
|
124
|
+
# @param user [Hash]
|
125
|
+
# @return [Hash]
|
126
|
+
# @!macro [new] set_context
|
127
|
+
# Adds a new key-value pair to current contexts.
|
128
|
+
# @param key [String, Symbol]
|
129
|
+
# @param value [Object]
|
130
|
+
# @return [Hash]
|
131
|
+
# @!macro [new] set_tags
|
132
|
+
# Updates the scope's tags attribute by merging with the old value.
|
133
|
+
# @param tags [Hash]
|
134
|
+
# @return [Hash]
|
135
|
+
|
136
|
+
# @!method set_tags
|
137
|
+
# @!macro set_tags
|
138
|
+
# @!method set_extras
|
139
|
+
# @!macro set_extras
|
140
|
+
# @!method set_user
|
141
|
+
# @!macro set_user
|
142
|
+
# @!method set_context
|
143
|
+
# @!macro set_context
|
105
144
|
def_delegators :get_current_scope, :set_tags, :set_extras, :set_user, :set_context
|
106
145
|
|
107
146
|
##### Main APIs #####
|
@@ -135,7 +174,7 @@ module Sentry
|
|
135
174
|
#
|
136
175
|
# @return [Boolean]
|
137
176
|
def initialized?
|
138
|
-
|
177
|
+
!!get_main_hub
|
139
178
|
end
|
140
179
|
|
141
180
|
# Returns an uri for security policy reporting that's generated from the given DSN
|
data/sentry-ruby-core.gemspec
CHANGED
data/sentry-ruby.gemspec
CHANGED
@@ -18,6 +18,5 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
19
19
|
|
20
20
|
spec.add_dependency "sentry-ruby-core", Sentry::VERSION
|
21
|
-
spec.add_dependency "faraday", "~> 1.0"
|
22
21
|
spec.add_dependency "concurrent-ruby", '~> 1.0', '>= 1.0.2'
|
23
22
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentry-ruby-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.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: 2022-01-
|
11
|
+
date: 2022-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: faraday
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: concurrent-ruby
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|