# File lib/fluent/plugin/out_forward.rb, line 450 def initialize(log, conf) @log = log @conf = conf @name = @conf.name @host = @conf.host @port = @conf.port @weight = @conf.weight @failure = @conf.failure @available = true @resolved_host = nil @resolved_time = 0 resolved_host # check dns end
# File lib/fluent/plugin/out_forward.rb, line 470 def available? @available end
# File lib/fluent/plugin/out_forward.rb, line 474 def disable! @available = false end
# File lib/fluent/plugin/out_forward.rb, line 542 def heartbeat(detect=true) now = Time.now.to_f @failure.add(now) #@log.trace "heartbeat from '#{@name}'", :host=>@host, :port=>@port, :available=>@available, :sample_size=>@failure.sample_size if detect && !@available && @failure.sample_size > @conf.recover_sample_size @available = true @log.warn "recovered forwarding server '#{@name}'", host: @host, port: @port return true else return nil end end
# File lib/fluent/plugin/out_forward.rb, line 482 def resolved_host case @conf.expire_dns_cache when 0 # cache is disabled return resolve_dns! when nil # persistent cache return @resolved_host ||= resolve_dns! else now = Engine.now rh = @resolved_host if !rh || now - @resolved_time >= @conf.expire_dns_cache rh = @resolved_host = resolve_dns! @resolved_time = now end return rh end end
# File lib/fluent/plugin/out_forward.rb, line 478 def standby? @conf.standby end
# File lib/fluent/plugin/out_forward.rb, line 511 def tick now = Time.now.to_f if !@available if @failure.hard_timeout?(now) @failure.clear end return nil end if @failure.hard_timeout?(now) @log.warn "detached forwarding server '#{@name}'", host: @host, port: @port, hard_timeout: true @available = false @resolved_host = nil # expire cached host @failure.clear return true end if @conf.phi_failure_detector phi = @failure.phi(now) #$log.trace "phi '#{@name}'", :host=>@host, :port=>@port, :phi=>phi if phi > @conf.phi_threshold @log.warn "detached forwarding server '#{@name}'", host: @host, port: @port, phi: phi @available = false @resolved_host = nil # expire cached host @failure.clear return true end end return false end
# File lib/fluent/plugin/out_forward.rb, line 555 def to_msgpack(out = '') [@host, @port, @weight, @available].to_msgpack(out) end
# File lib/fluent/plugin/out_forward.rb, line 503 def resolve_dns! addrinfo_list = Socket.getaddrinfo(@host, @port, nil, Socket::SOCK_STREAM) addrinfo = @conf.dns_round_robin ? addrinfo_list.sample : addrinfo_list.first @sockaddr = Socket.pack_sockaddr_in(addrinfo[1], addrinfo[3]) # used by on_heartbeat addrinfo[3] end