mtncd 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDBlMWM4ZjQxOTY5MzZlMDhhYjIyNzA3MWY1ZTJhZTRlZDEzZjExMw==
4
+ YmE3Zjk5ZTM2N2NlMmYzODg2NjQzMDJlYmQ0YzQyNzNiNjhkZTQ4MQ==
5
5
  data.tar.gz: !binary |-
6
- Mjg1YmJlZTU0NDFlZjBhN2Y3ODdiYjczYTJhZDA1ZDM1YTMwNmExMg==
6
+ NzA1Y2I5Yzc2M2YxN2QzODM5NzBiMTFhMGRkYThhM2JlZDJjODgyNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OWMwZjk3MDY2NWFiYmJmMGZkNWRlZGI1ZDVmYmQyOWMzMTkwOTc4YmRjZDU3
10
- NWFiNmM0OTIwOTRlYWZmZjBlOWYwY2E3M2FmYjQ0ZWRhM2MzOWQ1NmYwOGY3
11
- ODA3OTJhYWZkNjljOGIxODJmY2I3MTE3OGUyZGI2ZjdkNWFmODU=
9
+ Nzc0Njg0ZWNkNGQ5ZDNmZjkxZjE3OTQyYTA5NDI1ODhmMWNkODg0YzI5ZDA0
10
+ N2ZmM2JhM2ZjYjI0YjE4ODYxNjNmMWY3MjA1ODg1ZmZiYjM0ODMwNGY1ZmJi
11
+ NjE3NDY1N2MyNGMxYTA3N2ZiNDg0MTdhNjI3ZTRlYjI1ZGNmYjE=
12
12
  data.tar.gz: !binary |-
13
- Zjk1ZjAwNWVkNGMxZmE1ODQ0MDZiMGFhZjIxYTUzN2RjNmQwZTdhOWRlZjJl
14
- NjlmNmE5ZDVhOWJkYjhiODIzNTVjOTEyYmQ1YWJmODBhM2M2MTdkOGU0Y2E0
15
- N2Q4YWE0YWZhZWYyYTVlODlkMjU2NDU0MmEwMmUyMTQyMmJmM2E=
13
+ M2I3YjFhNWVhNDUzYjcwYTIxYWYzNmY4NzZkZGI4YWZjMjljYTI1MmFjNThl
14
+ MGVlZDg3ZTMyNDUyYzFjYWI2MTI2NDg3ZTIzYjM0ZGVjMzYyZDU5YjNkYzZl
15
+ NDU5Yzg5OTU3YjVjZjVlYzM3YWVhMmMwNjdlNjVkMDI0YjE5NWE=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mtncd (0.0.4)
4
+ mtncd (0.0.8)
5
5
  awesome_print (= 1.2.0)
6
6
  gli (= 2.12.2)
7
7
  msgpack (= 0.5.9)
@@ -37,7 +37,7 @@ GEM
37
37
  msgpack (0.5.9)
38
38
  multi_json (1.10.1)
39
39
  multi_test (0.1.1)
40
- rack (1.5.2)
40
+ rack (1.6.0)
41
41
  rack-protection (1.5.3)
42
42
  rack
43
43
  rake (10.3.2)
data/bin/mtncd CHANGED
@@ -2,7 +2,7 @@
2
2
  # encoding
3
3
  require 'gli'
4
4
  require 'mtncd'
5
- require 'yaml'
5
+ require 'json'
6
6
  require 'securerandom'
7
7
  require 'serfx'
8
8
  require 'resque'
@@ -10,6 +10,8 @@ require 'msgpack'
10
10
  require 'awesome_print'
11
11
  require 'redis'
12
12
  require 'open3'
13
+ require 'resque'
14
+ require 'highline/import'
13
15
 
14
16
  include GLI::App
15
17
 
@@ -35,7 +37,7 @@ command :deploy do |deploy|
35
37
  }
36
38
 
37
39
  start.desc 'use deployment id'
38
- start.default_value SecureRandom.uuid
40
+ start.default_value SecureRandom.hex(4)
39
41
  start.flag :id
40
42
 
41
43
  start.desc 'local or global cluster command'
@@ -56,17 +58,6 @@ command :deploy do |deploy|
56
58
  start.switch :single
57
59
 
58
60
  start.action do |global_options,options,args|
59
- if $config['role'] == 'sled' && options[:cluster] == 'global'
60
- raise 'global commands are only available on central or infra nodes'
61
- end
62
-
63
- if $config['role'] == 'central' && options[:cluster] == 'local'
64
- raise 'local commands are only available on infra or sled nodes'
65
- end
66
-
67
- if $config['role'] == 'zi' && options[:cluster] == 'local'
68
- raise "local status is only available on infra or sled nodes"
69
- end
70
61
 
