ampel_extase 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/ampel_extase.gemspec +6 -6
- data/bin/ampel_control +5 -2
- data/lib/ampel_extase/controller.rb +11 -0
- data/lib/ampel_extase/jenkins_multi_state_observer.rb +21 -0
- data/lib/ampel_extase/jenkins_state_observer.rb +15 -4
- data/lib/ampel_extase/version.rb +1 -1
- data/spec/ampel_extase/controller_spec.rb +22 -0
- data/spec/ampel_extase/jekins_state_observer_spec.rb +17 -1
- data/spec/ampel_extase/jenkins_client_spec.rb +4 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae6a5d724b7c06425fca0953f0e8035cd802f492
|
4
|
+
data.tar.gz: c8b9a89b451637c118264ed8988e5302178d261b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85e5bc084b1e0ba6bcaf5293c77b854bbd557c444f6e3e55a4b642395902f689abadf60979f0740cbcb88c7842b82e0121391f280cd8798109f66f41b21ae5df
|
7
|
+
data.tar.gz: c97d946b4225c5a50392d6dc8a7739b5da698c68c8e9d11ffabc3ec2d6d6abed207a0b50a32b7d6de2f6273bb05fad513382e89f267f5a86d77cf3161321428a
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/ampel_extase.gemspec
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: ampel_extase 0.
|
2
|
+
# stub: ampel_extase 0.4.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "ampel_extase"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.4.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Florian Frank"]
|
11
|
-
s.date = "2015-08-
|
11
|
+
s.date = "2015-08-26"
|
12
12
|
s.description = "Library to control the build traffic light. Yes, we can\u{2026}"
|
13
13
|
s.email = "flori@ping.de"
|
14
14
|
s.executables = ["ampel_control"]
|
15
|
-
s.extra_rdoc_files = ["README.md", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb"]
|
16
|
-
s.files = [".gitignore", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "ampel_extase.gemspec", "bin/ampel_control", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb", "spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
15
|
+
s.extra_rdoc_files = ["README.md", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_multi_state_observer.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb"]
|
16
|
+
s.files = [".gitignore", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "ampel_extase.gemspec", "bin/ampel_control", "lib/ampel_extase.rb", "lib/ampel_extase/build_state.rb", "lib/ampel_extase/controller.rb", "lib/ampel_extase/jenkins_client.rb", "lib/ampel_extase/jenkins_multi_state_observer.rb", "lib/ampel_extase/jenkins_state_observer.rb", "lib/ampel_extase/light_switcher.rb", "lib/ampel_extase/version.rb", "spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
17
17
|
s.homepage = "http://github.com/flori/ampel_extase"
|
18
18
|
s.licenses = ["GPL-2"]
|
19
19
|
s.rdoc_options = ["--title", "AmpelExtase - Library to control the build traffic light", "--main", "README.md"]
|
20
|
-
s.rubygems_version = "2.4.
|
20
|
+
s.rubygems_version = "2.4.8"
|
21
21
|
s.summary = "Library to control the build traffic light"
|
22
22
|
s.test_files = ["spec/ampel_extase/build_state_spec.rb", "spec/ampel_extase/controller_spec.rb", "spec/ampel_extase/jekins_state_observer_spec.rb", "spec/ampel_extase/jenkins_client_spec.rb", "spec/ampel_extase/light_switcher_spec.rb", "spec/spec_helper.rb"]
|
23
23
|
|
data/bin/ampel_control
CHANGED
@@ -2,8 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'ampel_extase'
|
4
4
|
|
5
|
-
serial
|
6
|
-
|
5
|
+
serial =
|
6
|
+
unless ENV['DEMO']
|
7
|
+
serial = ENV['SERIAL'].full? or
|
8
|
+
fail 'need env var SERIAL for path to serial port'
|
9
|
+
end
|
7
10
|
jenkins_url = ENV['JENKINS_URL'].full? or
|
8
11
|
fail 'need env var JENKINS_URL of the form http://test2.local:8080/job/foo'
|
9
12
|
warning_jenkins_url = ENV['WARNING_JENKINS_URL'].full?
|
@@ -63,6 +63,7 @@ class AmpelExtase::Controller
|
|
63
63
|
@warning_jenkins.on_state_change do |state|
|
64
64
|
perform_warning state
|
65
65
|
end
|
66
|
+
expire_warning
|
66
67
|
end
|
67
68
|
|
68
69
|
def perform_lights_switch(state)
|
@@ -99,6 +100,13 @@ class AmpelExtase::Controller
|
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
103
|
+
def expire_warning
|
104
|
+
if Time.now > @warning_jenkins.state_changed_at + 6 * @sleep
|
105
|
+
@lights.aux.off
|
106
|
+
puts info('WARNING EXPIRED')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
102
110
|
def success(message)
|
103
111
|
green message
|
104
112
|
end
|
@@ -111,6 +119,9 @@ class AmpelExtase::Controller
|
|
111
119
|
green on_red message
|
112
120
|
end
|
113
121
|
|
122
|
+
def info(message)
|
123
|
+
yellow message
|
124
|
+
end
|
114
125
|
def switch_all_lights_off
|
115
126
|
@lights.each(&:off)
|
116
127
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'ampel_extase/jenkins_state_observer'
|
2
|
+
|
3
|
+
class AmpelExtase::JenkinsMultiStateObserver
|
4
|
+
def self.for_urls(*jenkins_urls)
|
5
|
+
new jenkins_urls.map { |jenkins_url| AmpelExtase::JenkinsStateObserver.new(jenkins_url) }
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(observers)
|
9
|
+
@observers = observers
|
10
|
+
end
|
11
|
+
|
12
|
+
def check
|
13
|
+
@observers.each(&:check)
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_state_change(&block)
|
17
|
+
@observers.each do |o|
|
18
|
+
o.on_state_change(&block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -13,13 +13,14 @@ class AmpelExtase::JenkinsStateObserver
|
|
13
13
|
|
14
14
|
def initialize(jenkins)
|
15
15
|
@jenkins = jenkins
|
16
|
-
|
16
|
+
set_state AmpelExtase::BuildState.for
|
17
17
|
check
|
18
18
|
end
|
19
19
|
|
20
20
|
def check
|
21
21
|
puts "checking jenkins configuration for #{@jenkins.url.to_s.inspect}"
|
22
22
|
@jenkins.fetch and puts "OK"
|
23
|
+
self
|
23
24
|
end
|
24
25
|
|
25
26
|
def last_result
|
@@ -34,15 +35,25 @@ class AmpelExtase::JenkinsStateObserver
|
|
34
35
|
new_state != @build_state
|
35
36
|
end
|
36
37
|
|
38
|
+
def set_state(state)
|
39
|
+
@build_state = state
|
40
|
+
@state_changed_at = Time.now
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
attr_reader :state_changed_at
|
45
|
+
|
37
46
|
def on_state_change
|
38
47
|
new_state = AmpelExtase::BuildState.for [ last_result, building? ]
|
39
48
|
if state_changed?(new_state)
|
40
49
|
puts "state changed from #@build_state to #{new_state} => taking action"
|
41
|
-
|
50
|
+
begin
|
51
|
+
yield new_state
|
52
|
+
ensure
|
53
|
+
set_state new_state
|
54
|
+
end
|
42
55
|
else
|
43
56
|
puts "state did not change, is still #@build_state => do nothing"
|
44
57
|
end
|
45
|
-
ensure
|
46
|
-
@build_state = new_state
|
47
58
|
end
|
48
59
|
end
|
data/lib/ampel_extase/version.rb
CHANGED
@@ -223,4 +223,26 @@ describe AmpelExtase::Controller do
|
|
223
223
|
end
|
224
224
|
end
|
225
225
|
end
|
226
|
+
|
227
|
+
describe '#expire_warning' do
|
228
|
+
let :aux do
|
229
|
+
double('Device')
|
230
|
+
end
|
231
|
+
|
232
|
+
before do
|
233
|
+
controller.instance_variable_set :@lights, double('Lights', aux: aux)
|
234
|
+
end
|
235
|
+
|
236
|
+
let :expire_warning do
|
237
|
+
controller.instance_eval { expire_warning }
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'expires warnings after some time' do
|
241
|
+
allow(controller.instance_variable_get(:@warning_jenkins)).to\
|
242
|
+
receive(:state_changed_at).and_return Time.now - 65
|
243
|
+
expect(aux).to receive(:off)
|
244
|
+
expect(controller).to receive(:info).with('WARNING EXPIRED').and_call_original
|
245
|
+
expire_warning
|
246
|
+
end
|
247
|
+
end
|
226
248
|
end
|
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe AmpelExtase::JenkinsStateObserver do
|
4
|
+
before do
|
5
|
+
allow_any_instance_of(AmpelExtase::JenkinsClient).to receive(:puts)
|
6
|
+
allow_any_instance_of(AmpelExtase::JenkinsStateObserver).to receive(:puts)
|
7
|
+
end
|
8
|
+
|
4
9
|
let :client do
|
5
10
|
double('AmpelExtase::JenkinsClient', url: 'http://foo/bar')
|
6
11
|
end
|
@@ -71,7 +76,11 @@ describe AmpelExtase::JenkinsStateObserver do
|
|
71
76
|
end
|
72
77
|
|
73
78
|
it 'tracks changes in build state' do
|
79
|
+
Time.dummy(past = Time.now - 10) do
|
80
|
+
jso
|
81
|
+
end
|
74
82
|
expect(jso.instance_variable_get(:@build_state)).to eq bs_initial
|
83
|
+
expect(jso.state_changed_at).to eq past
|
75
84
|
allow(client).to receive(:fetch_build).with(:last_completed_build).
|
76
85
|
and_return('result' => 'SUCCESS')
|
77
86
|
allow(client).to receive(:fetch_build).with(:last_build).
|
@@ -80,8 +89,15 @@ describe AmpelExtase::JenkinsStateObserver do
|
|
80
89
|
"state changed from N/A to SUCCESS (building) => "\
|
81
90
|
"taking action"
|
82
91
|
)
|
83
|
-
|
92
|
+
now = nil
|
93
|
+
Time.dummy(Time.now) do
|
94
|
+
expect { |b|
|
95
|
+
jso.on_state_change(&b)
|
96
|
+
now = Time.now
|
97
|
+
}.to yield_with_args(bs_success)
|
98
|
+
end
|
84
99
|
expect(jso.instance_variable_get(:@build_state)).to eq bs_success
|
100
|
+
expect(jso.state_changed_at).to eq now
|
85
101
|
allow(client).to receive(:fetch_build).with(:last_completed_build).
|
86
102
|
and_return('result' => 'FAILURE')
|
87
103
|
allow(client).to receive(:fetch_build).with(:last_build).
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ampel_extase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -119,6 +119,7 @@ extra_rdoc_files:
|
|
119
119
|
- lib/ampel_extase/build_state.rb
|
120
120
|
- lib/ampel_extase/controller.rb
|
121
121
|
- lib/ampel_extase/jenkins_client.rb
|
122
|
+
- lib/ampel_extase/jenkins_multi_state_observer.rb
|
122
123
|
- lib/ampel_extase/jenkins_state_observer.rb
|
123
124
|
- lib/ampel_extase/light_switcher.rb
|
124
125
|
- lib/ampel_extase/version.rb
|
@@ -135,6 +136,7 @@ files:
|
|
135
136
|
- lib/ampel_extase/build_state.rb
|
136
137
|
- lib/ampel_extase/controller.rb
|
137
138
|
- lib/ampel_extase/jenkins_client.rb
|
139
|
+
- lib/ampel_extase/jenkins_multi_state_observer.rb
|
138
140
|
- lib/ampel_extase/jenkins_state_observer.rb
|
139
141
|
- lib/ampel_extase/light_switcher.rb
|
140
142
|
- lib/ampel_extase/version.rb
|
@@ -168,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
170
|
version: '0'
|
169
171
|
requirements: []
|
170
172
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.4.
|
173
|
+
rubygems_version: 2.4.8
|
172
174
|
signing_key:
|
173
175
|
specification_version: 4
|
174
176
|
summary: Library to control the build traffic light
|