buildbox 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/buildbox.rb +2 -1
- data/lib/buildbox/build.rb +11 -5
- data/lib/buildbox/client.rb +1 -1
- data/lib/buildbox/command.rb +5 -0
- data/lib/buildbox/observer.rb +59 -0
- data/lib/buildbox/version.rb +1 -1
- data/lib/buildbox/{queue.rb → worker.rb} +2 -9
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ae40618215e45c8217f4089029f72106f0b3201
|
4
|
+
data.tar.gz: cba478aafb75089f7796eb58b36ebbe7058533b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f59b811b325337a6a3b0686358915e643d3dc2fe5d6ef5808ef946bfbfdb0f054d8145a0cfbf9b09ba4ea5d7de071c613c84ed5c2a99379f948814c8d87cf09
|
7
|
+
data.tar.gz: 7553cc4351956d502101f57a0827f02ab33bc346b6c89614fc003f4d7223a5bf3deaf5cd78f0e268526acc159e013e9adfeccb3df36a9a251384ce532cd056e8
|
data/lib/buildbox.rb
CHANGED
@@ -5,11 +5,12 @@ require "buildbox/build"
|
|
5
5
|
require "buildbox/version"
|
6
6
|
require "buildbox/client"
|
7
7
|
require "buildbox/api"
|
8
|
-
require "buildbox/
|
8
|
+
require "buildbox/worker"
|
9
9
|
require "buildbox/pid_file"
|
10
10
|
require "buildbox/configuration"
|
11
11
|
require "buildbox/auth"
|
12
12
|
require "buildbox/response"
|
13
|
+
require "buildbox/observer"
|
13
14
|
|
14
15
|
module Buildbox
|
15
16
|
require 'fileutils'
|
data/lib/buildbox/build.rb
CHANGED
@@ -9,8 +9,8 @@ module Buildbox
|
|
9
9
|
@config = options[:config]
|
10
10
|
end
|
11
11
|
|
12
|
-
def start(
|
13
|
-
@
|
12
|
+
def start(observer = nil)
|
13
|
+
@observer = observer
|
14
14
|
|
15
15
|
unless build_path.exist?
|
16
16
|
setup_build_path
|
@@ -52,13 +52,19 @@ module Buildbox
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def run(command)
|
55
|
-
path
|
55
|
+
path = build_path if build_path.exist?
|
56
|
+
started = false
|
56
57
|
|
57
58
|
result = Buildbox::Command.new(path).run(command) do |result, chunk|
|
58
|
-
|
59
|
+
if started
|
60
|
+
@observer.chunk(result)
|
61
|
+
else
|
62
|
+
@observer.started(result)
|
63
|
+
started = true
|
64
|
+
end
|
59
65
|
end
|
60
66
|
|
61
|
-
@
|
67
|
+
@observer.finished(result)
|
62
68
|
|
63
69
|
result
|
64
70
|
end
|
data/lib/buildbox/client.rb
CHANGED
data/lib/buildbox/command.rb
CHANGED
@@ -15,6 +15,11 @@ module Buildbox
|
|
15
15
|
read_io, write_io, pid = nil
|
16
16
|
result = Buildbox::Result.new(command)
|
17
17
|
|
18
|
+
# hack: this is so the observer class can raise a started event.
|
19
|
+
# instead of having a block passed to this command, we should implement
|
20
|
+
# a proper command observer
|
21
|
+
yield result
|
22
|
+
|
18
23
|
begin
|
19
24
|
dir = File.expand_path(@path)
|
20
25
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Buildbox
|
2
|
+
class Observer
|
3
|
+
INTERVAL = 3 # feels like a good number
|
4
|
+
|
5
|
+
def initialize(api, build_uuid)
|
6
|
+
@api = api
|
7
|
+
@build_uuid = build_uuid
|
8
|
+
|
9
|
+
@queue = Queue.new
|
10
|
+
@results = {}
|
11
|
+
@threads = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def started(result)
|
15
|
+
@results[result.uuid] = result
|
16
|
+
|
17
|
+
update(result.uuid)
|
18
|
+
end
|
19
|
+
|
20
|
+
def chunk(result)
|
21
|
+
update_on_interval(result.uuid)
|
22
|
+
end
|
23
|
+
|
24
|
+
def finished(result)
|
25
|
+
# kill off the interval updater
|
26
|
+
thread = @threads[result.uuid]
|
27
|
+
thread.kill if thread && thread.alive?
|
28
|
+
|
29
|
+
update(result.uuid)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# every INTERVAL seconds, read from the result and update the server with the output.
|
35
|
+
# if we don't do updates every INTERVAL like this, then we end up spamming the server
|
36
|
+
# with every chunk we get from the command runner (which ends up being every line), and in the case
|
37
|
+
# of a bundle install for example, it may have 100 lines, we end up doing 100 updates to the server.
|
38
|
+
def update_on_interval(uuid)
|
39
|
+
return if @threads[uuid]
|
40
|
+
|
41
|
+
@threads[uuid] = Thread.new do
|
42
|
+
loop do
|
43
|
+
update(uuid)
|
44
|
+
sleep INTERVAL
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
@threads[uuid].abort_on_exception = true
|
49
|
+
end
|
50
|
+
|
51
|
+
def update(uuid)
|
52
|
+
result = @results[uuid]
|
53
|
+
json = result.as_json
|
54
|
+
json[:state] = json.delete(:finished) ? 'finished' : 'started'
|
55
|
+
|
56
|
+
@api.update_build_result_async(@build_uuid, json.delete(:uuid), json)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/buildbox/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Buildbox
|
2
|
-
class
|
2
|
+
class Worker
|
3
3
|
def process
|
4
4
|
if scheduled = api.builds.payload.first
|
5
5
|
start Build.new(scheduled)
|
@@ -10,14 +10,7 @@ module Buildbox
|
|
10
10
|
|
11
11
|
def start(build)
|
12
12
|
api.update_build_state(build.uuid, 'started')
|
13
|
-
|
14
|
-
build.start do |result|
|
15
|
-
json = result.as_json
|
16
|
-
json[:state] = json.delete(:finished) ? 'finished' : 'started'
|
17
|
-
|
18
|
-
api.update_build_result_async(build.uuid, json.delete(:uuid), json)
|
19
|
-
end
|
20
|
-
|
13
|
+
build.start Buildbox::Observer.new(api, build.uuid)
|
21
14
|
api.update_build_state_async(build.uuid, 'finished')
|
22
15
|
end
|
23
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Pitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,12 +90,13 @@ files:
|
|
90
90
|
- lib/buildbox/client.rb
|
91
91
|
- lib/buildbox/command.rb
|
92
92
|
- lib/buildbox/configuration.rb
|
93
|
+
- lib/buildbox/observer.rb
|
93
94
|
- lib/buildbox/pid_file.rb
|
94
|
-
- lib/buildbox/queue.rb
|
95
95
|
- lib/buildbox/response.rb
|
96
96
|
- lib/buildbox/result.rb
|
97
97
|
- lib/buildbox/utf8.rb
|
98
98
|
- lib/buildbox/version.rb
|
99
|
+
- lib/buildbox/worker.rb
|
99
100
|
- spec/buildbox/buildbox/build_spec.rb
|
100
101
|
- spec/buildbox/buildbox/command_spec.rb
|
101
102
|
- spec/buildbox/buildbox/configuration_spec.rb
|