Sha256: bf5d5d8ed7a4025aea3094ae13bd073bef3e665bac5583f1efc0d46dc4555752

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

#!/usr/bin/env ruby

require 'wukong'
require 'httparty'
require 'yaml'

class WarmIndices < Wukong::Runner
  include Wukong::Plugin

  description <<-DESC.gsub(/^ {4}/, '').strip
    Run this script to warm all indices in an Elasticsearch cluster.
    This relies on the mapping settings provided in

      config/mappings.yml

    Run with the --debug (-d) option to see pretty printed output without
    actually calling the Elasticsearch API.
  DESC

  class << self
    def configure(env, prog)
      env.define :host,    default: 'localhost', flag: 'c', description: 'The hostname of the Elasticsearch cluster'
      env.define :port,    default: 9200,        flag: 'p', description: 'The port number that Elasticsearch opened for web requests'
      env.define :debug,   default: false,       flag: 'd', description: 'Run in debug mode'
      env.define :indices, type:    Array,       flag: 'i', description: 'Comma-separated list of indices to warm. Defaults to all'
    end
  end

  def mappings
    @mappings ||= YAML.load File.read(File.expand_path('../../config/mappings.yml', __FILE__))
  end

  def indices
    settings.indices || mappings.keys
  end

  def warmer_id index
    "#{index}_warmer"
  end

  def warmer_uri index
    "http://#{settings.host}:#{settings.port}/#{index}/_warmer/#{warmer_id(index)}?"
  end

  def sorted_query fields
    { query: { match_all: {} }, sort: fields }
  end

  def run
    indices.each do |index|
      fields = mappings[index]['properties'].keys rescue abort("The provided index <#{index}> was not found in config/mappings.yml")
      uri    = warmer_uri(index)
      body   = sorted_query(fields)
      puts "Creating warmer for index #{index}"
      if settings.debug
        puts MultiJson.encode(body)
      else
        res = HTTParty.put(uri, body: MultiJson.encode(body))
        puts res.response
      end
    end
  end
end

WarmIndices.run

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wonderdog-0.2.0 test/warmindices.rb