Class: Elastomer::Client::Cluster
- Inherits:
-
Object
- Object
- Elastomer::Client::Cluster
- Defined in:
- lib/elastomer/client/cluster.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
Instance Method Summary collapse
-
#get_aliases(params = {}) ⇒ Object
(also: #aliases)
Retrieve the current aliases.
-
#get_settings(params = {}) ⇒ Object
(also: #settings)
Cluster wide settings that have been modified via the update API.
-
#health(params = {}) ⇒ Object
Simple status on the health of the cluster.
-
#indices ⇒ Object
List all indices currently defined.
-
#initialize(client) ⇒ Cluster
constructor
Create a new cluster client for making API requests that pertain to the cluster health and management.
-
#nodes ⇒ Object
List all nodes currently part of the cluster.
-
#pending_tasks(params = {}) ⇒ Object
Returns a list of any cluster-level changes (e.g. create index, update mapping, allocate or fail shard) which have not yet been executed.
-
#pending_tasks? ⇒ Boolean
Returns ‘true` if there items in the pending task list.
-
#reroute(commands, params = {}) ⇒ Object
Explicitly execute a cluster reroute allocation command.
-
#shutdown(params = {}) ⇒ Object
Shutdown the entire cluster.
-
#state(params = {}) ⇒ Object
Comprehensive state information of the whole cluster.
-
#stats(params = {}) ⇒ Object
Retrieve statistics from a cluster wide perspective.
-
#templates ⇒ Object
List all templates currently defined.
-
#update_aliases(actions, params = {}) ⇒ Object
Perform an aliases action on the cluster.
-
#update_settings(body, params = {}) ⇒ Object
Update cluster wide specific settings.
Constructor Details
#initialize(client) ⇒ Cluster
Create a new cluster client for making API requests that pertain to the cluster health and management.
client - Elastomer::Client used for HTTP requests to the server
16 17 18 |
# File 'lib/elastomer/client/cluster.rb', line 16 def initialize( client ) @client = client end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
20 21 22 |
# File 'lib/elastomer/client/cluster.rb', line 20 def client @client end |
Instance Method Details
#get_aliases(params = {}) ⇒ Object Also known as: aliases
Retrieve the current aliases. An :index name can be given (or an array of index names) to get just the aliases for those indexes. You can also use the alias name here since it is acting the part of an index.
params - Parameters Hash
:index - an index name or Array of index names
Examples
get_aliases
get_aliases( :index => 'users' )
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html
Returns the response body as a Hash
193 194 195 196 |
# File 'lib/elastomer/client/cluster.rb', line 193 def get_aliases( params = {} ) response = client.get '{/index}/_aliases', params.merge(:action => 'cluster.get_aliases') response.body end |
#get_settings(params = {}) ⇒ Object Also known as: settings
Cluster wide settings that have been modified via the update API.
params - Parameters Hash
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-update-settings.html
Returns the response as a Hash
103 104 105 106 |
# File 'lib/elastomer/client/cluster.rb', line 103 def get_settings( params = {} ) response = client.get '/_cluster/settings', params.merge(:action => 'cluster.get_settings') response.body end |
#health(params = {}) ⇒ Object
Simple status on the health of the cluster. The API can also be executed against one or more indices to get just the specified indices health.
params - Parameters Hash
:index - a single index name or an Array of index names
:level - one of "cluster", "indices", or "shards"
:wait_for_status - one of "green", "yellow", or "red"
:wait_for_relocating_shards - a number controlling to how many relocating shards to wait for
:wait_for_nodes - the request waits until the specified number N of nodes is available
:timeout - how long to wait [default is "30s"]
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-health.html
Returns the response as a Hash
36 37 38 39 |
# File 'lib/elastomer/client/cluster.rb', line 36 def health( params = {} ) response = client.get '/_cluster/health{/index}', params.merge(:action => 'cluster.health') response.body end |
#indices ⇒ Object
List all indices currently defined. This is just a convenience method around the ‘state` call that extracts and returns the indices section.
Returns the indices definitions as a Hash
257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/elastomer/client/cluster.rb', line 257 def indices # ES 1.x supports state filtering via a path segment called metrics. # ES 0.90 uses query parameters instead. if client.semantic_version >= '1.0.0' h = state(:metrics => 'metadata') else h = state( :filter_blocks => true, :filter_nodes => true, :filter_routing_table => true, ) end h['metadata']['indices'] end |
#nodes ⇒ Object
List all nodes currently part of the cluster. This is just a convenience method around the ‘state` call that extracts and returns the nodes section.
Returns the nodes definitions as a Hash
277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'lib/elastomer/client/cluster.rb', line 277 def nodes # ES 1.x supports state filtering via a path segment called metrics. # ES 0.90 uses query parameters instead. if client.semantic_version >= '1.0.0' h = state(:metrics => 'nodes') else h = state( :filter_blocks => true, :filter_metadata => true, :filter_routing_table => true, ) end h['nodes'] end |
#pending_tasks(params = {}) ⇒ Object
Returns a list of any cluster-level changes (e.g. create index, update mapping, allocate or fail shard) which have not yet been executed.
params - Parameters Hash
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-pending.html
Returns the response as a Hash
82 83 84 85 |
# File 'lib/elastomer/client/cluster.rb', line 82 def pending_tasks( params = {} ) response = client.get '/_cluster/pending_tasks', params.merge(:action => 'cluster.pending_tasks') response.body end |
#pending_tasks? ⇒ Boolean
Returns ‘true` if there items in the pending task list. Returns `false` if the pending task list is empty. Returns `nil` if the response body does not contain the “tasks” field.
90 91 92 93 94 |
# File 'lib/elastomer/client/cluster.rb', line 90 def pending_tasks? hash = pending_tasks return nil unless hash.key? "tasks" hash["tasks"].length > 0 end |
#reroute(commands, params = {}) ⇒ Object
Explicitly execute a cluster reroute allocation command. For example, a shard can be moved from one node to another explicitly, an allocation can be canceled, or an unassigned shard can be explicitly allocated on a specific node.
commands - A command Hash or an Array of command Hashes params - Parameters Hash
Examples
reroute(:move => { :index => 'test', :shard => 0, :from_node => 'node1', :to_node => 'node2' })
reroute([
{ :move => { :index => 'test', :shard => 0, :from_node => 'node1', :to_node => 'node2' }},
{ :allocate => { :index => 'test', :shard => 1, :node => 'node3' }}
])
reroute(:commands => [
{ :move => { :index => 'test', :shard => 0, :from_node => 'node1', :to_node => 'node2' }},
{ :allocate => { :index => 'test', :shard => 1, :node => 'node3' }}
])
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-reroute.html
Returns the response as a Hash
149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/elastomer/client/cluster.rb', line 149 def reroute( commands, params = {} ) if commands.is_a?(Hash) && commands.key?(:commands) body = commands elsif commands.is_a?(Hash) # Array() on a Hash does not do what you think it does - that is why # we are explicitly wrapping the Hash via [commands] here. body = {:commands => [commands]} else body = {:commands => Array(commands)} end response = client.post '/_cluster/reroute', params.merge(:body => body, :action => 'cluster.reroute') response.body end |
#shutdown(params = {}) ⇒ Object
Shutdown the entire cluster. There is also a Nodes#shutdown method for shutting down individual nodes.
params - Parameters Hash
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-nodes-shutdown.html
Returns the response as a Hash
172 173 174 175 |
# File 'lib/elastomer/client/cluster.rb', line 172 def shutdown( params = {} ) response = client.post '/_shutdown', params.merge(:action => 'cluster.shutdown') response.body end |
#state(params = {}) ⇒ Object
Comprehensive state information of the whole cluster. For 1.x metric and index filtering, use the :metrics and :indices parameter keys.
The list of available metrics are:
version, master_node, nodes, routing_table, , blocks
params - Parameters Hash
:metrics - list of metrics to select as an Array
:indices - a single index name or an Array of index names
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-state.html
Returns the response as a Hash
54 55 56 57 |
# File 'lib/elastomer/client/cluster.rb', line 54 def state( params = {} ) response = client.get '/_cluster/state{/metrics}{/indices}', params.merge(:action => 'cluster.state') response.body end |
#stats(params = {}) ⇒ Object
Retrieve statistics from a cluster wide perspective. The API returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins).
params - Parameters Hash
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-stats.html
Returns the response as a Hash
69 70 71 72 |
# File 'lib/elastomer/client/cluster.rb', line 69 def stats( params = {} ) response = client.get '/_cluster/stats', params.merge(:action => 'cluster.stats') response.body end |
#templates ⇒ Object
List all templates currently defined. This is just a convenience method around the ‘state` call that extracts and returns the templates section.
Returns the template definitions as a Hash
238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/elastomer/client/cluster.rb', line 238 def templates # ES 1.x supports state filtering via a path segment called metrics. # ES 0.90 uses query parameters instead. if client.semantic_version >= '1.0.0' h = state(:metrics => 'metadata') else h = state( :filter_blocks => true, :filter_nodes => true, :filter_routing_table => true, ) end h['metadata']['templates'] end |
#update_aliases(actions, params = {}) ⇒ Object
Perform an aliases action on the cluster. We are just a teensy bit clever here in that a single action can be given or an array of actions. This API method will wrap the request in the appropriate => […] body construct.
actions - An action Hash or an Array of action Hashes params - Parameters Hash
Examples
update_aliases(:add => { :index => 'users-1', :alias => 'users' })
update_aliases([
{ :remove => { :index => 'users-1', :alias => 'users' }},
{ :add => { :index => 'users-2', :alias => 'users' }}
])
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html
Returns the response body as a Hash
219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/elastomer/client/cluster.rb', line 219 def update_aliases( actions, params = {} ) if actions.is_a?(Hash) && actions.key?(:actions) body = actions elsif actions.is_a?(Hash) # Array() on a Hash does not do what you think it does - that is why # we are explicitly wrapping the Hash via [actions] here. body = {:actions => [actions]} else body = {:actions => Array(actions)} end response = client.post '/_aliases', params.merge(:body => body, :action => 'cluster.update_aliases') response.body end |
#update_settings(body, params = {}) ⇒ Object
Update cluster wide specific settings. Settings updated can either be persistent (applied cross restarts) or transient (will not survive a full cluster restart).
body - The new settings as a Hash or a JSON encoded String params - Parameters Hash
See www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-update-settings.html
Returns the response as a Hash
119 120 121 122 |
# File 'lib/elastomer/client/cluster.rb', line 119 def update_settings( body, params = {} ) response = client.put '/_cluster/settings', params.merge(:body => body, :action => 'cluster.update_settings') response.body end |