singularity-cli 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/singularity.rb +56 -23
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f917e15b139df05230f76923b7c1296caa65d62
4
- data.tar.gz: 230d2d431af444026ae30b1ece3e4fcdd65edca8
3
+ metadata.gz: ad0f8767080ab7ba91d8a934f7db17ebd2fa23e4
4
+ data.tar.gz: 41704c0d0db1765d77bd86fa38d7c79cdc2eb132
5
5
  SHA512:
6
- metadata.gz: f294ca9b8811d3a3092475baa0f302ffdb10c14a40866d556bb2d96e57e8421ed111b7c41ba2b5320693121e09e24783a3afd734294a805dba2d31ddcec86b59
7
- data.tar.gz: 79759aa9d74a1692304e4c5e738d69f0d13e26904dbc01b9665a74729d5b584786594182b1ac615e8657b5d455232c18742adb84954865ab12b8cf4f5afb1cea
6
+ metadata.gz: 90b4cd647f164706d0fb3704cada223c00e63d47ecff5ee944f0cc5dfb82a86f277194ad9d46ee79fcc1b1f999af9db8ad8e61fec6af3d201dd592f15c11d48d
7
+ data.tar.gz: 9db0a3293d747a622c0980160e2d1334871d49f4621cf07cbe98f661cf16a649dd713ead2d3a14f40f86ed3f4877f2e5ac8c9c727ad4d468c1b0395d337d6698
data/lib/singularity.rb CHANGED
@@ -178,8 +178,7 @@ module Singularity
178
178
  # get active tasks until ours shows up so we can get IP/PORT
179
179
  begin
180
180
  @thisTask = ''
181
- @tasks = RestClient.get "#{@uri}/api/tasks/active", :content_type => :json
182
- @tasks = JSON.parse(@tasks)
181
+ @tasks = JSON.parse(RestClient.get "#{@uri}/api/tasks/active", :content_type => :json)
183
182
  @tasks.each do |entry|
184
183
  if entry['taskRequest']['request']['id'] == @data['requestId']
185
184
  @thisTask = entry
@@ -195,31 +194,65 @@ module Singularity
195
194
  # this makes sure that the docker image has completely started and the SSH command succeeds
196
195
  where = Dir.pwd.split('/').last
197
196
  puts " Opening a shell to #{where}, please wait a moment...".light_blue
198
- puts " STDOUT / STDERR will print to console when session is over.".light_blue
199
197
  begin end until system "ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@#{@ip} -p #{@port}"
200
198
  else
201
199
  puts " Deployed and running #{@data['command']} #{@data['arguments']}".light_green
202
- end
200
+ print " STDOUT".light_cyan
201
+ print " and"
202
+ print " STDERR".light_magenta
203
+ puts ":"
203
204
 
204
- # need to wait for "task_finished" or "task_running & ssh" before we can ask for STDOUT/STDERR
205
- begin
206
- @taskState = RestClient.get "#{@uri}/api/history/task/#{@thisTask['taskId']['id']}"
207
- @taskState = JSON.parse(@taskState)
208
- @taskState["taskUpdates"].each do |update|
209
- @taskState = update['taskState']
210
- end
211
- end until @taskState == "TASK_FINISHED" || (@taskState == "TASK_RUNNING" and @script == "ssh")
212
-
213
- # output STDOUT / STDERR to shell
214
- puts ""
215
- stdout = RestClient.get "#{@uri}/api/sandbox/#{@thisTask['taskId']['id']}/read", {params: {path: "stdout", length: 30000, offset: 0}}
216
- stdout = JSON.parse(stdout)
217
- puts "stdout: ".cyan
218
- puts stdout['data'].light_cyan
219
- stderr = RestClient.get "#{@uri}/api/sandbox/#{@thisTask['taskId']['id']}/read", {params: {path: "stderr", length: 30000, offset: 0}}
220
- stderr = JSON.parse(stderr)
221
- puts "stderr: ".red
222
- puts stderr['data'].light_magenta
205
+ # output STDOUT / STDERR to shell
206
+ @stdoutOffset = 0
207
+ @stderrOffset = 0
208
+ @lastOutLine = ''
209
+ @lastErrLine = ''
210
+ begin
211
+ # get most recent task state
212
+ @taskState = JSON.parse(RestClient.get "#{@uri}/api/history/task/#{@thisTask['taskId']['id']}")
213
+ @taskState["taskUpdates"].each do |update|
214
+ @taskState = update['taskState']
215
+ end
216
+
217
+ # need to wait for "task_running" before we can ask for STDOUT/STDERR
218
+ if @taskState == "TASK_RUNNING"
219
+ @stdout = JSON.parse(RestClient.get "#{@uri}/api/sandbox/#{@thisTask['taskId']['id']}/read", {params: {path: "stdout", length: 30000, offset: @stdoutOffset}})['data']
220
+ @stdoutOffset += @stdout.length
221
+ @stdout = @stdout.split("\n")
222
+ if @stdout.any?
223
+ if @lastOutLine.include? @stdout[0]
224
+ @stdout.shift
225
+ end
226
+ if !@stdout.empty?
227
+ if @stdout[0].length > 0
228
+ @stdout.each do |i|
229
+ puts i.light_cyan
230
+ end
231
+ end
232
+ end
233
+ @lastOutLine = @stdout.last
234
+ end
235
+
236
+ @stderr = JSON.parse(RestClient.get "#{@uri}/api/sandbox/#{@thisTask['taskId']['id']}/read", {params: {path: "stderr", length: 30000, offset: @stderrOffset}})['data']
237
+ @stderrOffset += @stderr.length
238
+ @stderr = @stderr.split("\n")
239
+ if @stderr.any?
240
+ if @lastErrLine.include? @stderr[0]
241
+ @stderr.shift
242
+ end
243
+ if !@stderr.empty?
244
+ if @stderr[0].length > 0
245
+ @stderr.each do |i|
246
+ puts i.light_magenta
247
+ end
248
+ end
249
+ end
250
+ @lastErrLine = @stderr.last
251
+ end
252
+
253
+ end
254
+ end until @taskState == "TASK_FINISHED"
255
+ end
223
256
 
224
257
  # finally, delete the request (which also deletes the corresponding task)
225
258
  RestClient.delete "#{@uri}/api/requests/request/#{@data['requestId']}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: singularity-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Webb