rsmp 0.1.31 → 0.1.36
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 +4 -4
- data/Gemfile.lock +4 -4
- data/lib/rsmp/cli.rb +1 -1
- data/lib/rsmp/component.rb +5 -5
- data/lib/rsmp/components.rb +1 -1
- data/lib/rsmp/deep_merge.rb +1 -1
- data/lib/rsmp/proxy.rb +24 -12
- data/lib/rsmp/site.rb +21 -4
- data/lib/rsmp/site_proxy.rb +3 -3
- data/lib/rsmp/site_proxy_wait.rb +1 -36
- data/lib/rsmp/supervisor.rb +0 -1
- data/lib/rsmp/supervisor_proxy.rb +16 -3
- data/lib/rsmp/tlc.rb +2 -2
- data/lib/rsmp/version.rb +1 -1
- data/rsmp.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9146bde932fc22eeb1f696e9446d063cf98942afa46ef7a876a3ae9b5e3070a
|
4
|
+
data.tar.gz: 5044ef657416b04e1e6a519ded5d500d7fe6c98fcde4a1697a0e08a1540d5e3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d914ba6a4c7b2ba491999e16be4ae5d12b39ab30482952fec8b07e11ba1801f4bbc6623684c53d0d868258f60cb86b4ddc46cfd0235736d91889b0634516f9b8
|
7
|
+
data.tar.gz: a4d7f7fa683c31ed002d2a57c4f0a6f63f1bd99fd7703f25e72ce69d32073f1f19353476f91d7c597feb72ddcc4ff9b71e3108cf13e2bc7b9d0a1534115fcdf8
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rsmp (0.1.
|
4
|
+
rsmp (0.1.36)
|
5
5
|
async (~> 1.28.7)
|
6
6
|
async-io (~> 1.30.2)
|
7
7
|
colorize (~> 0.8.1)
|
8
|
-
rsmp_schemer
|
8
|
+
rsmp_schemer
|
9
9
|
thor (~> 1.0.1)
|
10
10
|
|
11
11
|
GEM
|
@@ -28,7 +28,7 @@ GEM
|
|
28
28
|
builder (3.2.4)
|
29
29
|
childprocess (3.0.0)
|
30
30
|
colorize (0.8.1)
|
31
|
-
console (1.
|
31
|
+
console (1.13.1)
|
32
32
|
fiber-local
|
33
33
|
contracts (0.16.0)
|
34
34
|
cucumber (3.1.2)
|
@@ -64,7 +64,7 @@ GEM
|
|
64
64
|
nio4r (2.5.7)
|
65
65
|
rake (13.0.1)
|
66
66
|
regexp_parser (2.1.1)
|
67
|
-
rsmp_schemer (0.
|
67
|
+
rsmp_schemer (0.3)
|
68
68
|
json_schemer (~> 0.2.18)
|
69
69
|
rspec (3.9.0)
|
70
70
|
rspec-core (~> 3.9.0)
|
data/lib/rsmp/cli.rb
CHANGED
@@ -30,8 +30,8 @@ module RSMP
|
|
30
30
|
end
|
31
31
|
|
32
32
|
if options[:supervisors]
|
33
|
+
settings['supervisors'] = []
|
33
34
|
options[:supervisors].split(',').each do |supervisor|
|
34
|
-
settings['supervisors'] = []
|
35
35
|
ip, port = supervisor.split ':'
|
36
36
|
ip = '127.0.0.1' if ip.empty?
|
37
37
|
port = '12111' if port.empty?
|
data/lib/rsmp/component.rb
CHANGED
@@ -28,7 +28,7 @@ module RSMP
|
|
28
28
|
@aggregated_status_bools[5] = true
|
29
29
|
end
|
30
30
|
|
31
|
-
def set_aggregated_status status
|
31
|
+
def set_aggregated_status status, options={}
|
32
32
|
status = [status] if status.is_a? Symbol
|
33
33
|
raise InvalidArgument unless status.is_a? Array
|
34
34
|
input = status & AGGREGATED_STATUS_KEYS
|
@@ -36,7 +36,7 @@ module RSMP
|
|
36
36
|
AGGREGATED_STATUS_KEYS.each_with_index do |key,index|
|
37
37
|
@aggregated_status_bools[index] = status.include?(key)
|
38
38
|
end
|
39
|
-
|
39
|
+
aggregated_status_changed options
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -50,12 +50,12 @@ module RSMP
|
|
50
50
|
@aggregated_status_bools[index] = on
|
51
51
|
@aggregated_status << key if on
|
52
52
|
end
|
53
|
-
|
53
|
+
aggregated_status_changed
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
58
|
-
@node.
|
57
|
+
def aggregated_status_changed options={}
|
58
|
+
@node.aggregated_status_changed self, options
|
59
59
|
end
|
60
60
|
|
61
61
|
def alarm code:, status:
|
data/lib/rsmp/components.rb
CHANGED
data/lib/rsmp/deep_merge.rb
CHANGED
data/lib/rsmp/proxy.rb
CHANGED
@@ -528,18 +528,6 @@ module RSMP
|
|
528
528
|
def version_acknowledged
|
529
529
|
end
|
530
530
|
|
531
|
-
def wait_for_acknowledgement original, timeout
|
532
|
-
raise ArgumentError unless original
|
533
|
-
wait_for(@acknowledgement_condition,timeout) do |message|
|
534
|
-
if message.is_a?(MessageNotAck) && message.attributes["oMId"] == original.m_id
|
535
|
-
raise RSMP::MessageRejected.new(message.attributes['rea'])
|
536
|
-
end
|
537
|
-
message.is_a?(MessageAck) && message.attributes["oMId"] == original.m_id
|
538
|
-
end
|
539
|
-
rescue Async::TimeoutError
|
540
|
-
raise RSMP::TimeoutError.new("Acknowledgement for #{original.type} #{original.m_id} not received within #{timeout}s")
|
541
|
-
end
|
542
|
-
|
543
531
|
def node
|
544
532
|
raise 'Must be overridden'
|
545
533
|
end
|
@@ -547,5 +535,29 @@ module RSMP
|
|
547
535
|
def author
|
548
536
|
node.site_id
|
549
537
|
end
|
538
|
+
|
539
|
+
def wait_for_acknowledgement parent_task, options={}, m_id
|
540
|
+
collect(parent_task,options.merge({
|
541
|
+
type: ['MessageAck','MessageNotAck'],
|
542
|
+
num: 1
|
543
|
+
})) do |message|
|
544
|
+
if message.is_a?(MessageNotAck)
|
545
|
+
if message.attribute('oMId') == m_id
|
546
|
+
# set result to an exception, but don't raise it.
|
547
|
+
# this will be returned by the task and stored as the task result
|
548
|
+
# when the parent task call wait() on the task, the exception
|
549
|
+
# will be raised in the parent task, and caught by rspec.
|
550
|
+
# rspec will then show the error and record the test as failed
|
551
|
+
m_id_short = RSMP::Message.shorten_m_id m_id, 8
|
552
|
+
result = RSMP::MessageRejected.new "Aggregated status request #{m_id_short} was rejected: #{message.attribute('rea')}"
|
553
|
+
next true # done, no more messages wanted
|
554
|
+
end
|
555
|
+
elsif message.is_a?(MessageAck)
|
556
|
+
next true if message.attribute('oMId') == m_id
|
557
|
+
end
|
558
|
+
false
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
550
562
|
end
|
551
563
|
end
|
data/lib/rsmp/site.rb
CHANGED
@@ -14,6 +14,7 @@ module RSMP
|
|
14
14
|
super options
|
15
15
|
@proxies = []
|
16
16
|
@sleep_condition = Async::Notification.new
|
17
|
+
@proxies_condition = Async::Notification.new
|
17
18
|
end
|
18
19
|
|
19
20
|
def site_id
|
@@ -30,7 +31,7 @@ module RSMP
|
|
30
31
|
'sxl' => 'tlc',
|
31
32
|
'sxl_version' => '1.0.15',
|
32
33
|
'intervals' => {
|
33
|
-
'
|
34
|
+
'timer' => 0.1,
|
34
35
|
'watchdog' => 1,
|
35
36
|
'reconnect' => 0.1
|
36
37
|
},
|
@@ -52,7 +53,7 @@ module RSMP
|
|
52
53
|
def check_sxl_version
|
53
54
|
sxl = @site_settings['sxl']
|
54
55
|
version = @site_settings['sxl_version']
|
55
|
-
RSMP::Schemer::find_schema! sxl, version
|
56
|
+
RSMP::Schemer::find_schema! sxl, version, lenient: true
|
56
57
|
end
|
57
58
|
|
58
59
|
def reconnect
|
@@ -74,9 +75,9 @@ module RSMP
|
|
74
75
|
SupervisorProxy.new settings
|
75
76
|
end
|
76
77
|
|
77
|
-
def
|
78
|
+
def aggregated_status_changed component, options={}
|
78
79
|
@proxies.each do |proxy|
|
79
|
-
proxy.send_aggregated_status component
|
80
|
+
proxy.send_aggregated_status component, options
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
@@ -91,9 +92,11 @@ module RSMP
|
|
91
92
|
archive: @archive
|
92
93
|
})
|
93
94
|
@proxies << proxy
|
95
|
+
@proxies_condition.signal
|
94
96
|
run_site_proxy task, proxy
|
95
97
|
ensure
|
96
98
|
@proxies.delete proxy
|
99
|
+
@proxies_condition.signal
|
97
100
|
end
|
98
101
|
|
99
102
|
def run_site_proxy task, proxy
|
@@ -142,5 +145,19 @@ module RSMP
|
|
142
145
|
end
|
143
146
|
end
|
144
147
|
|
148
|
+
def wait_for_supervisor ip, timeout
|
149
|
+
supervisor = find_supervisor ip
|
150
|
+
return supervisor if supervisor
|
151
|
+
wait_for(@proxy_condition,timeout) { find_supervisor ip }
|
152
|
+
rescue Async::TimeoutError
|
153
|
+
raise RSMP::TimeoutError.new "Supervisor '#{ip}' did not connect within #{timeout}s"
|
154
|
+
end
|
155
|
+
|
156
|
+
def find_supervisor ip
|
157
|
+
@proxies.each do |supervisor|
|
158
|
+
return supervisor if ip == :any || supervisor.ip == ip
|
159
|
+
end
|
160
|
+
nil
|
161
|
+
end
|
145
162
|
end
|
146
163
|
end
|
data/lib/rsmp/site_proxy.rb
CHANGED
@@ -94,7 +94,7 @@ module RSMP
|
|
94
94
|
if options[:collect]
|
95
95
|
result = nil
|
96
96
|
task = @task.async do |task|
|
97
|
-
wait_for_aggregated_status task, options[:collect]
|
97
|
+
wait_for_aggregated_status task, options[:collect], m_id
|
98
98
|
end
|
99
99
|
send_message message, validate: options[:validate]
|
100
100
|
return message, task.wait
|
@@ -134,7 +134,7 @@ module RSMP
|
|
134
134
|
acknowledge message
|
135
135
|
end
|
136
136
|
|
137
|
-
def
|
137
|
+
def aggregated_status_changed component, options={}
|
138
138
|
@supervisor.aggregated_status_changed self, component
|
139
139
|
end
|
140
140
|
|
@@ -308,7 +308,7 @@ module RSMP
|
|
308
308
|
# comes from the Version message send by the site
|
309
309
|
type = 'tlc'
|
310
310
|
version = message.attribute 'SXL'
|
311
|
-
RSMP::Schemer::find_schema! type, version
|
311
|
+
RSMP::Schemer::find_schema! type, version, lenient: true
|
312
312
|
|
313
313
|
# store sxl version requested by site
|
314
314
|
# TODO should check agaist site settings
|
data/lib/rsmp/site_proxy_wait.rb
CHANGED
@@ -2,24 +2,6 @@
|
|
2
2
|
module RSMP
|
3
3
|
module SiteProxyWait
|
4
4
|
|
5
|
-
def wait_for_status_updates parent_task, options={}, &send_block
|
6
|
-
send_while_collecting parent_task, send_block do |task, m_id|
|
7
|
-
collect_status_updates_or_responses task, 'StatusUpdate', options, m_id
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def wait_for_status_responses parent_task, options={}, &send_block
|
12
|
-
send_while_collecting parent_task, send_block do |task, m_id|
|
13
|
-
collect_status_updates_or_responses task, 'StatusResponse', options, m_id
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def wait_for_command_responses parent_task, options={}, &send_block
|
18
|
-
send_while_collecting parent_task, send_block do |task, m_id|
|
19
|
-
collect_command_responses task, options, m_id
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
5
|
def wait_for_alarm parent_task, options={}
|
24
6
|
matching_alarm = nil
|
25
7
|
message = collect(parent_task,options.merge(type: "Alarm", with_message: true, num: 1)) do |message|
|
@@ -161,24 +143,7 @@ module RSMP
|
|
161
143
|
true
|
162
144
|
end
|
163
145
|
|
164
|
-
def
|
165
|
-
m_id = RSMP::Message.make_m_id # make message id so we can start waiting for it
|
166
|
-
|
167
|
-
# wait for command responses in an async task
|
168
|
-
task = parent_task.async do |task|
|
169
|
-
collect_block.call task, m_id
|
170
|
-
rescue StandardError => e
|
171
|
-
notify_error e, level: :internal
|
172
|
-
end
|
173
|
-
|
174
|
-
# call block, it should send command request using the given m_id
|
175
|
-
send_block.call m_id
|
176
|
-
|
177
|
-
# wait for the response and return it, raise exception if NotAck received, it it timed out
|
178
|
-
task.wait
|
179
|
-
end
|
180
|
-
|
181
|
-
def wait_for_aggregated_status parent_task, options={}
|
146
|
+
def wait_for_aggregated_status parent_task, options, m_id
|
182
147
|
collect(parent_task,options.merge({
|
183
148
|
type: ['AggregatedStatus','MessageNotAck'],
|
184
149
|
num: 1
|
data/lib/rsmp/supervisor.rb
CHANGED
@@ -49,7 +49,6 @@ module RSMP
|
|
49
49
|
raise RSMP::ConfigurationError.new("Configuration for site '#{site_id}' is empty")
|
50
50
|
end
|
51
51
|
sxl = settings['sxl']
|
52
|
-
sxl = 'tlc' unless sxl # temporary fix until configs are updated
|
53
52
|
unless sxl
|
54
53
|
raise RSMP::ConfigurationError.new("Configuration error for site '#{site_id}': No SXL specified")
|
55
54
|
end
|
@@ -123,15 +123,28 @@ module RSMP
|
|
123
123
|
@version_determined = true
|
124
124
|
end
|
125
125
|
|
126
|
-
def send_aggregated_status component
|
126
|
+
def send_aggregated_status component, options={}
|
127
|
+
m_id = options[:m_id] || RSMP::Message.make_m_id
|
127
128
|
message = AggregatedStatus.new({
|
128
129
|
"aSTS" => clock.to_s,
|
129
130
|
"cId" => component.c_id,
|
130
131
|
"fP" => 'NormalControl',
|
131
132
|
"fS" => nil,
|
132
|
-
"se" => component.aggregated_status_bools
|
133
|
+
"se" => component.aggregated_status_bools,
|
134
|
+
"mId" => m_id
|
133
135
|
})
|
134
|
-
|
136
|
+
|
137
|
+
if options[:collect]
|
138
|
+
result = nil
|
139
|
+
task = @task.async do |task|
|
140
|
+
wait_for_acknowledgement task, options[:collect], m_id
|
141
|
+
end
|
142
|
+
send_message message, validate: options[:validate]
|
143
|
+
return message, task.wait
|
144
|
+
else
|
145
|
+
send_message message, validate: options[:validate]
|
146
|
+
message
|
147
|
+
end
|
135
148
|
end
|
136
149
|
|
137
150
|
def process_aggregated_status message
|
data/lib/rsmp/tlc.rb
CHANGED
@@ -69,7 +69,7 @@ module RSMP
|
|
69
69
|
group.move pos
|
70
70
|
end
|
71
71
|
if pos == 0
|
72
|
-
|
72
|
+
aggregated_status_changed
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -798,7 +798,7 @@ module RSMP
|
|
798
798
|
super options
|
799
799
|
@sxl = 'traffic_light_controller'
|
800
800
|
@security_codes = options[:site_settings]['security_codes']
|
801
|
-
@interval = options[:site_settings]['
|
801
|
+
@interval = options[:site_settings]['intervals']['timer'] || 1
|
802
802
|
unless @main
|
803
803
|
raise ConfigurationError.new "TLC must have a main component"
|
804
804
|
end
|
data/lib/rsmp/version.rb
CHANGED
data/rsmp.gemspec
CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_dependency "async-io", "~> 1.30.2"
|
35
35
|
spec.add_dependency "colorize", "~> 0.8.1"
|
36
36
|
spec.add_dependency "thor", "~> 1.0.1"
|
37
|
-
spec.add_dependency "rsmp_schemer"
|
37
|
+
spec.add_dependency "rsmp_schemer"
|
38
38
|
|
39
39
|
spec.add_development_dependency "bundler", "~> 2.2.3"
|
40
40
|
spec.add_development_dependency "rake", "~> 13.0.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsmp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.36
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emil Tin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: rsmp_schemer
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
75
|
+
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|