Class: SourceMonitor::ImportSessions::HealthCheckUpdater
- Inherits:
-
Object
- Object
- SourceMonitor::ImportSessions::HealthCheckUpdater
- Defined in:
- lib/source_monitor/import_sessions/health_check_updater.rb
Overview
Performs a health check for a single OPML import entry: probes the feed URL, acquires a row lock to merge the result into the import session, and broadcasts UI updates. Extracted from ImportSessionHealthCheckJob.
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(import_session:, entry_id:) ⇒ HealthCheckUpdater
constructor
A new instance of HealthCheckUpdater.
Constructor Details
#initialize(import_session:, entry_id:) ⇒ HealthCheckUpdater
Returns a new instance of HealthCheckUpdater.
13 14 15 16 |
# File 'lib/source_monitor/import_sessions/health_check_updater.rb', line 13 def initialize(import_session:, entry_id:) @import_session = import_session @entry_id = entry_id end |
Instance Method Details
#call ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/source_monitor/import_sessions/health_check_updater.rb', line 18 def call return unless active_for?(import_session) result = perform_health_check return unless result updated_entry = nil import_session.with_lock do import_session.reload return unless active_for?(import_session) entries = Array(import_session.parsed_sources).map(&:to_h) index = entries.index { |candidate| entry_id_for(candidate) == entry_id.to_s } return unless index entries[index] = entries[index].merge( "health_status" => result.status, "health_error" => result. ) selected_ids = Array(import_session.selected_source_ids).map(&:to_s) selected_ids -= [ entry_id.to_s ] if result.status == "failing" attrs = { parsed_sources: entries, selected_source_ids: selected_ids, health_check_completed_at: completion_time(entries, import_session.health_check_targets) }.compact import_session.update!(attrs) normalized_entry = SourceMonitor::ImportSessions::EntryNormalizer.normalize(entries[index]) updated_entry = normalized_entry.merge(selected: selected_ids.include?(entry_id.to_s)) end broadcaster = SourceMonitor::ImportSessions::HealthCheckBroadcaster.new(import_session) broadcaster.broadcast_row(updated_entry) if updated_entry broadcaster.broadcast_progress end |