mtncd 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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