class CouchdbRebuildViewIndices::Indexer

Class for describing an indexer of CouchDB design documents.

Attributes

options[W]

Public Class Methods

new(options) click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 21
def initialize(options)
  @options = @@default_options.merge!(options)
  @logger = Logger.new(STDOUT)
  @logger.level = @options[:log_level]
  @logger.debug 'Running with options:'
  @logger.debug @options
end

Public Instance Methods

run!() click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 29
def run!
  docs = get_design_docs(design_docs_uri)
  docs.each do |doc|
    next unless doc['doc'].key?('views')
    iterate_on_views(doc['id'], doc['doc']['views'])
  end
end

Private Instance Methods

design_docs_uri() click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 55
def design_docs_uri
  URI::HTTP.build(
    scheme: @options[:protocol],
    host: @options[:host],
    port: @options[:port],
    path: "/#{@options[:database]}/_all_docs",
    query: 'startkey=%22_design/%22&endkey=%22_design0%22&include_docs=true'
  )
end
get_design_docs(uri) click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 51
def get_design_docs(uri)
  JSON.parse(make_request_with_retries(uri).body)['rows']
end
iterate_on_views(document_id, views) click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 39
def iterate_on_views(document_id, views)
  views.each do |view|
    @logger.info "Requesting view: #{document_id}/_view/#{view[0]}"
    res = make_request_with_retries(
      view_uri(document_id, view[0]),
      @options[:retries]
    )
    @logger.info 'OK!' if res.code == '200'
    @logger.info 'Error!' if res.code != '200'
  end
end
make_request_with_retries(uri, retries = 1) click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 74
def make_request_with_retries(uri, retries = 1)
  raise Net::ReadTimeout if retries.negative?
  req = Net::HTTP::Get.new(uri)

  if @options[:username] && @options[:password]
    req.basic_auth @options[:username], @options[:password]
  end

  begin
    Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
  rescue Net::ReadTimeout
    make_request_with_retries(url, retries - 1)
  end
end
view_uri(document_id, view) click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 65
def view_uri(document_id, view)
  URI::HTTP.build(
    scheme: @options[:protocol],
    host: @options[:host],
    port: @options[:port],
    path: "/#{@options[:database]}/#{document_id}/_view/#{view}"
  )
end