lapsoss 0.1.0 → 0.2.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/lib/lapsoss/adapters/appsignal_adapter.rb +25 -26
- data/lib/lapsoss/adapters/base.rb +2 -2
- data/lib/lapsoss/adapters/bugsnag_adapter.rb +12 -0
- data/lib/lapsoss/adapters/insight_hub_adapter.rb +29 -32
- data/lib/lapsoss/adapters/logger_adapter.rb +8 -8
- data/lib/lapsoss/adapters/rollbar_adapter.rb +27 -28
- data/lib/lapsoss/adapters/sentry_adapter.rb +23 -29
- data/lib/lapsoss/backtrace_frame.rb +21 -31
- data/lib/lapsoss/backtrace_processor.rb +28 -31
- data/lib/lapsoss/client.rb +4 -6
- data/lib/lapsoss/configuration.rb +48 -41
- data/lib/lapsoss/current.rb +1 -1
- data/lib/lapsoss/event.rb +6 -5
- data/lib/lapsoss/{exclusions.rb → exclusion_filter.rb} +56 -56
- data/lib/lapsoss/fingerprinter.rb +33 -37
- data/lib/lapsoss/http_client.rb +45 -11
- data/lib/lapsoss/middleware.rb +35 -43
- data/lib/lapsoss/pipeline.rb +6 -10
- data/lib/lapsoss/railtie.rb +9 -9
- data/lib/lapsoss/registry.rb +23 -22
- data/lib/lapsoss/release_tracker.rb +160 -182
- data/lib/lapsoss/router.rb +3 -5
- data/lib/lapsoss/sampling.rb +49 -53
- data/lib/lapsoss/scope.rb +6 -10
- data/lib/lapsoss/scrubber.rb +22 -24
- data/lib/lapsoss/user_context.rb +78 -85
- data/lib/lapsoss/validators.rb +13 -26
- data/lib/lapsoss/version.rb +1 -1
- data/lib/lapsoss.rb +12 -25
- metadata +59 -23
data/lib/lapsoss/validators.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'uri'
|
4
4
|
|
5
5
|
module Lapsoss
|
6
6
|
module Validators
|
@@ -42,18 +42,14 @@ module Lapsoss
|
|
42
42
|
|
43
43
|
begin
|
44
44
|
uri = URI.parse(value)
|
45
|
-
unless uri.scheme && uri.host
|
46
|
-
|
47
|
-
end
|
48
|
-
unless %w[http https].include?(uri.scheme)
|
49
|
-
raise ValidationError, "#{name} must use http or https scheme"
|
50
|
-
end
|
45
|
+
raise ValidationError, "#{name} must be a valid URL with scheme and host" unless uri.scheme && uri.host
|
46
|
+
raise ValidationError, "#{name} must use http or https scheme" unless %w[http https].include?(uri.scheme)
|
51
47
|
rescue URI::InvalidURIError => e
|
52
48
|
raise ValidationError, "#{name} is not a valid URL: #{e.message}"
|
53
49
|
end
|
54
50
|
end
|
55
51
|
|
56
|
-
def validate_dsn!(dsn_string, name =
|
52
|
+
def validate_dsn!(dsn_string, name = 'DSN')
|
57
53
|
return if dsn_string.nil?
|
58
54
|
|
59
55
|
validate_type!(dsn_string, [String], name)
|
@@ -67,12 +63,10 @@ module Lapsoss
|
|
67
63
|
validate_presence!(uri.user, "#{name} public key")
|
68
64
|
|
69
65
|
# Validate scheme
|
70
|
-
unless %w[http https].include?(uri.scheme)
|
71
|
-
raise ValidationError, "#{name} must use http or https scheme"
|
72
|
-
end
|
66
|
+
raise ValidationError, "#{name} must use http or https scheme" unless %w[http https].include?(uri.scheme)
|
73
67
|
|
74
68
|
# Extract project ID from path
|
75
|
-
path_parts = uri.path&.split(
|
69
|
+
path_parts = uri.path&.split('/') || []
|
76
70
|
project_id = path_parts.last
|
77
71
|
validate_presence!(project_id, "#{name} project ID")
|
78
72
|
|
@@ -80,7 +74,6 @@ module Lapsoss
|
|
80
74
|
unless project_id.match?(/^\d+$/)
|
81
75
|
raise ValidationError, "#{name} project ID must be numeric, got '#{project_id}'"
|
82
76
|
end
|
83
|
-
|
84
77
|
rescue URI::InvalidURIError => e
|
85
78
|
raise ValidationError, "#{name} is not a valid URI: #{e.message}"
|
86
79
|
end
|
@@ -96,17 +89,13 @@ module Lapsoss
|
|
96
89
|
raise ValidationError, "#{name} must be a valid UUID format"
|
97
90
|
end
|
98
91
|
when :hex
|
99
|
-
unless value.match?(/\A[0-9a-f]+\z/i)
|
100
|
-
raise ValidationError, "#{name} must be a valid hexadecimal string"
|
101
|
-
end
|
92
|
+
raise ValidationError, "#{name} must be a valid hexadecimal string" unless value.match?(/\A[0-9a-f]+\z/i)
|
102
93
|
when :alphanumeric
|
103
|
-
unless value.match?(/\A[a-z0-9]+\z/i)
|
104
|
-
raise ValidationError, "#{name} must be alphanumeric"
|
105
|
-
end
|
94
|
+
raise ValidationError, "#{name} must be alphanumeric" unless value.match?(/\A[a-z0-9]+\z/i)
|
106
95
|
end
|
107
96
|
end
|
108
97
|
|
109
|
-
def validate_environment!(value, name =
|
98
|
+
def validate_environment!(value, name = 'environment')
|
110
99
|
return if value.nil?
|
111
100
|
|
112
101
|
validate_type!(value, [String, Symbol], name)
|
@@ -117,22 +106,20 @@ module Lapsoss
|
|
117
106
|
end
|
118
107
|
end
|
119
108
|
|
120
|
-
def validate_sample_rate!(value, name =
|
109
|
+
def validate_sample_rate!(value, name = 'sample_rate')
|
121
110
|
return if value.nil?
|
122
111
|
|
123
112
|
validate_numeric_range!(value, 0.0..1.0, name)
|
124
113
|
end
|
125
114
|
|
126
|
-
def validate_timeout!(value, name =
|
115
|
+
def validate_timeout!(value, name = 'timeout')
|
127
116
|
return if value.nil?
|
128
117
|
|
129
118
|
validate_type!(value, [Numeric], name)
|
130
|
-
if value <= 0
|
131
|
-
raise ValidationError, "#{name} must be positive, got #{value}"
|
132
|
-
end
|
119
|
+
raise ValidationError, "#{name} must be positive, got #{value}" if value <= 0
|
133
120
|
end
|
134
121
|
|
135
|
-
def validate_retries!(value, name =
|
122
|
+
def validate_retries!(value, name = 'max_retries')
|
136
123
|
return if value.nil?
|
137
124
|
|
138
125
|
validate_type!(value, [Integer], name)
|
data/lib/lapsoss/version.rb
CHANGED
data/lib/lapsoss.rb
CHANGED
@@ -1,22 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
require_relative
|
11
|
-
require_relative "lapsoss/fingerprinter"
|
12
|
-
require_relative "lapsoss/backtrace_processor"
|
13
|
-
require_relative "lapsoss/scrubber"
|
14
|
-
require_relative "lapsoss/pipeline"
|
15
|
-
require_relative "lapsoss/sampling"
|
16
|
-
require_relative "lapsoss/user_context"
|
17
|
-
require_relative "lapsoss/exclusions"
|
18
|
-
require_relative "lapsoss/release_tracker"
|
19
|
-
require_relative "lapsoss/railtie" if defined?(Rails)
|
3
|
+
require 'zeitwerk'
|
4
|
+
require 'active_support/core_ext/module/delegation'
|
5
|
+
|
6
|
+
loader = Zeitwerk::Loader.for_gem
|
7
|
+
loader.do_not_eager_load("#{__dir__}/lapsoss/adapters")
|
8
|
+
loader.setup
|
9
|
+
|
10
|
+
require_relative 'lapsoss/railtie' if defined?(Rails)
|
20
11
|
|
21
12
|
module Lapsoss
|
22
13
|
class Error < StandardError; end
|
@@ -57,20 +48,16 @@ module Lapsoss
|
|
57
48
|
client.add_breadcrumb(message, type: type, **metadata)
|
58
49
|
end
|
59
50
|
|
60
|
-
def with_scope(context = {}, &
|
61
|
-
client.with_scope(context, &
|
51
|
+
def with_scope(context = {}, &)
|
52
|
+
client.with_scope(context, &)
|
62
53
|
end
|
63
54
|
|
64
|
-
|
65
|
-
client.current_scope
|
66
|
-
end
|
55
|
+
delegate :current_scope, to: :client
|
67
56
|
|
68
57
|
def flush(timeout: 2)
|
69
58
|
client.flush(timeout: timeout)
|
70
59
|
end
|
71
60
|
|
72
|
-
|
73
|
-
client.shutdown
|
74
|
-
end
|
61
|
+
delegate :shutdown, to: :client
|
75
62
|
end
|
76
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lapsoss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
@@ -10,33 +10,33 @@ cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
|
-
name:
|
13
|
+
name: activesupport
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- - "
|
16
|
+
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
18
|
+
version: '7.2'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
|
-
- - "
|
23
|
+
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: '
|
25
|
+
version: '7.2'
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
|
-
name:
|
27
|
+
name: concurrent-ruby
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
|
-
- - "
|
30
|
+
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '1.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '1.0'
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: faraday
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,47 +66,53 @@ dependencies:
|
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '2.0'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
69
|
+
name: zeitwerk
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
75
|
-
type: :
|
74
|
+
version: '2.6'
|
75
|
+
type: :runtime
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '2.6'
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
83
|
+
name: async-http-faraday
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
89
|
-
|
88
|
+
version: '0.19'
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 0.19.0
|
92
|
+
type: :runtime
|
90
93
|
prerelease: false
|
91
94
|
version_requirements: !ruby/object:Gem::Requirement
|
92
95
|
requirements:
|
93
96
|
- - "~>"
|
94
97
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
98
|
+
version: '0.19'
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.19.0
|
96
102
|
- !ruby/object:Gem::Dependency
|
97
|
-
name:
|
103
|
+
name: dotenv
|
98
104
|
requirement: !ruby/object:Gem::Requirement
|
99
105
|
requirements:
|
100
106
|
- - "~>"
|
101
107
|
- !ruby/object:Gem::Version
|
102
|
-
version: '3.
|
108
|
+
version: '3.0'
|
103
109
|
type: :development
|
104
110
|
prerelease: false
|
105
111
|
version_requirements: !ruby/object:Gem::Requirement
|
106
112
|
requirements:
|
107
113
|
- - "~>"
|
108
114
|
- !ruby/object:Gem::Version
|
109
|
-
version: '3.
|
115
|
+
version: '3.0'
|
110
116
|
- !ruby/object:Gem::Dependency
|
111
117
|
name: rake
|
112
118
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,6 +155,34 @@ dependencies:
|
|
149
155
|
- - "~>"
|
150
156
|
- !ruby/object:Gem::Version
|
151
157
|
version: '1.0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: vcr
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '6.0'
|
165
|
+
type: :development
|
166
|
+
prerelease: false
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '6.0'
|
172
|
+
- !ruby/object:Gem::Dependency
|
173
|
+
name: webmock
|
174
|
+
requirement: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '3.18'
|
179
|
+
type: :development
|
180
|
+
prerelease: false
|
181
|
+
version_requirements: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - "~>"
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '3.18'
|
152
186
|
description: Lapsoss provides a clean, adapter-based approach to error reporting that
|
153
187
|
doesn't monkey patch your application. Send errors to any error tracking service
|
154
188
|
or custom backend through a unified API.
|
@@ -164,6 +198,7 @@ files:
|
|
164
198
|
- lib/lapsoss.rb
|
165
199
|
- lib/lapsoss/adapters/appsignal_adapter.rb
|
166
200
|
- lib/lapsoss/adapters/base.rb
|
201
|
+
- lib/lapsoss/adapters/bugsnag_adapter.rb
|
167
202
|
- lib/lapsoss/adapters/insight_hub_adapter.rb
|
168
203
|
- lib/lapsoss/adapters/logger_adapter.rb
|
169
204
|
- lib/lapsoss/adapters/rollbar_adapter.rb
|
@@ -174,7 +209,7 @@ files:
|
|
174
209
|
- lib/lapsoss/configuration.rb
|
175
210
|
- lib/lapsoss/current.rb
|
176
211
|
- lib/lapsoss/event.rb
|
177
|
-
- lib/lapsoss/
|
212
|
+
- lib/lapsoss/exclusion_filter.rb
|
178
213
|
- lib/lapsoss/fingerprinter.rb
|
179
214
|
- lib/lapsoss/http_client.rb
|
180
215
|
- lib/lapsoss/middleware.rb
|
@@ -197,6 +232,7 @@ metadata:
|
|
197
232
|
homepage_uri: https://github.com/seuros/lapsoss
|
198
233
|
source_code_uri: https://github.com/seuros/lapsoss
|
199
234
|
changelog_uri: https://github.com/seuros/lapsoss/blob/main/CHANGELOG.md
|
235
|
+
rubygems_mfa_required: 'true'
|
200
236
|
rdoc_options: []
|
201
237
|
require_paths:
|
202
238
|
- lib
|