Sha256: 064ccd9f82ebbae67c1b9eb4ac2aeb64f2e0326639b0fcd10b4f337eb349030a
Contents?: true
Size: 850 Bytes
Versions: 10
Compression:
Stored size: 850 Bytes
Contents
class ProxyLoadBalancer def initialize @tasks = {} @offline = [] end # Get the least loaded proxy from the given list of proxies def next(proxies) exclude = @tasks.keys + @offline @tasks.merge!(get_counts(proxies - exclude)) next_proxy = @tasks.select { |proxy, _| proxies.include?(proxy) }.min_by { |_, job_count| job_count }.try(:first) @tasks[next_proxy] += 1 if next_proxy.present? next_proxy end private def get_counts(proxies) proxies.inject({}) do |result, proxy| begin proxy_api = ProxyAPI::ForemanDynflow::DynflowProxy.new(:url => proxy.url) result[proxy] = proxy_api.tasks_count('running') rescue => e @offline << proxy Foreman::Logging.exception "Could not fetch task counts from #{proxy}, skipped.", e end result end end end
Version data entries
10 entries across 10 versions & 1 rubygems