class CouchWarmer

Public Class Methods

new(database) click to toggle source

database = ‘127.0.0.1:5984/dbname

# File lib/couch-warmer.rb, line 5
def initialize(database)
  @db = CouchRest.database(database)
end

Public Instance Methods

warm(name, suffix) click to toggle source

name with suffix, suffix

# File lib/couch-warmer.rb, line 24
def warm(name, suffix)
  puts "warming.. #{name} from #{name}#{suffix}"
  begin
    view_name = get_first_view(name + suffix)
    src = @db.view('_design/' + name + suffix + '/_view/' + view_name)
  rescue RestClient::RequestTimeout => e
    puts "working hard...."
  end

  msg = "still active.."
  counter = 1
  while is_active?
    print '.' if counter % 5 == 0
    sleep 1
    counter += 1
  end
  puts "copying.."
  after_warm(name + suffix, name)
  puts "warming #{name} from #{name}#{suffix} done!!!"
end
warm_all(suffix) click to toggle source
# File lib/couch-warmer.rb, line 9
def warm_all(suffix)
  puts "warming all with suffix #{suffix}"
  designs = get_all_design_docs suffix

  designs.each do |design|
    puts "warming #{design}"
    begin
      warm(design.gsub(suffix, ''), suffix)
    rescue RestClient::InternalServerError => e
      puts "error 500 on warming #{design} ..... -> next!"
    end
  end
end

Private Instance Methods

after_warm(src, dest) click to toggle source
# File lib/couch-warmer.rb, line 46
def after_warm(src, dest)
  begin
    dest = @db.view('_design/%s' % dest)
  rescue RestClient::ResourceNotFound => e
    puts "%s does not exists.." % dest
    dest = '_design/%s' % dest
  end
  src = @db.view('_design/%s' % src)
  @db.copy_doc(src, dest)
end
get_all_design_docs(suffix) click to toggle source
# File lib/couch-warmer.rb, line 69
def get_all_design_docs(suffix)
  designs = CouchRest.get(@db.server.uri + '/' + @db.name + '/_all_docs?startkey=%22_design/%22&endkey=%22_design0%22&include_docs=true')
  designs["rows"].map {|d| d["id"].gsub '_design/', '' }.grep /#{suffix}$/
end
get_first_view(design_doc) click to toggle source
# File lib/couch-warmer.rb, line 64
def get_first_view(design_doc)
  design_info = CouchRest.get(@db.server.uri + '/' + @db.name + '/_design/' + design_doc)
  design_info["views"].keys.first
end
is_active?() click to toggle source
# File lib/couch-warmer.rb, line 57
def is_active?
  tasks = CouchRest.get(@db.server.uri + '/_active_tasks')
  tasks.reject! { |t| t['type'] != 'View Group Indexer' }
  tasks.map! { |t| t['task'] + ' ' + t['status'] }
  !tasks.empty?
end