Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions app/models/link_monitor.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
class LinkMonitor < ApplicationRecord
belongs_to :link_checkable, polymorphic: true, foreign_key: :lcheck_id, foreign_type: :lcheck_type
before_create :set_initial_date
after_commit :reindex_resource, on: :update

FAILURE_THRESHOLD = 4

Expand Down Expand Up @@ -37,4 +38,18 @@ def success!
def failing?
fail_count >= FAILURE_THRESHOLD
end

def status_changed?
prev_count = fail_count_previously_was || 0
(prev_count >= FAILURE_THRESHOLD && fail_count == 0) ||
(prev_count < FAILURE_THRESHOLD && failing?)
end

private

def reindex_resource
return unless TeSS::Config.solr_enabled
return unless status_changed?
link_checkable.solr_index
end
end
24 changes: 24 additions & 0 deletions test/models/link_monitor_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,28 @@ class LinkMonitorTest < ActiveSupport::TestCase
refute @link_monitor.failing?
assert_equal 0, @link_monitor.fail_count
end

test 'link monitor status changed' do
refute @link_monitor.status_changed?

@link_monitor.update_column(:fail_count, 3)
refute @link_monitor.failing?
refute @link_monitor.status_changed?

@link_monitor.fail!(404)
assert @link_monitor.failing?
assert @link_monitor.status_changed?

@link_monitor.fail!(404)
assert @link_monitor.failing?
refute @link_monitor.status_changed?

@link_monitor.success!
refute @link_monitor.failing?
assert @link_monitor.status_changed?

@link_monitor.success!
refute @link_monitor.failing?
refute @link_monitor.status_changed?
end
end