71
62
  event_options_hash = {
72
63
  'id' => "#{options[:id]}",
@@ -77,10 +68,10 @@ command :deploy do |deploy|
77
68
  event_options_hash['shipcodes'] = options[:ships].split(",") unless options[:ships].nil?
78
69
 
79
70
  serf_options_hash = {
80
- 'ip' => $config['system']['serf'][options[:cluster]]['ip'],
81
- 'port' => $config['system']['serf'][options[:cluster]]['port'],
82
- 'auth' => $config['system']['serf'][options[:cluster]]['auth'],
83
- 'event' => $config['deploy'][options[:cluster]]['start']
71
+ 'ip' => $config['serf'][options[:cluster]]['rpc_ip'],
72
+ 'port' => $config['serf'][options[:cluster]]['rpc_port'],
73
+ 'auth' => $config['serf'][options[:cluster]]['rpc_auth'],
74
+ 'event' => 'deploy'
84
75
  }
85
76
 
86
77
  begin
@@ -107,27 +98,16 @@ command :deploy do |deploy|
107
98
  }
108
99
 
109
100
  stop.action do |global_options,options,args|
110
- if $config['role'] == 'sled' && options[:cluster] == 'global'
111
- raise 'global commands are only available on central or infra nodes'
112
- end
113
-
114
- if $config['role'] == 'central' && options[:cluster] == 'local'
115
- raise 'local commands are only available on infra or sled nodes'
116
- end
117
-
118
- if $config['role'] == 'zi' && options[:cluster] == 'local'
119
- raise "local status is only available on infra or sled nodes"
120
- end
121
101
 
122
102
  event_options_hash = {
123
103
  'id' => "#{options[:id]}"
124
104
  }
125
105
 
126
106
  serf_options_hash = {
127
- 'ip' => $config['system']['serf'][options[:cluster]]['ip'],
128
- 'port' => $config['system']['serf'][options[:cluster]]['port'],
129
- 'auth' => $config['system']['serf'][options[:cluster]]['auth'],
130
- 'event' => $config['deploy'][options[:cluster]]['stop']
107
+ 'ip' => $config['serf'][options[:cluster]]['rpc_ip'],
108
+ 'port' => $config['serf'][options[:cluster]]['rpc_port'],
109
+ 'auth' => $config['serf'][options[:cluster]]['rpc_auth'],
110
+ 'event' => 'stop_deploy'
131
111
  }
132
112
 
133
113
  begin
@@ -161,22 +141,10 @@ command :status do |status|
161
141
 
162
142
  status.action do |global_options,options,args|
163
143
 
164
- if $config['role'] == 'sled' && options[:cluster] == 'global'
165
- raise "global status is only available on central or infra nodes"
166
- end
167
-
168
- if $config['role'] == 'central' && options[:cluster] == 'local'
169
- raise "local status is only available on infra or sled nodes"
170
- end
171
-
172
- if $config['role'] == 'zi' && options[:cluster] == 'local'
173
- raise "local status is only available on infra or sled nodes"
174
- end
175
-
176
144
  serf_options_hash = {
177
- 'ip' => $config['system']['serf'][options[:cluster]]['ip'],
178
- 'port' => $config['system']['serf'][options[:cluster]]['port'],
179
- 'auth' => $config['system']['serf'][options[:cluster]]['auth']
145
+ 'ip' => $config['serf'][options[:cluster]]['rpc_ip'],
146
+ 'port' => $config['serf'][options[:cluster]]['rpc_port'],
147
+ 'auth' => $config['serf'][options[:cluster]]['rpc_auth']
180
148
  }
181
149
 
182
150
  command_string = serf_options_hash['auth'].nil? ? "serf members -rpc-addr=#{serf_options_hash['ip']}:#{serf_options_hash['port']}" : "serf members -rpc-addr=#{serf_options_hash['ip']}:#{serf_options_hash['port']} -rpc-auth=#{serf_options_hash['auth']}"
@@ -190,7 +158,6 @@ command :status do |status|
190
158
  end
191
159
  end
192
160
 
193
-
194
161
  desc 'Status of pipeline components on this particular machine'
195
162
  command :system do |system|
196
163
  system.action do |global_options,options,args|
@@ -198,26 +165,26 @@ command :system do |system|
198
165
  # check redis
199
166
  result = "OK"
200
167
  begin
201
- redis = Redis.new(:host => $config['system']['redis']['ip'], :port => $config['system']['redis']['port'], :db => $config['system']['redis']['db'])
168
+ redis = Redis.new(:host => $config['resque']['redis_ip'], :port => $config['resque']['redis_port'], :db => $config['resque']['redis_db'])
202
169
  redis.ping
203
170
  rescue
204
171
  result = "\033[31mFAIL\033[0m"
205
172
  success = false
