class Fluent::StatsiteFilterOutput
Constants
- CONFIG_VALIDATION_WAIT
TODO: should be configurable?
Public Class Methods
new()
click to toggle source
TODO: should support input_counter?
Calls superclass method
# File lib/fluent/plugin/out_statsite_filter.rb, line 30 def initialize super end
Public Instance Methods
before_shutdown()
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_statsite_filter.rb, line 69 def before_shutdown super $log.debug "out_statsite#before_shutdown called" @child.finished = true sleep 0.5 # TODO wait time before killing child process end
configure(conf)
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_statsite_filter.rb, line 34 def configure(conf) super @metrics = validate_metrics @metrics.each{|m| @log.info "out_statsite: #{m}"} @histograms = validate_histograms @respawns = configure_respawns @parser = StatsiteParser.new(method(:on_message)) @formatter = StatsiteFormatter.new(@metrics) $log.info "out_statsite: statsite config\n\n#{config}" @conf = Tempfile.new('fluent-plugin-statsite-') @conf.puts config @conf.flush @child = ChildProcess.new(@parser, @respawns, log) @cmd = "#{@statsite_path} -f #{@conf.path}" validate_statsite_confg end
format(tag, time, record)
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 82 def format(tag, time, record) @formatter.call(record) end
shutdown()
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_statsite_filter.rb, line 76 def shutdown super @conf.close @child.shutdown end
start()
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_statsite_filter.rb, line 57 def start super begin $log.info "out_statsite: launching statsite process", cmd: @cmd @child.start(@cmd) rescue shutdown raise end end
write(chunk)
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 86 def write(chunk) @child.write chunk end
Private Instance Methods
config()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 138 def config <<-CONFIG [statsite] port = 0 udp_port = 0 parse_stdin = 1 log_level = INFO flush_interval = #{@statsite_flush_interval} timer_eps = #{@timer_eps} set_eps = #{@set_eps} stream_cmd = #{@stream_cmd} #{@histograms.map(&:to_ini).join("\n\n")} CONFIG end
configure_respawns()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 99 def configure_respawns if @child_respawn.nil? or @child_respawn == 'none' or @child_respawn == '0' 0 elsif @child_respawn == 'inf' or @child_respawn == '-1' -1 elsif @child_respawn =~ /^\d+$/ @child_respawn.to_i else raise ConfigError, "child_respawn option argument invalid: none(or 0), inf(or -1) or positive number" end end
on_message(time, record)
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 154 def on_message(time, record) Engine.emit(@tag, time, record) end
run()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 92 def run @loop.run rescue => e log.error "out_statsite: unexpected error", :error => e, :error_class => e.class log.error_backtrace end
validate_histograms()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 115 def validate_histograms @histograms.map {|h| Histogram.validate(h)} end
validate_metrics()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 111 def validate_metrics @metrics.map {|m| Metric.validate(m)} end
validate_statsite_confg()
click to toggle source
# File lib/fluent/plugin/out_statsite_filter.rb, line 119 def validate_statsite_confg $log.debug "lanuch statsite process to validate statsite config" pid = spawn(@cmd, out: '/dev/null') if pid.nil? raise ConfigError, 'failed to launch statsite process', cmd: @cmd else begin Timeout::timeout(CONFIG_VALIDATION_WAIT) do Process.waitpid(pid) end raise ConfigError, 'Statsite process cannot be launched correctly. A config is probably invalid.' rescue Timeout::Error # launched correctly Process.kill(:KILL, pid) Process.waitpid(pid) end end end