class Flare::Tools::Cli::Restore

Constants

Formats
Restorers

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/restore.rb, line 105
def initialize
  super
  @input = nil
  @format = nil
  @wait = 0
  @part = 0
  @partsize = 1
  @bwlimit = 0
  @include = nil
  @prefix_include = nil
  @exclude = nil
  @print_key = false
end

Public Instance Methods

execute(config, args) click to toggle source
# File lib/flare/tools/cli/restore.rb, line 119
def execute(config, args)
  STDERR.puts "please install tokyocabinet via gem command." unless defined? TokyoCabinet

  unless @format.nil? || Formats.include?(@format)
    STDERR.puts "unknown format: #{@format}"
    return S_NG
  end

  if @prefix_include
    if @include
      STDERR.puts "--include option is specified."
      return S_NG
    end
    @include = @prefix_include
  end

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

  restorer = case @format
             when TchRestorer.myname
               TchRestorer.new(@input)
             else
               raise "invalid format"
             end

  nodes = hosts.map do |hostname,port|
    Flare::Tools::Node.open(hostname, port.to_i, @timeout, @bwlimit, @bwlimit)
  end

  count = 0
  restorer.iterate do |key,data,flag,expire|
    if @include.nil? || @include =~ key
      next if @exclude && @exclude =~ key
      STDOUT.puts key if @print_key
      nodes[0].set(key, data, flag, expire) unless @dry_run
      count += 1
    end
  end
  STDERR.puts "#{count} entries have been restored."

  nodes.each do |n|
    n.close
  end

  restorer.close

  S_OK
end
setup() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/restore.rb, line 77
def setup
  super
  set_option_dry_run
  @optp.on('-i', '--input=FILE',             "input from file") {|v| @input = v}
  @optp.on('-f', '--format=FORMAT',          "input format [#{Formats.join(',')}]") {|v|
    @format = v
  }
  @optp.on('--bwlimit=BANDWIDTH',            "bandwidth limit (bps)") {|v| @bwlimit = v}
  @optp.on('--include=PATTERN',              "include pattern") {|v|
    begin
      @include = Regexp.new(v)
    rescue RegexpError => e
      raise "#{v} isn't a valid regular expression."
    end
  }
  @optp.on('--prefix-include=STRING',        "prefix string") {|v|
    @prefix_include = Regexp.new("^"+Regexp.escape(v))
  }
  @optp.on('--exclude=PATTERN',              "exclude pattern") {|v|
    begin
      @exclude = Regexp.new(v)
    rescue RegexpError => e
      raise "#{v} isn't a valid regular expression."
    end
  }
  @optp.on('--print-keys',                     "enables key dump to console") {@print_key = true}
end