206
173
  end
207
- puts "Redis - Connected to #{$config['system']['redis']['ip']}:#{$config['system']['redis']['port']}/#{$config['system']['redis']['db']} - [#{result}]"
174
+ puts "Redis - Connected to #{$config['resque']['redis_ip']}:#{$config['resque']['redis_port']}/#{$config['resque']['redis_db']} - [#{result}]"
208
175
 
209
176
  # check resque
210
177
  begin
211
- Resque.redis = "#{$config['system']['redis']['ip']}:#{$config['system']['redis']['port']}/#{$config['system']['redis']['db']}"
178
+ Resque.redis = "#{$config['resque']['redis_ip']}:#{$config['resque']['redis_port']}/#{$config['resque']['redis_db']}"
212
179
 
213
180
  # clean up any workers that didn't exit gracefuly.
214
181
  Resque.workers.each { |worker|
215
182
  worker.prune_dead_workers
216
183
  }
217
184
 
218
- result = (Resque.workers.count == $config['system']['resque']['workers']) ? "OK" : "\033[31mFAIL\033[0m"
219
- success = Resque.workers.count == $config['system']['resque']['workers'] unless success == false
220
- puts "Resque - Should have #{$config['system']['resque']['workers']} workers, running #{Resque.workers.count} workers - [#{result}]"
185
+ result = (Resque.workers.count == $config['resque']['worker_count']) ? "OK" : "\033[31mFAIL\033[0m"
186
+ success = Resque.workers.count == $config['resque']['worker_count'] unless success == false
187
+ puts "Resque - Should have #{$config['resque']['worker_count']} workers, running #{Resque.workers.count} workers - [#{result}]"
221
188
  rescue
222
189
  result = "\033[31mFAIL\033[0m"
223
190
  success = false
@@ -225,9 +192,9 @@ command :system do |system|
225
192
  end
226
193
 
227
194
  # check serf
228
- if $config['role'] != 'central' && $config['role'] != 'zi'
195
+ if $config['role'] == 'ship' || $config['role'] == 'sled'
229
196
  begin
230
- Serfx.connect(host: $config['system']['serf']['local']['ip'], port: $config['system']['serf']['local']['port'], authkey:$config['system']['serf']['local']['auth']) do |conn|
197
+ Serfx.connect(host: $config['serf']['local']['rpc_ip'], port: $config['serf']['local']['rpc_port'], authkey: $config['serf']['local']['rpc_auth']) do |conn|
231
198
  result = (conn.members.body['Members'].length > 1) ? "OK" : "\033[31mFAIL\033[0m"
232
199
  end
233
200
  rescue Serfx::RPCError => e
@@ -240,7 +207,7 @@ command :system do |system|
240
207
 
241
208
  if $config['role'] != 'sled'
242
209
  begin
243
- Serfx.connect(host: $config['system']['serf']['global']['ip'], port: $config['system']['serf']['global']['port'], authkey:$config['system']['serf']['global']['auth']) do |conn|
210
+ Serfx.connect(host: $config['serf']['global']['rpc_ip'], port: $config['serf']['global']['rpc_port'], authkey:$config['serf']['global']['rpc_auth']) do |conn|
244
211
  result = (conn.members.body['Members'].length > 1) ? "OK" : "\033[31mFAIL\033[0m"
245
212
  end
246
213
  rescue Serfx::RPCError => e
@@ -251,54 +218,69 @@ command :system do |system|
251
218
  puts "Serf Global Cluster - connected and has more than one member - [#{result}]"
252
219
  end
253
220
 
254
- raise "Pipeline node #{$config['node']} is likely unstable" unless success == true
221
+ node_name = ($config['role'] == 'sled') ? $config['serf']['local']['node_name'] : $config['serf']['global']['node_name']
222
+
223
+ raise "Pipeline node #{node_name} is likely unstable" unless success == true
255
224
  end
256
225
  end
257
226
 
258
- pre do |global,command,options,args|
259
- $config = nil
260
- begin
261
- $config = YAML.load_file(File.join(Dir.home, '.mtncdconf'))
262
- rescue
263
- raise "Missing #{File.join(Dir.home, '.mtncdconf')}"
264
- end
227
+ desc 'resque information'
228
+ command :resque do |resque|
229
+ resque.desc 'resque information'
230
+ resque.command :info do |info|
231
+ info.action do |global_options,options,args|
232
+ Resque.redis = "#{$config['resque']['redis_ip']}:#{$config['resque']['redis_port']}/#{$config['resque']['redis_db']}"
233
+
234
+ # get the queues
235
+ queues = Resque.queues
236
+ puts "Resque queues: #{queues.inspect}"
237
+ queues.each do |queue|
238
+ puts "Jobs in queue #{queue}: #{Resque.size(queue)}"
239
+ queued_jobs = Resque.peek(queue)
240
+ unless queued_jobs.nil?
241
+ Resque.peek(queue, 0, Resque.size(queue)).each { |job|
242
+ puts job
243
+ }
244
+ end
245
+ end
265
246
 
