ubalo 0.21 → 0.22

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.
data/bin/ubalo CHANGED
@@ -21,9 +21,8 @@ end
21
21
 
22
22
  use_openstruct true
23
23
 
24
-
25
24
  def logger
26
- @logger ||= Ubalo::Util::Logger.new
25
+ @logger ||= Ubalo::Util::Logger.new $stdin.tty?
27
26
  end
28
27
 
29
28
  def connect_url
@@ -180,7 +179,6 @@ command :run do |c|
180
179
  c.action do |global_options,options,args|
181
180
  task = pod.run(options.v2 || pod_dir.v2?, args, options.arg)
182
181
  task.tail_process
183
- puts task.printable_result
184
182
  end
185
183
  end
186
184
 
@@ -205,7 +203,6 @@ command :submit do |c|
205
203
 
206
204
  c.action do |global_options,options,args|
207
205
  task = pod.run(pod_dir.v2?, args, options.arg)
208
- logger.puts " done."
209
206
  puts task.printable_result
210
207
  end
211
208
  end
@@ -249,8 +246,6 @@ command 'task:stop' do |c|
249
246
  end
250
247
 
251
248
  task.stop!
252
- task.tail_process
253
- puts task.printable_result
254
249
  end
255
250
  end
256
251
 
@@ -259,11 +254,7 @@ command :push do |c|
259
254
  c.switch :detached
260
255
 
261
256
  c.action do |global_options,options,args|
262
- pod.push_from(pod_dir)
263
- unless options.detached
264
- pod.tail_process
265
- end
266
- puts pod.printable_result
257
+ pod.push_from(pod_dir, options.detached)
267
258
  end
268
259
  end
269
260
 
@@ -274,21 +265,15 @@ command 'push-run' do |c|
274
265
 
275
266
  c.action do |global_options,options,args|
276
267
  pod.push_from(pod_dir)
277
- pod.tail_process
278
- puts pod.printable_result
279
-
280
268
  task = pod.run(options.v2 || pod_dir.v2?, args, options.arg)
281
269
  task.tail_process
282
- puts task.printable_result
283
270
  end
284
271
  end
285
272
 
286
- desc 'Cancel a pod compilation'
287
- command 'push:cancel' do |c|
273
+ desc 'Stop a pod compilation'
274
+ command 'push:stop' do |c|
288
275
  c.action do |global_options,options,args|
289
- pod.cancel_push!
290
- pod.tail_process
291
- puts pod.printable_result
276
+ pod.stop!
292
277
  end
293
278
  end
294
279
 
@@ -23,18 +23,10 @@ module Ubalo
23
23
  @output = attributes.fetch('output')
24
24
  end
25
25
 
26
- def tail(running_message, final_message)
27
- tailer = Ubalo::Tailer.new(logger)
26
+ def tail(tailer, message)
28
27
  logger.poll do
28
+ tailer.update(message, @output)
29
29
  yield
30
-
31
- message = "(#{runtime}) #{running_message}..."
32
- if completed?
33
- message << "#{final_message}. Exit status: #{exit_result}"
34
- end
35
-
36
- tailer.update(@output, message)
37
- completed?
38
30
  end
39
31
  end
40
32
 
@@ -50,10 +42,6 @@ module Ubalo
50
42
  s
51
43
  end
52
44
 
53
- def completed?
54
- @state == 'complete'
55
- end
56
-
57
45
  def runtime
58
46
  if @started_at
59
47
  seconds = ((@stopped_at || DateTime.now) - @started_at) * 86400
data/lib/ubalo/pod.rb CHANGED
@@ -47,8 +47,6 @@ module Ubalo
47
47
  argv = ["sh", "run.sh"]
48
48
  end
49
49
 
50
- logger.print "Running #{Shellwords.join(argv)} inside #{fullname}..."
51
-
52
50
  params = {
53
51
  :arg_content_type => UbaloJSON.content_type,
54
52
  :arg => UbaloJSON.dump(arg),
@@ -56,8 +54,6 @@ module Ubalo
56
54
  }
57
55
  task = @account.task_from_json(request(:post, "/tasks", :params => params))
58
56
 
59
- logger.puts " done."
60
-
61
57
  task
62
58
  rescue RestClient::Conflict
63
59
  raise Ubalo::Error, "Cannot run pod while compiling"
@@ -73,20 +69,44 @@ module Ubalo
73
69
  end
74
70
  end
75
71
 
