Skip to content

Commit da248f9

Browse files
committed
Tweak some details
1 parent 3b08e93 commit da248f9

File tree

7 files changed

+39
-68
lines changed

7 files changed

+39
-68
lines changed

Gemfile.lock

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ GEM
8888
net-smtp
8989
mini_mime (1.1.5)
9090
minitest (5.25.1)
91-
mocha (2.4.5)
92-
ruby2_keywords (>= 0.0.5)
9391
net-imap (0.4.14)
9492
date
9593
net-protocol
@@ -159,7 +157,6 @@ GEM
159157
rubocop (>= 1.48.1, < 2.0)
160158
rubocop-ast (>= 1.31.1, < 2.0)
161159
ruby-progressbar (1.13.0)
162-
ruby2_keywords (0.0.5)
163160
securerandom (0.3.1)
164161
sqlite3 (2.0.4-arm64-darwin)
165162
sqlite3 (2.0.4-x86_64-linux-gnu)
@@ -192,7 +189,6 @@ PLATFORMS
192189

193190
DEPENDENCIES
194191
minitest (~> 5.0)
195-
mocha
196192
rake (~> 13.0)
197193
solid_errors!
198194
sqlite3

app/models/solid_errors/cleaner.rb

Lines changed: 0 additions & 36 deletions
This file was deleted.

app/models/solid_errors/occurrence.rb

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ module SolidErrors
22
class Occurrence < Record
33
belongs_to :error, class_name: "SolidErrors::Error"
44

5-
after_create_commit :send_email, if: -> { SolidErrors.send_emails? && SolidErrors.email_to.present? }
6-
after_create_commit -> { SolidErrors::Cleaner.go! }
5+
after_create_commit :send_email, if: -> { SolidErrors.send_emails && SolidErrors.email_to.present? }
6+
after_create_commit :clear_resolved_errors, if: :should_clear_resolved_errors?
77

88
# The parsed exception backtrace. Lines in this backtrace that are from installed gems
99
# have the base path for gem installs replaced by "[GEM_ROOT]", while those in the project
@@ -24,5 +24,26 @@ def parse_backtrace(backtrace)
2424
def send_email
2525
ErrorMailer.error_occurred(self).deliver_later
2626
end
27+
28+
def clear_resolved_errors
29+
transaction do
30+
SolidErrors::Occurrence
31+
.where(error: SolidErrors::Error.resolved)
32+
.where(created_at: ...SolidErrors.destroy_after.ago)
33+
.delete_all
34+
SolidErrors::Error.resolved
35+
.where
36+
.missing(:occurrences)
37+
.delete_all
38+
end
39+
end
40+
41+
def should_clear_resolved_errors?
42+
return false unless SolidErrors.destroy_after
43+
return false unless SolidErrors.destroy_after.respond_to?(:ago)
44+
return false unless (id % 100).zero?
45+
46+
true
47+
end
2748
end
2849
end

lib/solid_errors/subscriber.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def report(error, handled:, severity:, context:, source: nil)
3939

4040
SolidErrors::Occurrence.create(
4141
error_id: record.id,
42-
backtrace: error.backtrace.join("\n"),
42+
backtrace: error.backtrace&.join("\n"),
4343
context: s(context)
4444
)
4545
end

solid_errors.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,4 @@ Gem::Specification.new do |spec|
3030
end
3131

3232
spec.add_development_dependency "sqlite3"
33-
spec.add_development_dependency "mocha"
3433
end
Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,49 @@
11
require "test_helper"
22

3-
class SolidErrors::CleanerTest < ActiveSupport::TestCase
4-
setup do
5-
assert_nil SolidErrors.destroy_after
3+
class SolidErrors::OccurrenceTest < ActiveSupport::TestCase
4+
def teardown
5+
SolidErrors.destroy_after = nil
66
end
77

8-
test "not destroy if destroy_after is not set" do
8+
test "do not destroy if destroy_after is not set" do
9+
SolidErrors.destroy_after = nil
910
simulate_99_old_exceptions(:resolved)
1011

1112
assert_difference -> { SolidErrors::Error.count }, +1 do
1213
assert_difference -> { SolidErrors::Occurrence.count }, +1 do
13-
Rails.error.report(dummy_exception)
14+
Rails.error.report(StandardError.new("oof"))
1415
end
1516
end
1617
end
1718

1819
test "destroy old occurrences every 100 insertions if destroy_after is set" do
19-
set_destroy_after
20+
SolidErrors.destroy_after = 1.day
2021
simulate_99_old_exceptions(:resolved)
21-
Rails.error.report(dummy_exception)
2222

23-
assert_equal 1, SolidErrors::Error.count
24-
assert_equal 1, SolidErrors::Occurrence.count
23+
assert_difference -> { SolidErrors::Error.count }, 0 do
24+
assert_difference -> { SolidErrors::Occurrence.count }, 0 do
25+
Rails.error.report(StandardError.new("oof"))
26+
end
27+
end
2528
end
2629

2730
test "not destroy if errors are unresolved" do
28-
set_destroy_after
31+
SolidErrors.destroy_after = 1.day
2932
simulate_99_old_exceptions(:unresolved)
3033

3134
assert_difference -> { SolidErrors::Error.count }, +1 do
3235
assert_difference -> { SolidErrors::Occurrence.count }, +1 do
3336
assert_empty SolidErrors::Error.resolved
34-
Rails.error.report(dummy_exception)
37+
Rails.error.report(StandardError.new("oof"))
3538
end
3639
end
3740
end
3841

3942
private
4043

4144
def simulate_99_old_exceptions(status)
42-
Rails.error.report(dummy_exception("argh"))
45+
Rails.error.report(StandardError.new("argh"))
4346
SolidErrors::Error.update_all(resolved_at: Time.current) if status == :resolved
4447
SolidErrors::Occurrence.last.update!(id: 99, created_at: 1.day.ago)
4548
end
46-
47-
def set_destroy_after
48-
SolidErrors.stubs(destroy_after: 1.day)
49-
end
50-
51-
def dummy_exception(message = "oof")
52-
exception = StandardError.new(message)
53-
exception.set_backtrace(caller)
54-
exception
55-
end
5649
end

test/test_helper.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,3 @@
88
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
99
require "rails/test_help"
1010
require "solid_errors"
11-
12-
require "mocha/minitest"

0 commit comments

Comments
 (0)