class Flare::Tools::Cli::Dumpkey

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/dumpkey.rb, line 41
def initialize
  super
  @output = nil
  @format = nil
  @part = nil
  @partsize = nil
  @bwlimit = nil
  @all = false
end

Public Instance Methods

execute(config, args) click to toggle source
# File lib/flare/tools/cli/dumpkey.rb, line 51
def execute(config, args)
  parse_index_server(config, args)
  cluster = nil
  Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s|
    cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes)
  end
  return S_NG if cluster.nil?

  if @all
    unless args.empty?
      STDERR.puts "don't specify any nodes with --all option."
      return S_NG
    else
      args = cluster.master_nodekeys
    end
  else
    if args.empty?
      STDERR.puts "please specify --all option to get complete dump."
      return S_NG
    end
  end

  unless @format.nil?
    unless ["csv"].include? @format
      puts "unknown format: #{@format}"
      return S_NG
    end
  end

  hosts = args.map {|x| x.split(':')}
  hosts.each do |x|
    if x.size != 2
      puts "invalid argument '#{x.join(':')}'."
      return S_NG
    end
  end

  hosts.each do |hostname,port|
    Flare::Tools::Node.open(hostname, port.to_i, @timeout, @bwlimit, @bwlimit) do |n|
      output = STDOUT
      unless @output.nil?
        output = File.open(@output, "w")
      end
      case @format
      when "csv"
        writer = CSV::Writer.generate(output)
        output.puts "# key"
      end
      interruptible {
        n.dumpkey(@part, @partsize) do |key|
          case @format
          when "csv"
            writer << [key]
          else
            output.puts "#{key}"
          end
          false
        end
      }
      output.close if output != STDOUT
    end
  end

  S_OK
end
setup() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/dumpkey.rb, line 30
def setup
  super
  set_option_index_server
  @optp.on('-o', '--output=FILE',            "output to file"         ) {|v| @output = v}
  @optp.on('-f', '--format=FORMAT',          "output format [csv]"     ) {|v| @format = v}
  @optp.on('-p', '--partition=NUMBER',       "partition number"        ) {|v| @part = v.to_i if v.to_i >= 0}
  @optp.on('-s', '--partition-size=SIZE',    "partition size"          ) {|v| @partsize = v.to_i if v.to_i > 0}
  @optp.on(      '--bwlimit=BANDWIDTH',      "bandwidth limit (bps)"   ) {|v| @bwlimit = v if v.to_i > 0}
  @optp.on(      '--all',                      "dump form all partitions") {@all = true}
end