76
- def push_from(pod_dir)
77
- logger.print "Pushing files to #{fullname.inspect}..."
72
+ def push_from(pod_dir, detached=false)
73
+ tailer = Ubalo::TimedTailer.new(logger)
74
+ tailer.update("Pushing files to #{fullname}...")
78
75
 
79
76
  pod_dir.assert_not_empty!
77
+
80
78
  update!
81
79
  new_archive.activate_from(pod_dir)
82
- refresh!
83
80
 
84
- logger.puts " done."
81
+
82
+ logger.poll do
83
+ tailer.update("Pushed files. Waiting to build #{fullname}...")
84
+ refresh!
85
+ return if detached
86
+ compilation_process
87
+ end
88
+
89
+ compilation_process.tail(tailer, "Pushed files. Building #{fullname}...") do
90
+ refresh!
91
+ compiled?
92
+ end
93
+
94
+ tailer.update("Pushed #{fullname}. Exit code: #{compilation_process.exit_result}.\n")
85
95
  end
86
96
 
87
- def cancel_push!
97
+ def stop!
98
+ tailer = Ubalo::TimedTailer.new(logger)
99
+
100
+ tailer.update("Stopping #{fullname}...")
88
101
  request(:put, "/stop")
89
- refresh!
102
+
103
+ logger.poll do
104
+ tailer.update("Stopping #{fullname}...")
105
+ refresh!
106
+ compiled?
107
+ end
108
+
109
+ tailer.update("Stopped #{fullname}. Compilation exit code: #{compilation_process.exit_result}.\n")
90
110
  end
91
111
 
92
112
  def clone_to(pod_dir)
@@ -99,23 +119,6 @@ module Ubalo
99
119
  state == 'compiled'
100
120
  end
101
121
 
102
- def tail_process
103
- logger.poll_on("Waiting for process to start") do
104
- refresh!
105
- compilation_process
106
- end
107
-
108
- logger.puts "Compilation process output:"
109
- compilation_process.tail("Compiling #{fullname}", "compiled") do
110
- refresh!
111
- end
112
-
113
- logger.poll_on("Waiting for container to stop") do
114
- refresh!
115
- compiled?
116
- end
117
- end
118
-
119
122
  def delete!
120
123
  request(:delete, nil, :parse => false)
121
124
  @deleted = true
data/lib/ubalo/tailer.rb CHANGED
@@ -3,30 +3,48 @@ module Ubalo
3
3
  def initialize(logger)
4
4
  @logger = logger
5
5
  @output_position = 0
6
- @lines = 0
7
6
  end
8
7
 
9
- def update(output, message)
10
- @lines.times do
11
- @logger.print "\e[A"
8
+ def tty?
9
+ @logger.tty?
10
+ end
11
+
12
+ def update(message, output=nil)
13
+ # Erase current line.
14
+ if tty?
15
+ @logger.print "\r"
12
16
  @logger.print " " * Integer(ENV.fetch("COLUMNS", 80))
13
17
  @logger.print "\r"
14
18
  end
15
19
 
16
- @lines = 0
17
-
18
20
  if output
19
21
  @logger.print output[@output_position..-1]
20
22
  @output_position = output.length
21
23
  end
22
24
 
23
- puts ""
24
- puts message
25
+ if tty?
26
+ @logger.print Color.blue(wrap(message))
27
+ else
28
+ @logger.puts wrap(message)
29
+ end
30
+ end
31
+
32
+ private
33
+ def wrap(message)
34
+ message
35
+ end
36
+ end
37
+
38
+ class TimedTailer < Tailer
39
+ def initialize(logger)
40
+ @start_time = Time.now
41
+ super
25
42
  end
26
43
 
27
- def puts(str)
28
- @lines += 1
29
- @logger.puts str
44
+ private
45
+ def wrap(message)
46
+ seconds = Time.now - @start_time
47
+ "(%.1f s) #{message}" % seconds
30
48
  end
31
49
  end
32
50
  end
data/lib/ubalo/task.rb CHANGED
@@ -27,25 +27,35 @@ module Ubalo
27
27
  end
28
28
 
29
29
  def tail_process
30
- logger.poll_on("Waiting for process to start") do
31
- refresh!
32
- container_process
33
- end
30
+ tailer = Ubalo::TimedTailer.new(logger)
34
31
 
35
- puts "Task process output:"
36
- container_process.tail("Running #{label.inspect}", "completed") do
32
+ logger.poll do
33
+ tailer.update("Starting...")
37
34
  refresh!
35
+ container_process
38
36
  end
39
37
 
40
- logger.poll_on("Waiting for container to stop") do
38
+ container_process.tail(tailer, "Running #{label}...") do
41
39
  refresh!
