class Fluent::Plugin::DnsServiceDiscovery
Public Instance Methods
configure(conf)
click to toggle source
Calls superclass method
# File lib/fluent/plugin/sd_dns.rb, line 62 def configure(conf) super @services = fetch_services_from_dns end
start(queue)
click to toggle source
Calls superclass method
# File lib/fluent/plugin/sd_dns.rb, line 67 def start(queue) if @interval timer_execute(:"sd_dns_refresh", @interval) do refresh_service_list(queue) end else refresh_service_list(queue) end super() end
Private Instance Methods
fetch_services_from_dns()
click to toggle source
# File lib/fluent/plugin/sd_dns.rb, line 113 def fetch_services_from_dns service_list = [] @entry_configs.each { |conf| ai_list = begin Socket.getaddrinfo(conf.host, conf.port, conf.address_family, Socket::SOCK_STREAM) rescue => e if @ignore_dns_error @log.warn "failed to get service list from #{conf.host}", error: e next else raise end end ai_list.each_with_index { |ai, i| name = "#{i}-#{conf.host}" service_list << Service.new(:dns, ai[3], ai[1], name, conf.weight, false, conf.username, conf.password, conf.shared_key) } } service_list end
refresh_service_list(queue)
click to toggle source
# File lib/fluent/plugin/sd_dns.rb, line 81 def refresh_service_list(queue) old_services = @services new_services = begin fetch_services_from_dns rescue => e @log.error("sd_dns: #{e}") return end if new_services.nil? || new_services.empty? return end diff = [] join = new_services - old_services # Need service_in first to guarantee that server exist at least one all time. join.each do |j| diff << ServiceDiscovery.service_in_msg(j) end drain = old_services - new_services drain.each do |d| diff << ServiceDiscovery.service_out_msg(d) end @services = new_services diff.each do |a| queue.push(a) end end