class Fluent::Stackprof
Public Instance Methods
parse_options(argv = ARGV)
click to toggle source
# File lib/fluent/stackprof.rb, line 6 def parse_options(argv = ARGV) op = OptionParser.new op.banner += ' <start/stop> [output_file]' (class<<self;self;end).module_eval do define_method(:usage) do |msg| puts op.to_s puts "error: #{msg}" if msg exit 1 end end opts = { host: '127.0.0.1', port: 24230, unix: nil, command: nil, # start or stop output: '/tmp/fluent-stackprof.dump', mode: 'cpu', } op.on('-h', '--host HOST', "fluent host (default: #{opts[:host]})") {|v| opts[:host] = v } op.on('-p', '--port PORT', "debug_agent tcp port (default: #{opts[:host]})", Integer) {|v| opts[:port] = v } op.on('-u', '--unix PATH', "use unix socket instead of tcp") {|v| opts[:unix] = v } op.on('-o', '--output PATH', "output path (default: #{opts[:output]})") {|v| opts[:output] = v } op.on('-m', '--mode MODE', "stackprof measure mode (default: #{opts[:mode]})") {|v| opts[:mode] = v } op.parse!(argv) opts[:command] = argv.shift unless %w[start stop].include?(opts[:command]) raise OptionParser::InvalidOption.new("`start` or `stop` must be specified as the 1st argument") end modes = %w[wall cpu object custom] unless modes.include?(opts[:mode]) raise OptionParser::InvalidOption.new("-m allows one of #{modes.join(', ')}") end opts end
run()
click to toggle source
# File lib/fluent/stackprof.rb, line 62 def run begin opts = parse_options rescue OptionParser::InvalidOption => e usage e.message end unless opts[:unix].nil? uri = "drbunix:#{opts[:unix]}" else uri = "druby://#{opts[:host]}:#{opts[:port]}" end $remote_engine = DRb::DRbObject.new_with_uri(uri) case opts[:command] when 'start' remote_code = <<-CODE require 'stackprof' StackProf.start(mode: :#{opts[:mode]}) CODE when 'stop' remote_code = <<-"CODE" StackProf.stop StackProf.results('#{opts[:output]}') CODE end puts remote_code $remote_engine.method_missing(:instance_eval, remote_code) case opts[:command] when 'start' $stdout.puts 'fluent-stackprof: started' when 'stop' $stdout.puts "fluent-stackprof: outputs to #{opts[:output]}" end end