42
40
  complete?
43
41
  end
42
+
43
+ tailer.update("Completed #{label}. Exit code: #{container_process.exit_result}.\n")
44
44
  end
45
45
 
46
46
  def stop!
47
+ tailer = Ubalo::TimedTailer.new(logger)
48
+
49
+ tailer.update("Stopping #{label}...")
47
50
  request(:put, "/stop")
48
- refresh!
51
+
52
+ logger.poll do
53
+ tailer.update("Stopping #{label}...")
54
+ refresh!
55
+ complete?
56
+ end
57
+
58
+ tailer.update("Stopped #{label}. Exit code: #{container_process.exit_result}.\n")
49
59
  end
50
60
 
51
61
  def inspect
data/lib/ubalo/util.rb CHANGED
@@ -19,8 +19,13 @@ module Ubalo
19
19
  end
20
20
 
21
21
  class Logger
22
- def initialize
22
+ def initialize tty
23
23
  @incomplete_line = false
24
+ @tty = tty
25
+ end
26
+
27
+ def tty?
28
+ @tty
24
29
  end
25
30
 
26
31
  def print(str)
@@ -28,7 +33,7 @@ module Ubalo
28
33
  $stderr.print(str)
29
34
  end
30
35
 
31
- def puts(str)
36
+ def puts(str="")
32
37
  @incomplete_line = false
33
38
  $stderr.print(str + "\n")
34
39
  end
@@ -72,11 +77,7 @@ module Ubalo
72
77
  end
73
78
 
74
79
  def put_targz(url, archive_name)
75
- response = RestClient.put(url, File.open(archive_name, 'rb'), :content_type => 'application/x-tar', :content_encoding => 'x-gzip')
76
-
77
- unless response.code == 200
78
- raise Ubalo::Error, "could not upload pod files"
79
- end
80
+ RestClient.put(url, File.open(archive_name, 'rb'), :content_type => 'application/x-tar', :content_encoding => 'x-gzip')
80
81
  end
81
82
 
82
83
  def get_targz(url, archive_name)
@@ -86,7 +87,7 @@ module Ubalo
86
87
  f.write response
87
88
  end
88
89
  else
89
- raise Ubalo::Error, "failed to download pod files"
90
+ raise Ubalo::Error, "failed to download pod files: error #{response.code.inspect}"
90
91
  end
91
92
  end
92
93
  end
@@ -163,4 +164,19 @@ module Ubalo
163
164
  end
164
165
  end
165
166
  end
167
+
168
+ module Color
169
+ COLORS = {clear: 0, red: 31, green: 32, yellow: 33, blue: 34, gray: 30, grey: 30}
170
+ def self.method_missing(color_name, *args)
171
+ if args.first.is_a? String
172
+ color(color_name) + args.first + color(:clear)
173
+ else
174
+ color(color_name) + args.first.inspect + color(:clear)
175
+ end
176
+ end
177
+
178
+ def self.color(color)
179
+ "\e[#{COLORS[color.to_sym]}m"
180
+ end
181
+ end
166
182
  end
data/lib/ubalo/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Ubalo
2
2
  unless const_defined?('VERSION')
3
- VERSION = "0.21"
3
+ VERSION = "0.22"
4
4
  end
5
5
 
6
6
  def self.version
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ubalo
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.21'
4
+ version: '0.22'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-11 00:00:00.000000000 Z
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gli
16
- requirement: &70247164806420 !ruby/object:Gem::Requirement
16
+ requirement: &70151076782260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70247164806420
24
+ version_requirements: *70151076782260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &70247164806000 !ruby/object:Gem::Requirement
27
+ requirement: &70151076781820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70247164806000
35
+ version_requirements: *70151076781820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &70247164805520 !ruby/object:Gem::Requirement
38
+ requirement: &70151076781260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70247164805520
46
+ version_requirements: *70151076781260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rest-client
49
- requirement: &70247164804960 !ruby/object:Gem::Requirement
49
+ requirement: &70151076780740 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.6.3
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70247164804960
57
+ version_requirements: *70151076780740
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: archive-tar-minitar
60
- requirement: &70247164804200 !ruby/object:Gem::Requirement
60
+ requirement: &70151076780320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70247164804200
68
+ version_requirements: *70151076780320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: launchy
71
- requirement: &70247164803160 !ruby/object:Gem::Requirement
71
+ requirement: &70151076779840 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70247164803160
79
+ version_requirements: *70151076779840
80
80
  description: CLI and API client for Ubalo
81
81
  email: dev@ubalo.com
82
82
  executables: