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 |