rsmp 0.8.4 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rspec.yaml +21 -0
- data/.ruby-version +1 -1
- data/Gemfile.lock +51 -67
- data/README.md +2 -12
- data/bin/console +1 -1
- data/cucumber.yml +1 -0
- data/documentation/classes_and_modules.md +4 -4
- data/documentation/collecting_message.md +2 -2
- data/documentation/tasks.md +149 -0
- data/lib/rsmp/archive.rb +3 -3
- data/lib/rsmp/cli.rb +32 -4
- data/lib/rsmp/collect/aggregated_status_collector.rb +1 -1
- data/lib/rsmp/collect/collector.rb +13 -6
- data/lib/rsmp/collect/command_response_collector.rb +1 -1
- data/lib/rsmp/collect/state_collector.rb +1 -1
- data/lib/rsmp/collect/status_collector.rb +2 -1
- data/lib/rsmp/components.rb +3 -3
- data/lib/rsmp/convert/export/json_schema.rb +4 -4
- data/lib/rsmp/convert/import/yaml.rb +1 -1
- data/lib/rsmp/deep_merge.rb +1 -0
- data/lib/rsmp/error.rb +0 -3
- data/lib/rsmp/inspect.rb +1 -1
- data/lib/rsmp/logger.rb +5 -5
- data/lib/rsmp/logging.rb +1 -1
- data/lib/rsmp/message.rb +1 -1
- data/lib/rsmp/node.rb +10 -45
- data/lib/rsmp/proxy.rb +184 -134
- data/lib/rsmp/rsmp.rb +1 -1
- data/lib/rsmp/site.rb +23 -60
- data/lib/rsmp/site_proxy.rb +33 -37
- data/lib/rsmp/supervisor.rb +25 -21
- data/lib/rsmp/supervisor_proxy.rb +58 -29
- data/lib/rsmp/task.rb +84 -0
- data/lib/rsmp/tlc/signal_group.rb +5 -3
- data/lib/rsmp/tlc/signal_plan.rb +2 -2
- data/lib/rsmp/tlc/traffic_controller.rb +97 -29
- data/lib/rsmp/tlc/traffic_controller_site.rb +43 -36
- data/lib/rsmp/version.rb +1 -1
- data/lib/rsmp.rb +1 -1
- data/rsmp.gemspec +7 -7
- metadata +21 -20
- data/lib/rsmp/site_proxy_wait.rb +0 -0
- data/lib/rsmp/wait.rb +0 -16
- data/test.rb +0 -27
data/lib/rsmp/components.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module RSMP
|
4
4
|
module Components
|
5
5
|
attr_reader :components
|
6
|
-
|
6
|
+
|
7
7
|
def initialize_components
|
8
8
|
@components = {}
|
9
9
|
end
|
@@ -25,10 +25,10 @@ module RSMP
|
|
25
25
|
|
26
26
|
def check_main_component settings
|
27
27
|
unless settings['main'] && settings['main'].size >= 1
|
28
|
-
raise ConfigurationError.new("main component must be defined")
|
28
|
+
raise ConfigurationError.new("main component must be defined")
|
29
29
|
end
|
30
30
|
if settings['main'].size > 1
|
31
|
-
raise ConfigurationError.new("only one main component can be defined, found #{settings['main'].keys.join(', ')}")
|
31
|
+
raise ConfigurationError.new("only one main component can be defined, found #{settings['main'].keys.join(', ')}")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -23,7 +23,7 @@ module RSMP
|
|
23
23
|
|
24
24
|
def self.build_value item
|
25
25
|
out = {}
|
26
|
-
|
26
|
+
|
27
27
|
if item['description']
|
28
28
|
out["description"] = item['description']
|
29
29
|
end
|
@@ -95,7 +95,7 @@ module RSMP
|
|
95
95
|
}
|
96
96
|
end
|
97
97
|
json = {
|
98
|
-
"properties" => {
|
98
|
+
"properties" => {
|
99
99
|
"aCId" => { "enum" => items.keys.sort },
|
100
100
|
"rvs" => { "items" => { "allOf" => list } }
|
101
101
|
}
|
@@ -175,7 +175,7 @@ module RSMP
|
|
175
175
|
}
|
176
176
|
]
|
177
177
|
}
|
178
|
-
out["sxl.json"] = output_json json
|
178
|
+
out["sxl.json"] = output_json json
|
179
179
|
end
|
180
180
|
|
181
181
|
def self.generate sxl
|
@@ -192,7 +192,7 @@ module RSMP
|
|
192
192
|
out.each_pair do |relative_path,str|
|
193
193
|
path = File.join(folder, relative_path)
|
194
194
|
FileUtils.mkdir_p File.dirname(path) # create folders if needed
|
195
|
-
file = File.open(path, 'w+') # w+ means truncate or create new file
|
195
|
+
file = File.open(path, 'w+') # w+ means truncate or create new file
|
196
196
|
file.puts str
|
197
197
|
end
|
198
198
|
end
|
@@ -24,7 +24,7 @@ module RSMP
|
|
24
24
|
commands: {}
|
25
25
|
}
|
26
26
|
|
27
|
-
yaml['objects'].each_pair do |type,object|
|
27
|
+
yaml['objects'].each_pair do |type,object|
|
28
28
|
object["alarms"].each { |id,item| sxl[:alarms][id] = item }
|
29
29
|
object["statuses"].each { |id,item| sxl[:statuses][id] = item }
|
30
30
|
object["commands"].each { |id,item| sxl[:commands][id] = item }
|
data/lib/rsmp/deep_merge.rb
CHANGED
data/lib/rsmp/error.rb
CHANGED
data/lib/rsmp/inspect.rb
CHANGED
data/lib/rsmp/logger.rb
CHANGED
@@ -2,7 +2,7 @@ module RSMP
|
|
2
2
|
class Logger
|
3
3
|
|
4
4
|
attr_accessor :settings
|
5
|
-
|
5
|
+
|
6
6
|
def initialize settings={}
|
7
7
|
defaults = {
|
8
8
|
'active'=>true,
|
@@ -115,7 +115,7 @@ module RSMP
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
118
|
-
return false if ack && @settings["acknowledgements"] == false &&
|
118
|
+
return false if ack && @settings["acknowledgements"] == false &&
|
119
119
|
[:not_acknowledged,:warning,:error].include?(item[:level]) == false
|
120
120
|
end
|
121
121
|
true
|
@@ -159,7 +159,7 @@ module RSMP
|
|
159
159
|
|
160
160
|
def log item, force:false
|
161
161
|
if output?(item, force)
|
162
|
-
output item[:level], build_output(item)
|
162
|
+
output item[:level], build_output(item)
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
@@ -169,7 +169,7 @@ module RSMP
|
|
169
169
|
else
|
170
170
|
' '*length
|
171
171
|
end
|
172
|
-
end
|
172
|
+
end
|
173
173
|
|
174
174
|
def dump archive, force:false, num:nil
|
175
175
|
num ||= archive.items.size
|
@@ -183,7 +183,7 @@ module RSMP
|
|
183
183
|
def build_part parts, item, key, &block
|
184
184
|
skey = key.to_s
|
185
185
|
return unless @settings[skey]
|
186
|
-
|
186
|
+
|
187
187
|
part = item[key]
|
188
188
|
part = yield part if block
|
189
189
|
part = part.to_s
|
data/lib/rsmp/logging.rb
CHANGED
@@ -8,7 +8,7 @@ module RSMP
|
|
8
8
|
|
9
9
|
def initialize_logging options
|
10
10
|
@archive = options[:archive] || RSMP::Archive.new
|
11
|
-
@logger = options[:logger] || RSMP::Logger.new(options[:log_settings])
|
11
|
+
@logger = options[:logger] || RSMP::Logger.new(options[:log_settings])
|
12
12
|
end
|
13
13
|
|
14
14
|
def author
|
data/lib/rsmp/message.rb
CHANGED
data/lib/rsmp/node.rb
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
module RSMP
|
4
4
|
class Node
|
5
5
|
include Logging
|
6
|
-
include Wait
|
7
6
|
include Inspect
|
7
|
+
include Task
|
8
8
|
|
9
9
|
attr_reader :archive, :logger, :task, :deferred, :error_queue, :clock, :collector
|
10
10
|
|
11
11
|
def initialize options
|
12
12
|
initialize_logging options
|
13
|
-
|
13
|
+
initialize_task
|
14
14
|
@deferred = []
|
15
15
|
@clock = Clock.new
|
16
16
|
@error_queue = Async::Queue.new
|
@@ -18,6 +18,13 @@ module RSMP
|
|
18
18
|
@collect = options[:collect]
|
19
19
|
end
|
20
20
|
|
21
|
+
# stop proxies, then call super
|
22
|
+
def stop_subtasks
|
23
|
+
@proxies.each { |proxy| proxy.stop }
|
24
|
+
@proxies.clear
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
21
28
|
def ignore_errors classes, &block
|
22
29
|
was, @ignore_errors = @ignore_errors, [classes].flatten
|
23
30
|
yield
|
@@ -50,55 +57,13 @@ module RSMP
|
|
50
57
|
|
51
58
|
def clear_deferred
|
52
59
|
@deferred.clear
|
53
|
-
end
|
54
|
-
|
55
|
-
def do_start task
|
56
|
-
task.annotate self.class.to_s
|
57
|
-
@task = task
|
58
|
-
start_action
|
59
|
-
idle
|
60
|
-
end
|
61
|
-
|
62
|
-
def start
|
63
|
-
starting
|
64
|
-
if @task
|
65
|
-
do_start @task
|
66
|
-
else
|
67
|
-
Async do |task|
|
68
|
-
do_start task
|
69
|
-
end
|
70
|
-
end
|
71
|
-
rescue Errno::EADDRINUSE => e
|
72
|
-
log "Cannot start: #{e.to_s}", level: :error
|
73
|
-
rescue SystemExit, SignalException, Interrupt
|
74
|
-
@logger.unmute_all
|
75
|
-
exiting
|
76
|
-
end
|
77
|
-
|
78
|
-
def idle
|
79
|
-
loop do
|
80
|
-
@task.sleep 60
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def stop
|
85
|
-
@task.stop if @task
|
86
|
-
end
|
87
|
-
|
88
|
-
def restart
|
89
|
-
stop
|
90
|
-
start
|
91
|
-
end
|
92
|
-
|
93
|
-
def exiting
|
94
|
-
log "Exiting", level: :info
|
95
60
|
end
|
96
61
|
|
97
62
|
def check_required_settings settings, required
|
98
63
|
raise ArgumentError.new "Settings is empty" unless settings
|
99
64
|
required.each do |setting|
|
100
65
|
raise ArgumentError.new "Missing setting: #{setting}" unless settings.include? setting.to_s
|
101
|
-
end
|
66
|
+
end
|
102
67
|
end
|
103
68
|
|
104
69
|
def author
|