266
- # check the file
267
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['node'].nil?
268
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['role'].nil?
269
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy'].nil?
270
-
271
- if $config['role'] == 'central' || $config['role'] == 'ship' || $config['role'] == 'zi'
272
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['global'].nil?
273
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['global']['stop'].nil?
274
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['global']['start'].nil?
275
- end
247
+ puts "All worker info:"
248
+ Resque::Worker.all.each { |worker|
249
+ puts "Worker #{worker.to_s} assigned to queue #{worker.queues}"
250
+ }
276
251
 
277
- if $config['role'] == 'ship' || $config['role'] == 'sled'
278
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['local'].nil?
279
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['local']['stop'].nil?
280
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['deploy']['local']['start'].nil?
252
+ puts "Currently processing workers:"
253
+ Resque::Worker.working.each { |worker|
254
+ puts "Worker #{worker.to_s} processing job #{worker.job}"
255
+ }
256
+ end
257
+ end
258
+
259
+ resque.desc 'flush redis (destructive)'
260
+ resque.command :flush do |flush|
261
+ flush.action do |global_options,options,args|
262
+ redis = Redis.new(:host => $config['resque']['redis_ip'], :port => $config['resque']['redis_port'], :db => $config['resque']['redis_db'])
263
+
264
+ res = ask("Enter 'flush' to continue or anything else to cancel.")
265
+ if res == 'flush'
266
+ redis.flushall
267
+ else
268
+ puts 'Cancelled'
269
+ end
270
+ end
281
271
  end
282
-
283
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system'].nil?
284
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['resque'].nil?
285
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['resque']['workers'].nil?
286
-
287
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['redis'].nil?
288
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['redis']['ip'].nil?
289
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['redis']['port'].nil?
290
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['redis']['db'].nil?
291
-
292
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf'].nil?
293
- if $config['role'] == 'central' || $config['role'] == 'ship' || $config['role'] == 'zi'
294
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['global'].nil?
295
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['global']['ip'].nil?
296
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['global']['port'].nil?
272
+ end
273
+
274
+
275
+ pre do |global,command,options,args|
276
+ $config = JSON.parse(File.read(File.join(Dir.home, '.cicdconfig')))
277
+
278
+ if $config['role'] == 'sled' && options[:cluster] == 'global'
279
+ raise 'global commands are not available on sled nodes'
297
280
  end
298
- if $config['role'] == 'ship' || $config['role'] == 'sled'
299
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['local'].nil?
300
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['local']['ip'].nil?
301
- raise "Invalid #{File.join(Dir.home, '.mtncdconf')}" if $config['system']['serf']['local']['port'].nil?
281
+
282
+ if $config['role'] == 'central' && options[:cluster] == 'local'
283
+ raise 'local commands are not available on central nodes'
302
284
  end
303
285
 
304
286
  true
@@ -311,9 +293,19 @@ post do |global,command,options,args|
311
293
  end
312
294
 
313
295
  on_error do |exception|
314
- # Error logic here
315
- # return false to skip default error handling
316
- true
296
+ case exception
297
+ when SystemCallError
298
+ $stderr.puts "Could not find pipeline configuration file at #{File.join(Dir.home, '.cicdconfig')}"
299
+ false
300
+ when JSON::ParserError
301
+ $stderr.puts "Configuration file at #{File.join(Dir.home, '.cicdconfig')} is not valid JSON"
302
+ false
303
+ when NoMethodError
304
+ $stderr.puts "Configuration file at #{File.join(Dir.home, '.cicdconfig')} is most likely missing required sections"
305
+ false
306
+ else
307
+ true
308
+ end
317
309
  end
318
310
 
319
311
  exit run(ARGV)
data/lib/mtncd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mtncd
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end
data/mtncd.gemspec CHANGED
@@ -21,6 +21,7 @@ spec = Gem::Specification.new do |s|
21
21
  s.add_dependency('msgpack', '0.5.9')
22
22
  s.add_dependency('awesome_print', '1.2.0')
23
23
  s.add_dependency('redis', '3.1.0')
24
+ s.add_dependency('highline', '1.6.21')
24
25
  s.add_development_dependency('rake')
25
26
  s.add_development_dependency('rdoc')
26
27
  s.add_development_dependency('aruba')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtncd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - MTN Satellite Communications
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-19 00:00:00.000000000 Z
11
+ date: 2015-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: resque
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.1.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: highline
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.6.21
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.6.21
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rake
85
99
  requirement: !ruby/object:Gem::Requirement