elasticsearch-manager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +81 -0
  7. data/LICENSE +201 -0
  8. data/README.md +55 -0
  9. data/REALEASES.md +0 -0
  10. data/bin/elasticsearch-manager +56 -0
  11. data/elasticsearch-manager.gemspec +33 -0
  12. data/lib/elasticsearch/client.rb +8 -0
  13. data/lib/elasticsearch/client/base.rb +71 -0
  14. data/lib/elasticsearch/client/elasticsearch.rb +43 -0
  15. data/lib/elasticsearch/manager.rb +8 -0
  16. data/lib/elasticsearch/manager/cmd.rb +62 -0
  17. data/lib/elasticsearch/manager/errors.rb +12 -0
  18. data/lib/elasticsearch/manager/manager.rb +60 -0
  19. data/lib/elasticsearch/manager/rollingrestart.rb +79 -0
  20. data/lib/elasticsearch/manager/version.rb +5 -0
  21. data/lib/elasticsearch/model.rb +5 -0
  22. data/lib/elasticsearch/model/health.rb +26 -0
  23. data/lib/elasticsearch/model/node.rb +40 -0
  24. data/lib/elasticsearch/model/routing_nodes.rb +28 -0
  25. data/lib/elasticsearch/model/shard.rb +22 -0
  26. data/lib/elasticsearch/model/state.rb +23 -0
  27. data/spec/client_spec.rb +33 -0
  28. data/spec/cmd_spec.rb +123 -0
  29. data/spec/esclient_spec.rb +64 -0
  30. data/spec/fixtures/health.json +12 -0
  31. data/spec/fixtures/health_initializing.json +12 -0
  32. data/spec/fixtures/health_realocating.json +12 -0
  33. data/spec/fixtures/health_red.json +12 -0
  34. data/spec/fixtures/health_unassigned.json +12 -0
  35. data/spec/fixtures/health_yellow.json +13 -0
  36. data/spec/fixtures/nodes_.json +837 -0
  37. data/spec/fixtures/state-node-initializing.json +193010 -0
  38. data/spec/fixtures/state.json +193018 -0
  39. data/spec/manager_spec.rb +234 -0
  40. data/spec/spec_helper.rb +226 -0
  41. metadata +266 -0
