pliny 1.2.0 → 1.3.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/pliny/error_reporters/sentry.rb +40 -0
- data/lib/pliny/version.rb +1 -1
- data/lib/template/Gemfile +1 -0
- data/lib/template/config/initializers/sentry.rb +14 -0
- data/spec/error_reporters/sentry_spec.rb +83 -0
- metadata +45 -82
- data/lib/template/config/initializers/rollbar.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 251c0162450bf5e3ec77d7d3328d98cfb95c5c2b5350dc0a45da0ed67f5a7480
|
4
|
+
data.tar.gz: 78f0fba0ae08d2c57c7b5ec66701a2fecb01017ee7f8708cd6c85bf9e07bb6b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc7ebe625e643356c66ea27a0f90e60c47ab726962f5391cc3b40ba13455fd70623566431d4e195a093d1481d610085a98521c6dca1781d62fc7867113eded8d
|
7
|
+
data.tar.gz: 41ceaae8f87a12916eca172429b023010a0d8d415cfc2d6e0ed7f87a3e9788764ee8670c1765b6e164eaca363f3b882fe723b98e0ab22ba2c8e7401d69cbaba5
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pliny
|
4
|
+
module ErrorReporters
|
5
|
+
class Sentry
|
6
|
+
def notify(exception, context:, rack_env:)
|
7
|
+
::Sentry.with_scope do |scope|
|
8
|
+
configure_scope(scope, context: context, rack_env: rack_env)
|
9
|
+
::Sentry.capture_exception(exception)
|
10
|
+
end
|
11
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
12
|
+
::Sentry.capture_exception(e)
|
13
|
+
raise
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def configure_scope(scope, context:, rack_env:)
|
19
|
+
scope.set_context("custom", context)
|
20
|
+
|
21
|
+
begin
|
22
|
+
person_data = extract_person_data_from_controller(rack_env)
|
23
|
+
if person_data && !person_data.empty?
|
24
|
+
scope.set_user(
|
25
|
+
id: person_data[:id],
|
26
|
+
email: person_data[:email],
|
27
|
+
username: person_data[:username],
|
28
|
+
)
|
29
|
+
end
|
30
|
+
rescue => e
|
31
|
+
::Sentry.capture_exception(e)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_person_data_from_controller(env)
|
36
|
+
env["sentry.person_data"] || {}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/pliny/version.rb
CHANGED
data/lib/template/Gemfile
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pliny/error_reporters/sentry"
|
4
|
+
|
5
|
+
Pliny::ErrorReporters.error_reporters << Pliny::ErrorReporters::Sentry
|
6
|
+
|
7
|
+
Sentry.init do |config|
|
8
|
+
config.dsn = ENV["SENTRY_DSN"]
|
9
|
+
config.environment = ENV["SENTRY_ENV"] || ENV["RACK_ENV"]
|
10
|
+
config.enabled_environments = ENV["SENTRY_ENABLED_ENVIRONMENTS"]&.split(",") || %w[production staging]
|
11
|
+
config.traces_sample_rate = ENV["SENTRY_TRACES_SAMPLE_RATE"]&.to_f || 0.1
|
12
|
+
end
|
13
|
+
|
14
|
+
Pliny.use Sentry::Rack::CaptureExceptions
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "sentry-ruby"
|
5
|
+
require "pliny/error_reporters/sentry"
|
6
|
+
|
7
|
+
describe Pliny::ErrorReporters::Sentry do
|
8
|
+
subject(:reporter) { described_class.new }
|
9
|
+
|
10
|
+
describe "#notify" do
|
11
|
+
let(:exception) { StandardError.new("Something went wrong") }
|
12
|
+
let(:context) { { step: :foo } }
|
13
|
+
let(:rack_env) { { "rack.input" => StringIO.new } }
|
14
|
+
|
15
|
+
subject(:notify) do
|
16
|
+
reporter.notify(exception, context: context, rack_env: rack_env)
|
17
|
+
end
|
18
|
+
|
19
|
+
before do
|
20
|
+
allow(::Sentry).to receive(:with_scope).and_yield(scope)
|
21
|
+
allow(::Sentry).to receive(:capture_exception)
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:scope) { instance_double("Sentry::Scope") }
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(scope).to receive(:set_context)
|
28
|
+
allow(scope).to receive(:set_user)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "creates a sentry scope" do
|
32
|
+
notify
|
33
|
+
expect(::Sentry).to have_received(:with_scope).once
|
34
|
+
end
|
35
|
+
|
36
|
+
it "sets custom context" do
|
37
|
+
notify
|
38
|
+
expect(scope).to have_received(:set_context).with("custom", { step: :foo })
|
39
|
+
end
|
40
|
+
|
41
|
+
it "captures the exception" do
|
42
|
+
notify
|
43
|
+
expect(::Sentry).to have_received(:capture_exception).with(exception)
|
44
|
+
end
|
45
|
+
|
46
|
+
context "given a rack_env with sentry.person_data" do
|
47
|
+
let(:rack_env) { { "sentry.person_data" => { id: 123, email: "test@example.com", username: "testuser" }, "rack.input" => StringIO.new } }
|
48
|
+
|
49
|
+
it "sets user context from sentry.person_data" do
|
50
|
+
notify
|
51
|
+
expect(scope).to have_received(:set_user).with(id: 123, email: "test@example.com", username: "testuser")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "given a rack_env with empty sentry.person_data" do
|
56
|
+
let(:rack_env) { { "sentry.person_data" => {}, "rack.input" => StringIO.new } }
|
57
|
+
|
58
|
+
it "does not set user context" do
|
59
|
+
notify
|
60
|
+
expect(scope).not_to have_received(:set_user)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "given an empty rack_env" do
|
65
|
+
let(:rack_env) { {} }
|
66
|
+
|
67
|
+
it "expects rack_env to be a hash" do
|
68
|
+
assert_kind_of(Hash, rack_env)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "sets only custom context" do
|
72
|
+
notify
|
73
|
+
expect(scope).to have_received(:set_context).once.with("custom", { step: :foo })
|
74
|
+
expect(scope).not_to have_received(:set_user)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "captures the exception" do
|
78
|
+
notify
|
79
|
+
expect(::Sentry).to have_received(:capture_exception).with(exception)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pliny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandur Leach
|
8
8
|
- Pedro Belo
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
@@ -132,95 +131,77 @@ dependencies:
|
|
132
131
|
- !ruby/object:Gem::Version
|
133
132
|
version: '2.0'
|
134
133
|
- !ruby/object:Gem::Dependency
|
135
|
-
name:
|
134
|
+
name: pry
|
136
135
|
requirement: !ruby/object:Gem::Requirement
|
137
136
|
requirements:
|
138
|
-
- - "
|
137
|
+
- - ">="
|
139
138
|
- !ruby/object:Gem::Version
|
140
|
-
version: '
|
139
|
+
version: '0'
|
141
140
|
type: :development
|
142
141
|
prerelease: false
|
143
142
|
version_requirements: !ruby/object:Gem::Requirement
|
144
143
|
requirements:
|
145
|
-
- - "
|
144
|
+
- - ">="
|
146
145
|
- !ruby/object:Gem::Version
|
147
|
-
version: '
|
146
|
+
version: '0'
|
148
147
|
- !ruby/object:Gem::Dependency
|
149
|
-
name:
|
148
|
+
name: pry-byebug
|
150
149
|
requirement: !ruby/object:Gem::Requirement
|
151
150
|
requirements:
|
152
|
-
- - "
|
151
|
+
- - ">="
|
153
152
|
- !ruby/object:Gem::Version
|
154
|
-
version: '
|
153
|
+
version: '0'
|
155
154
|
type: :development
|
156
155
|
prerelease: false
|
157
156
|
version_requirements: !ruby/object:Gem::Requirement
|
158
157
|
requirements:
|
159
|
-
- - "
|
158
|
+
- - ">="
|
160
159
|
- !ruby/object:Gem::Version
|
161
|
-
version: '
|
160
|
+
version: '0'
|
162
161
|
- !ruby/object:Gem::Dependency
|
163
|
-
name:
|
162
|
+
name: rack-test
|
164
163
|
requirement: !ruby/object:Gem::Requirement
|
165
164
|
requirements:
|
166
|
-
- - "~>"
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '3.1'
|
169
165
|
- - ">="
|
170
166
|
- !ruby/object:Gem::Version
|
171
|
-
version:
|
167
|
+
version: '0'
|
172
168
|
type: :development
|
173
169
|
prerelease: false
|
174
170
|
version_requirements: !ruby/object:Gem::Requirement
|
175
171
|
requirements:
|
176
|
-
- - "~>"
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: '3.1'
|
179
172
|
- - ">="
|
180
173
|
- !ruby/object:Gem::Version
|
181
|
-
version:
|
174
|
+
version: '0'
|
182
175
|
- !ruby/object:Gem::Dependency
|
183
|
-
name:
|
176
|
+
name: rake
|
184
177
|
requirement: !ruby/object:Gem::Requirement
|
185
178
|
requirements:
|
186
179
|
- - ">="
|
187
180
|
- !ruby/object:Gem::Version
|
188
|
-
version: '
|
189
|
-
- - "<"
|
190
|
-
- !ruby/object:Gem::Version
|
191
|
-
version: '5.0'
|
181
|
+
version: '0'
|
192
182
|
type: :development
|
193
183
|
prerelease: false
|
194
184
|
version_requirements: !ruby/object:Gem::Requirement
|
195
185
|
requirements:
|
196
186
|
- - ">="
|
197
187
|
- !ruby/object:Gem::Version
|
198
|
-
version: '
|
199
|
-
- - "<"
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '5.0'
|
188
|
+
version: '0'
|
202
189
|
- !ruby/object:Gem::Dependency
|
203
|
-
name:
|
190
|
+
name: rollbar
|
204
191
|
requirement: !ruby/object:Gem::Requirement
|
205
192
|
requirements:
|
206
|
-
- - "~>"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0.7'
|
209
193
|
- - ">="
|
210
194
|
- !ruby/object:Gem::Version
|
211
|
-
version: 0
|
195
|
+
version: '0'
|
212
196
|
type: :development
|
213
197
|
prerelease: false
|
214
198
|
version_requirements: !ruby/object:Gem::Requirement
|
215
199
|
requirements:
|
216
|
-
- - "~>"
|
217
|
-
- !ruby/object:Gem::Version
|
218
|
-
version: '0.7'
|
219
200
|
- - ">="
|
220
201
|
- !ruby/object:Gem::Version
|
221
|
-
version: 0
|
202
|
+
version: '0'
|
222
203
|
- !ruby/object:Gem::Dependency
|
223
|
-
name:
|
204
|
+
name: rspec
|
224
205
|
requirement: !ruby/object:Gem::Requirement
|
225
206
|
requirements:
|
226
207
|
- - ">="
|
@@ -234,7 +215,7 @@ dependencies:
|
|
234
215
|
- !ruby/object:Gem::Version
|
235
216
|
version: '0'
|
236
217
|
- !ruby/object:Gem::Dependency
|
237
|
-
name:
|
218
|
+
name: rubocop
|
238
219
|
requirement: !ruby/object:Gem::Requirement
|
239
220
|
requirements:
|
240
221
|
- - ">="
|
@@ -248,79 +229,61 @@ dependencies:
|
|
248
229
|
- !ruby/object:Gem::Version
|
249
230
|
version: '0'
|
250
231
|
- !ruby/object:Gem::Dependency
|
251
|
-
name:
|
232
|
+
name: sentry-ruby
|
252
233
|
requirement: !ruby/object:Gem::Requirement
|
253
234
|
requirements:
|
254
|
-
- - "
|
255
|
-
- !ruby/object:Gem::Version
|
256
|
-
version: '1.0'
|
257
|
-
- - "<"
|
235
|
+
- - ">="
|
258
236
|
- !ruby/object:Gem::Version
|
259
|
-
version: '
|
237
|
+
version: '0'
|
260
238
|
type: :development
|
261
239
|
prerelease: false
|
262
240
|
version_requirements: !ruby/object:Gem::Requirement
|
263
241
|
requirements:
|
264
|
-
- - "
|
265
|
-
- !ruby/object:Gem::Version
|
266
|
-
version: '1.0'
|
267
|
-
- - "<"
|
242
|
+
- - ">="
|
268
243
|
- !ruby/object:Gem::Version
|
269
|
-
version: '
|
244
|
+
version: '0'
|
270
245
|
- !ruby/object:Gem::Dependency
|
271
|
-
name:
|
246
|
+
name: sequel
|
272
247
|
requirement: !ruby/object:Gem::Requirement
|
273
248
|
requirements:
|
274
|
-
- - "
|
249
|
+
- - ">="
|
275
250
|
- !ruby/object:Gem::Version
|
276
|
-
version: '
|
251
|
+
version: '0'
|
277
252
|
type: :development
|
278
253
|
prerelease: false
|
279
254
|
version_requirements: !ruby/object:Gem::Requirement
|
280
255
|
requirements:
|
281
|
-
- - "
|
256
|
+
- - ">="
|
282
257
|
- !ruby/object:Gem::Version
|
283
|
-
version: '
|
258
|
+
version: '0'
|
284
259
|
- !ruby/object:Gem::Dependency
|
285
|
-
name:
|
260
|
+
name: sinatra-contrib
|
286
261
|
requirement: !ruby/object:Gem::Requirement
|
287
262
|
requirements:
|
288
|
-
- - "
|
289
|
-
- !ruby/object:Gem::Version
|
290
|
-
version: '5.4'
|
291
|
-
- - "<"
|
263
|
+
- - ">="
|
292
264
|
- !ruby/object:Gem::Version
|
293
|
-
version: '
|
265
|
+
version: '0'
|
294
266
|
type: :development
|
295
267
|
prerelease: false
|
296
268
|
version_requirements: !ruby/object:Gem::Requirement
|
297
269
|
requirements:
|
298
|
-
- - "
|
299
|
-
- !ruby/object:Gem::Version
|
300
|
-
version: '5.4'
|
301
|
-
- - "<"
|
270
|
+
- - ">="
|
302
271
|
- !ruby/object:Gem::Version
|
303
|
-
version: '
|
272
|
+
version: '0'
|
304
273
|
- !ruby/object:Gem::Dependency
|
305
|
-
name:
|
274
|
+
name: timecop
|
306
275
|
requirement: !ruby/object:Gem::Requirement
|
307
276
|
requirements:
|
308
|
-
- - "~>"
|
309
|
-
- !ruby/object:Gem::Version
|
310
|
-
version: '0.52'
|
311
277
|
- - ">="
|
312
278
|
- !ruby/object:Gem::Version
|
313
|
-
version: 0
|
279
|
+
version: '0'
|
314
280
|
type: :development
|
315
281
|
prerelease: false
|
316
282
|
version_requirements: !ruby/object:Gem::Requirement
|
317
283
|
requirements:
|
318
|
-
- - "~>"
|
319
|
-
- !ruby/object:Gem::Version
|
320
|
-
version: '0.52'
|
321
284
|
- - ">="
|
322
285
|
- !ruby/object:Gem::Version
|
323
|
-
version: 0
|
286
|
+
version: '0'
|
324
287
|
description: Pliny is a set of base classes and helpers to help developers write excellent
|
325
288
|
APIs in Sinatra
|
326
289
|
email:
|
@@ -353,6 +316,7 @@ files:
|
|
353
316
|
- lib/pliny/db_support.rb
|
354
317
|
- lib/pliny/error_reporters.rb
|
355
318
|
- lib/pliny/error_reporters/rollbar.rb
|
319
|
+
- lib/pliny/error_reporters/sentry.rb
|
356
320
|
- lib/pliny/errors.rb
|
357
321
|
- lib/pliny/helpers/encode.rb
|
358
322
|
- lib/pliny/helpers/params.rb
|
@@ -411,7 +375,7 @@ files:
|
|
411
375
|
- lib/template/config/initializers/database.rb
|
412
376
|
- lib/template/config/initializers/log.rb
|
413
377
|
- lib/template/config/initializers/metrics.rb
|
414
|
-
- lib/template/config/initializers/
|
378
|
+
- lib/template/config/initializers/sentry.rb
|
415
379
|
- lib/template/config/puma.rb
|
416
380
|
- lib/template/db/schema.sql
|
417
381
|
- lib/template/db/seeds.rb
|
@@ -448,6 +412,7 @@ files:
|
|
448
412
|
- spec/config_helpers_spec.rb
|
449
413
|
- spec/db_support_spec.rb
|
450
414
|
- spec/error_reporters/rollbar_spec.rb
|
415
|
+
- spec/error_reporters/sentry_spec.rb
|
451
416
|
- spec/error_reporters_spec.rb
|
452
417
|
- spec/errors_spec.rb
|
453
418
|
- spec/helpers/encode_spec.rb
|
@@ -477,7 +442,6 @@ homepage: https://github.com/interagent/pliny
|
|
477
442
|
licenses:
|
478
443
|
- MIT
|
479
444
|
metadata: {}
|
480
|
-
post_install_message:
|
481
445
|
rdoc_options: []
|
482
446
|
require_paths:
|
483
447
|
- lib
|
@@ -492,8 +456,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
492
456
|
- !ruby/object:Gem::Version
|
493
457
|
version: '0'
|
494
458
|
requirements: []
|
495
|
-
rubygems_version: 3.
|
496
|
-
signing_key:
|
459
|
+
rubygems_version: 3.6.7
|
497
460
|
specification_version: 4
|
498
461
|
summary: Basic tooling to support API apps in Sinatra
|
499
462
|
test_files: []
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require "pliny/error_reporters/rollbar"
|
2
|
-
|
3
|
-
Pliny::ErrorReporters.error_reporters << Pliny::ErrorReporters::Rollbar
|
4
|
-
|
5
|
-
Rollbar.configure do |config|
|
6
|
-
config.enabled = ENV.key?("ROLLBAR_ACCESS_TOKEN")
|
7
|
-
config.disable_rack_monkey_patch = true
|
8
|
-
config.access_token = ENV["ROLLBAR_ACCESS_TOKEN"]
|
9
|
-
config.environment = ENV["ROLLBAR_ENV"]
|
10
|
-
config.logger = Pliny::RollbarLogger.new
|
11
|
-
config.use_sucker_punch
|
12
|
-
end
|