Add timeout for fetching latest event
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
module NostrManager
|
||||
class FetchLatestEvent < NostrManagerService
|
||||
TIMEOUT = 5
|
||||
|
||||
def initialize(relays:, filter:, max_events: 2)
|
||||
@relays = relays
|
||||
@@ -11,21 +12,33 @@ module NostrManager
|
||||
received_events = 0
|
||||
events = []
|
||||
|
||||
@relays.each do |url|
|
||||
event = NostrManager::FetchEvent.call(filter: @filter, relay_url: url)
|
||||
begin
|
||||
Timeout.timeout(TIMEOUT) do
|
||||
@relays.each do |url|
|
||||
event = NostrManager::FetchEvent.call(filter: @filter, relay_url: url)
|
||||
|
||||
if event.present?
|
||||
events << event if events.none? { |e| e["id"] == event["id"] }
|
||||
received_events += 1
|
||||
if event.present?
|
||||
events << event if events.none? { |e| e["id"] == event["id"] }
|
||||
received_events += 1
|
||||
end
|
||||
|
||||
if received_events >= @max_events
|
||||
Rails.logger.debug "Found #{@max_events} events, ending the search"
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
events.min_by { |e| e["created_at"] }
|
||||
end
|
||||
|
||||
if received_events >= @max_events
|
||||
Rails.logger.debug "Found #{@max_events} events, ending the search"
|
||||
break
|
||||
rescue Timeout::Error
|
||||
if events.size == 1
|
||||
Rails.logger.debug "[nostr] Timeout: only found 1 event within #{TIMEOUT} seconds for filter: #{@filter.inspect}"
|
||||
events.first
|
||||
else
|
||||
Rails.logger.debug "[nostr] Timeout: no events found within #{TIMEOUT} seconds for filter: #{@filter.inspect}"
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
events.min_by { |e| e["created_at"] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user