@@ -0,0 +1,22 @@
1
+ require 'ostruct'
2
+ require 'representable/json'
3
+
4
+ module Elasticsearch
5
+ module Model
6
+ class Shard < OpenStruct
7
+ module Representer
8
+ include Representable::JSON
9
+ include Representable::Hash
10
+ include Representable::Hash::AllowSymbols
11
+
12
+ property :state
13
+ property :primary
14
+ property :node
15
+ property :realocating_node
16
+ property :shard
17
+ property :index
18
+ end
19
+ extend Representer
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require 'ostruct'
2
+ require 'representable/json'
3
+
4
+ module Elasticsearch
5
+ class ClusterState < OpenStruct
6
+ module Representer
7
+ include Representable::JSON
8
+ include Representable::Hash
9
+ include Representable::Hash::AllowSymbols
10
+
11
+ property :cluster_name
12
+ property :master_node
13
+ property :nodes, setter: (lambda do |v,args|
14
+ self.nodes = v.map do |id,node|
15
+ n = Elasticsearch::Model::Node.new.extend(Elasticsearch::Model::Node::Representer).from_hash(node)
16
+ n.id, n.master, n.ip = id, id == self.master_node, n.transport_address[/\d+\.\d+\.\d+\.\d+/]
17
+ n
18
+ end
19
+ end)
20
+ end
21
+ extend Representer
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'elasticsearch/client'
3
+
4
+ describe 'Elasticsearch::Client::Base' '#_build_url' do
5
+ context 'building urls' do
6
+ it 'returns the full URL from passed path and defaults' do
7
+ c = Elasticsearch::Client::Base.new
8
+ path = '/test/path'
9
+ exp_url = "http://localhost:9200#{path}"
10
+ url = c.send('_build_url'.to_sym, path)
11
+ expect(url).to eql(exp_url)
12
+ end
13
+
14
+ it 'returns the full URL from passed path and specified host/port' do
15
+ host, port = 'example.com', 9100
16
+ c = Elasticsearch::Client::Base.new(host, port)
17
+ path = '/test/path'
18
+ exp_url = "http://#{host}:#{port}#{path}"
19
+ url = c.send('_build_url'.to_sym, path)
20
+ expect(url).to eql(exp_url)
21
+ end
22
+ end
23
+ end
24
+
25
+ describe 'Elasticsearch::Client::Base' '#_get' do
26
+ context 'simple get' do
27
+ it 'returns raw response from request' do
28
+ c = Elasticsearch::Client::Base.new
29
+ resp = c._get('/base/client')
30
+ expect(resp).to eql('requested: /base/client')
31
+ end
32
+ end
33
+ end
data/spec/cmd_spec.rb ADDED
@@ -0,0 +1,123 @@
1
+ require 'spec_helper'
2
+ require 'stringio'
3
+
4
+ require 'net/ssh'
5
+ require 'elasticsearch/manager/cmd'
6
+
7
+ include Elasticsearch::Manager
8
+
9
+ describe 'Elasticsearch::Manager::CMD' '#rolling_restart' do
10
+ let (:ssh_connection) { double("SSH Connection") }
11
+
12
+ before do
13
+ allow(Net::SSH).to receive(:start).and_yield(ssh_connection)
14
+
15
+ @input = StringIO.new
16
+ @output = StringIO.new
17
+ @terminal = HighLine.new(@input, @output)
18
+ allow(HighLine).to receive(:new).and_return(@terminal)
19
+ end
20
+
21
+ context 'restart cluster' do
22
+ it 'does a clean restart' do
23
+ expect(Net::SSH).to receive(:start).with('10.110.33.218', ENV['USER']).ordered
24
+ expect(Net::SSH).to receive(:start).with('10.110.40.133', ENV['USER']).ordered
25
+ expect(Net::SSH).to receive(:start).with('10.110.38.153', ENV['USER']).ordered
26
+
27
+ allow(ssh_connection).to receive(:exec) do |arg|
28
+ expect(arg).to eql('sudo service elasticsearch restart')
29
+ end
30
+ expect(ssh_connection).to receive(:exec).exactly(3).times
31
+
32
+ @input << "y\ny\ny\n"
33
+ @input.rewind
34
+
35
+ exit_code = -1
36
+ output = capture_stdout do
37
+ opts = {:hostname => 'localhost', :port => '9200', :sleep_interval => 1 }
38
+ exit_code = CMD.rolling_restart(opts)
39
+ end
40
+ expect(exit_code).to eql(0)
41
+ end
42
+
43
+ it 'throws stabilization timeout' do
44
+ allow(ssh_connection).to receive(:exec) do |arg|
45
+ expect(arg).to eql('sudo service elasticsearch restart')
46
+ end
47
+ opts = {:hostname => 'localhost-cmd-restart-timeout', :port => '9200', :timeout => 2, :sleep_interval => 1}
48
+
49
+ @input << "y\ny\ny\n"
50
+ @input.rewind
51
+
52
+ exit_code = -1
53
+ output = capture_stdout do
54
+ exit_code = CMD.rolling_restart(opts)
55
+ end
56
+ expect(exit_code).to eql(2)
57
+ end
58
+
59
+ it 'throws node available timeout' do
60
+ allow(ssh_connection).to receive(:exec) do |arg|
61
+ expect(arg).to eql('sudo service elasticsearch restart')
62
+ end
63
+ opts = {:hostname => 'localhost-cmd-restart-not-available', :port => '9200', :timeout => 2, :sleep_interval => 1}
64
+
65
+ @input << "y\ny\ny\n"
66
+ @input.rewind
67
+
68
+ exit_code = -1
69
+ output = capture_stdout do
70
+ exit_code = CMD.rolling_restart(opts)
71
+ end
72
+ expect(exit_code).to eql(2)
73
+ end
74
+
75
+ it 'handles eventual stabilization' do
76
+ allow(ssh_connection).to receive(:exec) do |arg|
77
+ expect(arg).to eql('sudo service elasticsearch restart')
78
+ end
79
+ opts = {:hostname => 'localhost-cmd-restart-stabilization', :port => '9200', :timeout => 3, :sleep_interval => 1}
80
+
81
+ @input << "y\ny\ny\n"
82
+ @input.rewind
83
+
84
+ exit_code = -1
85
+ output = capture_stdout do
86
+ exit_code = CMD.rolling_restart(opts)
87
+ end
88
+ expect(exit_code).to eql(0)
89
+ end
90
+
91
+ it 'Allows user to bail' do
92
+ allow(ssh_connection).to receive(:exec) do |arg|
93
+ expect(arg).to eql('sudo service elasticsearch restart')
94
+ end
95
+ opts = {:hostname => 'localhost', :port => '9200'}
96
+
97
+ @input << "no\n"
98
+ @input.rewind
99
+
100
+ exit_code = -1
101
+ output = capture_stdout do
102
+ exit_code = CMD.rolling_restart(opts)
103
+ end
104
+ expect(exit_code).to eql(2)
105
+ end
106
+
107
+ it 'Allows user to bail at master restart' do
108
+ allow(ssh_connection).to receive(:exec) do |arg|
109
+ expect(arg).to eql('sudo service elasticsearch restart')
110
+ end
111
+ opts = {:hostname => 'localhost', :port => '9200'}
112
+
113
+ @input << "y\ny\nn\n"
114
+ @input.rewind
115
+
116
+ exit_code = -1
117
+ output = capture_stdout do
118
+ exit_code = CMD.rolling_restart(opts)
119
+ end
120
+ expect(exit_code).to eql(2)
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'elasticsearch/client'
3
+
4
+ describe 'Elasticsearch::Client::ESClient ' '#status' do
5
+ context 'check status' do
6
+ it 'returns green' do
7
+ c = Elasticsearch::Client::ESClient.new
8
+ status = c.status
9
+ expect(status).to eql('green')
10
+ end
11
+ end
12
+ context 'is green?' do
13
+ it 'returns true (green)' do
14
+ c = Elasticsearch::Client::ESClient.new
15
+ status = c.green?
16
+ expect(status).to be true
17
+ end
18
+
19
+ it 'returns false (yellow)' do
20
+ c = Elasticsearch::Client::ESClient.new('localhost-yellow')
21
+ status = c.green?
22
+ expect(status).to be false
23
+ end
24
+
25
+ it 'returns false (red)' do
26
+ c = Elasticsearch::Client::ESClient.new('localhost-red')
27
+ status = c.green?
28
+ expect(status).to be false
29
+ end
30
+ end
31
+ end
32
+
33
+ describe 'Elasticsearch::Client::ESClient ' '#health' do
34
+ context '_cluster/health' do
35
+ it 'returns health hash' do
36
+ c = Elasticsearch::Client::ESClient.new('localhost')
37
+ health = c.health
38
+ exp_health = JSON.parse(File.read(DIR + '/fixtures/health.json'))
39
+ expect(health).to eql(exp_health)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe 'Elasticsearch::Client::ESClient ' '#nodes' do
45
+ context '_nodes' do
46
+ it 'returns nodes hash' do
47
+ c = Elasticsearch::Client::ESClient.new('localhost')
48
+ nodes = c.nodes
49
+ exp_nodes = JSON.parse(File.read(DIR + '/fixtures/nodes_.json'))
50
+ expect(nodes).to eql(exp_nodes)
51
+ end
52
+ end
53
+ end
54
+
55
+ describe 'Elasticsearch::Client::ESClient ' '#state' do
56
+ context '_cluster/state' do
57
+ it 'returns nodes hash' do
58
+ c = Elasticsearch::Client::ESClient.new('localhost')
59
+ state = c.state
60
+ exp_state = JSON.parse(File.read(DIR + '/fixtures/state.json'))
61
+ expect(state).to eql(exp_state)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,12 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"green",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":0,
10
+ "initializing_shards":0,
11
+ "unassigned_shards":0
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"green",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":0,
10
+ "initializing_shards":1,
11
+ "unassigned_shards":0
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"green",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":1,
10
+ "initializing_shards":0,
11
+ "unassigned_shards":0
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"red",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":0,
10
+ "initializing_shards":0,
11
+ "unassigned_shards":0
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"green",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":0,
10
+ "initializing_shards":0,
11
+ "unassigned_shards":1
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "cluster_name":"test_es_cluster",
3
+ "status":"yellow",
4
+ "timed_out":false,
5
+ "number_of_nodes":3,
6
+ "number_of_data_nodes":3,
7
+ "active_primary_shards":8,
8
+ "active_shards":16,
9
+ "relocating_shards":0,
10
+ "initializing_shards":0,
11
+ "unassigned_shards":0
12
+ }
13
+
@@ -0,0 +1,837 @@
1
+ {
2
+ "cluster_name": "socrata_test_es_cluster",
3
+ "nodes": {
4
+ "v8w7dipKTo-52KuS6mMqYA": {
5
+ "name": "node1.example.com",
6
+ "transport_address": "inet[/10.110.39.215:9300]",
7
+ "host": "ip-10-110-39-215.us-west-2.compute.internal",
8
+ "ip": "10.110.39.215",
9
+ "version": "1.4.3",
10
+ "build": "36a29a7",
11
+ "http_address": "inet[/10.110.39.215:9200]",
12
+ "attributes": {
13
+ "aws_availability_zone": "us-west-2b",
14
+ "max_local_storage_nodes": "3"
15
+ },
16
+ "settings": {
17
+ "index": {
18
+ "mapper": {
19
+ "dynamic": "true"
20
+ }
21
+ },
22
+ "bootstrap": {
23
+ "mlockall": "true"
24
+ },
25
+ "client": {
26
+ "type": "node"
27
+ },
28
+ "gateway": {
29
+ "expected_nodes": "3"
30
+ },
31
+ "pidfile": "/usr/local/var/run/node1_example_com.pid",
32
+ "plugin": {
33
+ "mandatory": "cloud-aws"
34
+ },
35
+ "node": {
36
+ "max_local_storage_nodes": "3",
37
+ "name": "node1.example.com"
38
+ },
39
+ "http": {
40
+ "port": "9200"
41
+ },
42
+ "name": "node1.example.com",
43
+ "action": {
44
+ "auto_create_index": "true",
45
+ "disable_delete_all_indices": "true"
46
+ },
47
+ "path": {
48
+ "data": "/data/elasticsearch",
49
+ "home": "/bin/elasticsearch",
50
+ "conf": "/etc/elasticsearch",
51
+ "logs": "/var/log/elasticsearch"
52
+ },
53
+ "cloud": {
54
+ "aws": {
55
+ "region": "us-west-2",
56
+ "proxy_port": "3128",
57
+ "protocol": "https",
58
+ "proxy_host": "proxy.example.com",
59
+ "ec2": {
60
+ "endpoint": "ec2.us-west-2.amazonaws.com"
61
+ }
62
+ },
63
+ "node": {
64
+ "auto_attributes": "true"
65
+ }
66
+ },
67
+ "config": "/etc/elasticsearch/elasticsearch.yml",
68
+ "cluster": {
69
+ "name": "socrata_test_es_cluster"
70
+ },
71
+ "discovery": {
72
+ "type": "ec2",
73
+ "zen": {
74
+ "minimum_master_nodes": "2",
75
+ "ping": {
76
+ "multicast": {
77
+ "enabled": "false"
78
+ }
79
+ }
80
+ },
81
+ "ec2": {
82
+ "tag": {
83
+ "Name": "test-cluster"
84
+ }
85
+ }
86
+ },
87
+ "foreground": "yes"
88
+ },
89
+ "os": {
90
+ "refresh_interval_in_millis": 1000,
91
+ "available_processors": 2,
92
+ "cpu": {
93
+ "vendor": "Intel",
94
+ "model": "Xeon",
95
+ "mhz": 2900,
96
+ "total_cores": 2,
97
+ "total_sockets": 1,
98
+ "cores_per_socket": 2,
99
+ "cache_size_in_bytes": 25600
100
+ },
101
+ "mem": {
102
+ "total_in_bytes": 3947364352
103
+ },
104
+ "swap": {
105
+ "total_in_bytes": 0
106
+ }
107
+ },
108
+ "process": {
109
+ "refresh_interval_in_millis": 1000,
110
+ "id": 29421,
111
+ "max_file_descriptors": 64000,
112
+ "mlockall": true
113
+ },
114
+ "jvm": {
115
+ "pid": 29421,
116
+ "version": "1.7.0_45",
117
+ "vm_name": "Java HotSpot(TM) 64-Bit Server VM",
118
+ "vm_version": "24.45-b08",
119
+ "vm_vendor": "Oracle Corporation",
120
+ "start_time_in_millis": 1429812123179,
121
+ "mem": {
122
+ "heap_init_in_bytes": 2147483648,
123
+ "heap_max_in_bytes": 2130051072,
124
+ "non_heap_init_in_bytes": 24313856,
125
+ "non_heap_max_in_bytes": 136314880,
126
+ "direct_max_in_bytes": 2130051072
127
+ },
128
+ "gc_collectors": [
129
+ "ParNew",
130
+ "ConcurrentMarkSweep"
131
+ ],
132
+ "memory_pools": [
133
+ "Code Cache",
134
+ "Par Eden Space",
135
+ "Par Survivor Space",
136
+ "CMS Old Gen",
137
+ "CMS Perm Gen"
138
+ ]
139
+ },
140
+ "thread_pool": {
141
+ "generic": {
142
+ "type": "cached",
143
+ "keep_alive": "30s",
144
+ "queue_size": -1
145
+ },
146
+ "index": {
147
+ "type": "fixed",
148
+ "min": 2,
149
+ "max": 2,
150
+ "queue_size": "200"
151
+ },
152
+ "bench": {
153
+ "type": "scaling",
154
+ "min": 1,
155
+ "max": 1,
156
+ "keep_alive": "5m",
157
+ "queue_size": -1
158
+ },
159
+ "get": {
160
+ "type": "fixed",
161
+ "min": 2,
162
+ "max": 2,
163
+ "queue_size": "1k"
164
+ },
165
+ "snapshot": {
166
+ "type": "scaling",
167
+ "min": 1,
168
+ "max": 1,
169
+ "keep_alive": "5m",
170
+ "queue_size": -1
171
+ },
172
+ "merge": {
173
+ "type": "scaling",
174
+ "min": 1,
175
+ "max": 1,
176
+ "keep_alive": "5m",
177
+ "queue_size": -1
178
+ },
179
+ "suggest": {
180
+ "type": "fixed",
181
+ "min": 2,
182
+ "max": 2,
183
+ "queue_size": "1k"
184
+ },
185
+ "bulk": {
186
+ "type": "fixed",
187
+ "min": 2,
188
+ "max": 2,
189
+ "queue_size": "50"
190
+ },
191
+ "optimize": {
192
+ "type": "fixed",
193
+ "min": 1,
194
+ "max": 1,
195
+ "queue_size": -1
196
+ },
197
+ "warmer": {
198
+ "type": "scaling",
199
+ "min": 1,
200
+ "max": 1,
201
+ "keep_alive": "5m",
202
+ "queue_size": -1
203
+ },
204
+ "flush": {
205
+ "type": "scaling",
206
+ "min": 1,
207
+ "max": 1,
208
+ "keep_alive": "5m",
209
+ "queue_size": -1
210
+ },
211
+ "search": {
212
+ "type": "fixed",
213
+ "min": 6,
214
+ "max": 6,
215
+ "queue_size": "1k"
216
+ },
217
+ "listener": {
218
+ "type": "fixed",
219
+ "min": 1,
220
+ "max": 1,
221
+ "queue_size": -1
222
+ },
223
+ "percolate": {
224
+ "type": "fixed",
225
+ "min": 2,
226
+ "max": 2,
227
+ "queue_size": "1k"
228
+ },
229
+ "management": {
230
+ "type": "scaling",
231
+ "min": 1,
232
+ "max": 5,
233
+ "keep_alive": "5m",
234
+ "queue_size": -1
235
+ },
236
+ "refresh": {
237
+ "type": "scaling",
238
+ "min": 1,
239
+ "max": 1,
240
+ "keep_alive": "5m",
241
+ "queue_size": -1
242
+ }
243
+ },
244
+ "network": {
245
+ "refresh_interval_in_millis": 5000,
246
+ "primary_interface": {
247
+ "address": "10.110.39.215",
248
+ "name": "eth0",
249
+ "mac_address": "02:C0:85:15:1A:EF"
250
+ }
251
+ },
252
+ "transport": {
253
+ "bound_address": "inet[/0.0.0.0:9300]",
254
+ "publish_address": "inet[/10.110.39.215:9300]"
255
+ },
256
+ "http": {
257
+ "bound_address": "inet[/0.0.0.0:9200]",
258
+ "publish_address": "inet[/10.110.39.215:9200]",
259
+ "max_content_length_in_bytes": 104857600
260
+ },
261
+ "plugins": [
262
+ {
263
+ "name": "cloud-aws",
264
+ "version": "2.4.0",
265
+ "description": "Cloud AWS Plugin",
266
+ "jvm": true,
267
+ "site": false
268
+ },
269
+ {
270
+ "name": "marvel",
271
+ "version": "1.3.1",
272
+ "description": "Elasticsearch Management & Monitoring",
273
+ "url": "/_plugin/marvel/",
274
+ "jvm": true,
275
+ "site": true
276
+ }
277
+ ]
278
+ },
279
+ "j4eRj4UNRlmZDEtbjH5yTA": {
280
+ "name": "node2.example.com",
281
+ "transport_address": "inet[/10.110.42.16:9300]",
282
+ "host": "ip-10-110-42-16.us-west-2.compute.internal",
283
+ "ip": "10.110.42.16",
284
+ "version": "1.4.3",
285
+ "build": "36a29a7",
286
+ "http_address": "inet[/10.110.42.16:9200]",
287
+ "attributes": {
288
+ "aws_availability_zone": "us-west-2c",
289
+ "max_local_storage_nodes": "3"
290
+ },
291
+ "settings": {
292
+ "index": {
293
+ "mapper": {
294
+ "dynamic": "true"
295
+ }
296
+ },
297
+ "bootstrap": {
298
+ "mlockall": "true"
299
+ },
300
+ "client": {
301
+ "type": "node"
302
+ },
303
+ "gateway": {
304
+ "expected_nodes": "3"
305
+ },
306
+ "pidfile": "/usr/local/var/run/node2_example_com.pid",
307
+ "plugin": {
308
+ "mandatory": "cloud-aws"
309
+ },
310
+ "node": {
311
+ "max_local_storage_nodes": "3",
312
+ "name": "node2.example.com"
313
+ },
314
+ "http": {
315
+ "port": "9200"
316
+ },
317
+ "name": "node2.example.com",
318
+ "action": {
319
+ "auto_create_index": "true",
320
+ "disable_delete_all_indices": "true"
321
+ },
322
+ "path": {
323
+ "data": "/data/elasticsearch",
324
+ "home": "/bin/elasticsearch",
325
+ "conf": "/etc/elasticsearch",
326
+ "logs": "/var/log/elasticsearch"
327
+ },
328
+ "cloud": {
329
+ "aws": {
330
+ "region": "us-west-2",
331
+ "proxy_port": "3128",
332
+ "protocol": "https",
333
+ "proxy_host": "proxy.example.com",
334
+ "ec2": {
335
+ "endpoint": "ec2.us-west-2.amazonaws.com"
336
+ }
337
+ },
338
+ "node": {
339
+ "auto_attributes": "true"
340
+ }
341
+ },
342
+ "config": "/etc/elasticsearch/elasticsearch.yml",
343
+ "cluster": {
344
+ "name": "socrata_test_es_cluster"
345
+ },
346
+ "discovery": {
347
+ "type": "ec2",
348
+ "zen": {
349
+ "minimum_master_nodes": "2",
350
+ "ping": {
351
+ "multicast": {
352
+ "enabled": "false"
353
+ }
354
+ }
355
+ },
356
+ "ec2": {
357
+ "tag": {
358
+ "Name": "test-cluster"
359
+ }
360
+ }
361
+ },
362
+ "foreground": "yes"
363
+ },
364
+ "os": {
365
+ "refresh_interval_in_millis": 1000,
366
+ "available_processors": 2,
367
+ "cpu": {
368
+ "vendor": "Intel",
369
+ "model": "Xeon",
370
+ "mhz": 2893,
371
+ "total_cores": 2,
372
+ "total_sockets": 1,
373
+ "cores_per_socket": 2,
374
+ "cache_size_in_bytes": 25600
375
+ },
376
+ "mem": {
377
+ "total_in_bytes": 3947364352
378
+ },
379
+ "swap": {
380
+ "total_in_bytes": 0
381
+ }
382
+ },
383
+ "process": {
384
+ "refresh_interval_in_millis": 1000,
385
+ "id": 31738,
386
+ "max_file_descriptors": 64000,
387
+ "mlockall": true
388
+ },
389
+ "jvm": {
390
+ "pid": 31738,
391
+ "version": "1.7.0_45",
392
+ "vm_name": "Java HotSpot(TM) 64-Bit Server VM",
393
+ "vm_version": "24.45-b08",
394
+ "vm_vendor": "Oracle Corporation",
395
+ "start_time_in_millis": 1429813244163,
396
+ "mem": {
397
+ "heap_init_in_bytes": 2147483648,
398
+ "heap_max_in_bytes": 2130051072,
399
+ "non_heap_init_in_bytes": 24313856,
400
+ "non_heap_max_in_bytes": 136314880,
401
+ "direct_max_in_bytes": 2130051072
402
+ },
403
+ "gc_collectors": [
404
+ "ParNew",
405
+ "ConcurrentMarkSweep"
406
+ ],
407
+ "memory_pools": [
408
+ "Code Cache",
409
+ "Par Eden Space",
410
+ "Par Survivor Space",
411
+ "CMS Old Gen",
412
+ "CMS Perm Gen"
413
+ ]
414
+ },
415
+ "thread_pool": {
416
+ "generic": {
417
+ "type": "cached",
418
+ "keep_alive": "30s",
419
+ "queue_size": -1
420
+ },
421
+ "index": {
422
+ "type": "fixed",
423
+ "min": 2,
424
+ "max": 2,
425
+ "queue_size": "200"
426
+ },
427
+ "bench": {
428
+ "type": "scaling",
429
+ "min": 1,
430
+ "max": 1,
431
+ "keep_alive": "5m",
432
+ "queue_size": -1
433
+ },
434
+ "get": {
435
+ "type": "fixed",
436
+ "min": 2,
437
+ "max": 2,
438
+ "queue_size": "1k"
439
+ },
440
+ "snapshot": {
441
+ "type": "scaling",
442
+ "min": 1,
443
+ "max": 1,
444
+ "keep_alive": "5m",
445
+ "queue_size": -1
446
+ },
447
+ "merge": {
448
+ "type": "scaling",
449
+ "min": 1,
450
+ "max": 1,
451
+ "keep_alive": "5m",
452
+ "queue_size": -1
453
+ },
454
+ "suggest": {
455
+ "type": "fixed",
456
+ "min": 2,
457
+ "max": 2,
458
+ "queue_size": "1k"
459
+ },
460
+ "bulk": {
461
+ "type": "fixed",
462
+ "min": 2,
463
+ "max": 2,
464
+ "queue_size": "50"
465
+ },
466
+ "optimize": {
467
+ "type": "fixed",
468
+ "min": 1,
469
+ "max": 1,
470
+ "queue_size": -1
471
+ },
472
+ "warmer": {
473
+ "type": "scaling",
474
+ "min": 1,
475
+ "max": 1,
476
+ "keep_alive": "5m",
477
+ "queue_size": -1
478
+ },
479
+ "flush": {
480
+ "type": "scaling",
481
+ "min": 1,
482
+ "max": 1,
483
+ "keep_alive": "5m",
484
+ "queue_size": -1
485
+ },
486
+ "search": {
487
+ "type": "fixed",
488
+ "min": 6,
489
+ "max": 6,
490
+ "queue_size": "1k"
491
+ },
492
+ "listener": {
493
+ "type": "fixed",
494
+ "min": 1,
495
+ "max": 1,
496
+ "queue_size": -1
497
+ },
498
+ "percolate": {
499
+ "type": "fixed",
500
+ "min": 2,
501
+ "max": 2,
502
+ "queue_size": "1k"
503
+ },
504
+ "management": {
505
+ "type": "scaling",
506
+ "min": 1,
507
+ "max": 5,
508
+ "keep_alive": "5m",
509
+ "queue_size": -1
510
+ },
511
+ "refresh": {
512
+ "type": "scaling",
513
+ "min": 1,
514
+ "max": 1,
515
+ "keep_alive": "5m",
516
+ "queue_size": -1
517
+ }
518
+ },
519
+ "network": {
520
+ "refresh_interval_in_millis": 5000,
521
+ "primary_interface": {
522
+ "address": "10.110.42.16",
523
+ "name": "eth0",
524
+ "mac_address": "0A:04:54:F2:FB:A1"
525
+ }
526
+ },
527
+ "transport": {
528
+ "bound_address": "inet[/0.0.0.0:9300]",
529
+ "publish_address": "inet[/10.110.42.16:9300]"
530
+ },
531
+ "http": {
532
+ "bound_address": "inet[/0.0.0.0:9200]",
533
+ "publish_address": "inet[/10.110.42.16:9200]",
534
+ "max_content_length_in_bytes": 104857600
535
+ },
536
+ "plugins": [
537
+ {
538
+ "name": "cloud-aws",
539
+ "version": "2.4.0",
540
+ "description": "Cloud AWS Plugin",
541
+ "jvm": true,
542
+ "site": false
543
+ },
544
+ {
545
+ "name": "marvel",
546
+ "version": "1.3.1",
547
+ "description": "Elasticsearch Management & Monitoring",
548
+ "url": "/_plugin/marvel/",
549
+ "jvm": true,
550
+ "site": true
551
+ }
552
+ ]
553
+ },
554
+ "ofXIjVIMR-OmzYXTDyRP_Q": {
555
+ "name": "node3.example.com",
556
+ "transport_address": "inet[ip-10-110-34-69.us-west-2.compute.internal/10.110.34.69:9300]",
557
+ "host": "ip-10-110-34-69.us-west-2.compute.internal",
558
+ "ip": "10.110.34.69",
559
+ "version": "1.4.3",
560
+ "build": "36a29a7",
561
+ "http_address": "inet[/10.110.34.69:9200]",
562
+ "attributes": {
563
+ "aws_availability_zone": "us-west-2a",
564
+ "max_local_storage_nodes": "3"
565
+ },
566
+ "settings": {
567
+ "index": {
568
+ "mapper": {
569
+ "dynamic": "true"
570
+ }
571
+ },
572
+ "bootstrap": {
573
+ "mlockall": "true"
574
+ },
575
+ "client": {
576
+ "type": "node"
577
+ },
578
+ "gateway": {
579
+ "expected_nodes": "3"
580
+ },
581
+ "pidfile": "/usr/local/var/run/node3_example_com.pid",
582
+ "plugin": {
583
+ "mandatory": "cloud-aws"
584
+ },
585
+ "node": {
586
+ "max_local_storage_nodes": "3",
587
+ "name": "node3.example.com"
588
+ },
589
+ "http": {
590
+ "port": "9200"
591
+ },
592
+ "name": "node3.example.com",
593
+ "action": {
594
+ "auto_create_index": "true",
595
+ "disable_delete_all_indices": "true"
596
+ },
597
+ "path": {
598
+ "data": "/data/elasticsearch",
599
+ "home": "/bin/elasticsearch",
600
+ "conf": "/etc/elasticsearch",
601
+ "logs": "/var/log/elasticsearch"
602
+ },
603
+ "cloud": {
604
+ "aws": {
605
+ "region": "us-west-2",
606
+ "proxy_port": "3128",
607
+ "protocol": "https",
608
+ "proxy_host": "proxy.example.com",
609
+ "ec2": {
610
+ "endpoint": "ec2.us-west-2.amazonaws.com"
611
+ }
612
+ },
613
+ "node": {
614
+ "auto_attributes": "true"
615
+ }
616
+ },
617
+ "config": "/etc/elasticsearch/elasticsearch.yml",
618
+ "cluster": {
619
+ "name": "socrata_test_es_cluster"
620
+ },
621
+ "discovery": {
622
+ "type": "ec2",
623
+ "zen": {
624
+ "minimum_master_nodes": "2",
625
+ "ping": {
626
+ "multicast": {
627
+ "enabled": "false"
628
+ }
629
+ }
630
+ },
631
+ "ec2": {
632
+ "tag": {
633
+ "Name": "test-cluster"
634
+ }
635
+ }
636
+ },
637
+ "foreground": "yes"
638
+ },
639
+ "os": {
640
+ "refresh_interval_in_millis": 1000,
641
+ "available_processors": 2,
642
+ "cpu": {
643
+ "vendor": "Intel",
644
+ "model": "Xeon",
645
+ "mhz": 2900,
646
+ "total_cores": 2,
647
+ "total_sockets": 1,
648
+ "cores_per_socket": 2,
649
+ "cache_size_in_bytes": 25600
650
+ },
651
+ "mem": {
652
+ "total_in_bytes": 3947364352
653
+ },
654
+ "swap": {
655
+ "total_in_bytes": 0
656
+ }
657
+ },
658
+ "process": {
659
+ "refresh_interval_in_millis": 1000,
660
+ "id": 31087,
661
+ "max_file_descriptors": 64000,
662
+ "mlockall": true
663
+ },
664
+ "jvm": {
665
+ "pid": 31087,
666
+ "version": "1.7.0_45",
667
+ "vm_name": "Java HotSpot(TM) 64-Bit Server VM",
668
+ "vm_version": "24.45-b08",
669
+ "vm_vendor": "Oracle Corporation",
670
+ "start_time_in_millis": 1429812667322,
671
+ "mem": {
672
+ "heap_init_in_bytes": 2147483648,
673
+ "heap_max_in_bytes": 2130051072,
674
+ "non_heap_init_in_bytes": 24313856,
675
+ "non_heap_max_in_bytes": 136314880,
676
+ "direct_max_in_bytes": 2130051072
677
+ },
678
+ "gc_collectors": [
679
+ "ParNew",
680
+ "ConcurrentMarkSweep"
681
+ ],
682
+ "memory_pools": [
683
+ "Code Cache",
684
+ "Par Eden Space",
685
+ "Par Survivor Space",
686
+ "CMS Old Gen",
687
+ "CMS Perm Gen"
688
+ ]
689
+ },
690
+ "thread_pool": {
691
+ "generic": {
692
+ "type": "cached",
693
+ "keep_alive": "30s",
694
+ "queue_size": -1
695
+ },
696
+ "index": {
697
+ "type": "fixed",
698
+ "min": 2,
699
+ "max": 2,
700
+ "queue_size": "200"
701
+ },
702
+ "bench": {
703
+ "type": "scaling",
704
+ "min": 1,
705
+ "max": 1,
706
+ "keep_alive": "5m",
707
+ "queue_size": -1
708
+ },
709
+ "get": {
710
+ "type": "fixed",
711
+ "min": 2,
712
+ "max": 2,
713
+ "queue_size": "1k"
714
+ },
715
+ "snapshot": {
716
+ "type": "scaling",
717
+ "min": 1,
718
+ "max": 1,
719
+ "keep_alive": "5m",
720
+ "queue_size": -1
721
+ },
722
+ "merge": {
723
+ "type": "scaling",
724
+ "min": 1,
725
+ "max": 1,
726
+ "keep_alive": "5m",
727
+ "queue_size": -1
728
+ },
729
+ "suggest": {
730
+ "type": "fixed",
731
+ "min": 2,
732
+ "max": 2,
733
+ "queue_size": "1k"
734
+ },
735
+ "bulk": {
736
+ "type": "fixed",
737
+ "min": 2,
738
+ "max": 2,
739
+ "queue_size": "50"
740
+ },
741
+ "optimize": {
742
+ "type": "fixed",
743
+ "min": 1,
744
+ "max": 1,
745
+ "queue_size": -1
746
+ },
747
+ "warmer": {
748
+ "type": "scaling",
749
+ "min": 1,
750
+ "max": 1,
751
+ "keep_alive": "5m",
752
+ "queue_size": -1
753
+ },
754
+ "flush": {
755
+ "type": "scaling",
756
+ "min": 1,
757
+ "max": 1,
758
+ "keep_alive": "5m",
759
+ "queue_size": -1
760
+ },
761
+ "search": {
762
+ "type": "fixed",
763
+ "min": 6,
764
+ "max": 6,
765
+ "queue_size": "1k"
766
+ },
767
+ "listener": {
768
+ "type": "fixed",
769
+ "min": 1,
770
+ "max": 1,
771
+ "queue_size": -1
772
+ },
773
+ "percolate": {
774
+ "type": "fixed",
775
+ "min": 2,
776
+ "max": 2,
777
+ "queue_size": "1k"
778
+ },
779
+ "management": {
780
+ "type": "scaling",
781
+ "min": 1,
782
+ "max": 5,
783
+ "keep_alive": "5m",
784
+ "queue_size": -1
785
+ },
786
+ "refresh": {
787
+ "type": "scaling",
788
+ "min": 1,
789
+ "max": 1,
790
+ "keep_alive": "5m",
791
+ "queue_size": -1
792
+ }
793
+ },
794
+ "network": {
795
+ "refresh_interval_in_millis": 5000,
796
+ "primary_interface": {
797
+ "address": "10.110.34.69",
798
+ "name": "eth0",
799
+ "mac_address": "06:7C:55:1B:C2:36"
800
+ }
801
+ },
802
+ "transport": {
803
+ "bound_address": "inet[/0.0.0.0:9300]",
804
+ "publish_address": "inet[ip-10-110-34-69.us-west-2.compute.internal/10.110.34.69:9300]"
805
+ },
806
+ "http": {
807
+ "bound_address": "inet[/0.0.0.0:9200]",
808
+ "publish_address": "inet[/10.110.34.69:9200]",
809
+ "max_content_length_in_bytes": 104857600
810
+ },
811
+ "plugins": [
812
+ {
813
+ "name": "cloud-aws",
814
+ "version": "2.4.0",
815
+ "description": "Cloud AWS Plugin",
816
+ "jvm": true,
817
+ "site": false
818
+ },
819
+ {
820
+ "name": "river-twitter",
821
+ "version": "2.5.0",
822
+ "description": "River Twitter Plugin",
823
+ "jvm": true,
824
+ "site": false
825
+ },
826
+ {
827
+ "name": "marvel",
828
+ "version": "1.3.1",
829
+ "description": "Elasticsearch Management & Monitoring",
830
+ "url": "/_plugin/marvel/",
831
+ "jvm": true,
832
+ "site": true
833
+ }
834
+ ]
835
+ }
836
+ }
837
+ }