MultiOutput
# File lib/fluent/plugin/out_roundrobin.rb, line 32 def configure(conf) conf.elements.select {|e| e.name == 'store' }.each {|e| type = e['type'] unless type raise ConfigError, "Missing 'type' parameter on <store> directive" end weight = e['weight'] weight = weight ? weight.to_i : 1 $log.debug "adding store type=#{type.dump}, weight=#{weight}" output = Plugin.new_output(type) output.configure(e) @outputs << output @weights << weight } @rr = -1 # starts from @output[0] @rand_seed = Random.new.seed end
# File lib/fluent/plugin/out_roundrobin.rb, line 68 def emit(tag, es, chain) next_output.emit(tag, es, chain) end
# File lib/fluent/plugin/out_roundrobin.rb, line 73 def next_output @rr = 0 if (@rr += 1) >= @weight_array.size @weight_array[@rr] end
# File lib/fluent/plugin/out_roundrobin.rb, line 78 def rebuild_weight_array gcd = @weights.inject(0) {|r,w| r.gcd(w) } weight_array = [] @outputs.zip(@weights).each {|output,weight| (weight / gcd).times { weight_array << output } } # don't randomize order if all weight is 1 (=default) if @weights.any? {|w| w > 1 } r = Random.new(@rand_seed) weight_array.sort_by! { r.rand } end @weight_array = weight_array end
Generated with the Darkfish Rdoc Generator 2.