frankfurter/lib/tasks/providers.rake

31 lines
793 B
Ruby
Raw Normal View History

2026-05-21 01:38:14 -06:00
# frozen_string_literal: true
desc "Backfill rates from all providers (incremental from last stored date)"
task :backfill, [:provider] do |_t, args|
require "provider"
require "provider/adapters"
if args[:provider]
provider = Provider.detect { |p| p.key.casecmp(args[:provider]).zero? }
abort "Unknown provider: #{args[:provider]}" unless provider
provider.backfill
else
queue = Queue.new
providers = Provider.to_a.shuffle
providers.each { |provider| queue << provider }
worker_count = [providers.size, DB.pool.max_size].min
Array.new(worker_count) do
Thread.new do
loop do
provider = queue.pop(true)
provider.backfill
rescue ThreadError
break
end
end
end.each(&:join)
end
end