rsmp 0.48.4 → 0.51.0

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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile.lock +19 -20
  4. data/README.md +27 -3
  5. data/Rakefile +3 -1
  6. data/documentation/cli.md +79 -4
  7. data/documentation/collecting_message.md +90 -170
  8. data/documentation/message_distribution.md +17 -3
  9. data/documentation/tasks.md +65 -117
  10. data/lib/rsmp/cli.rb +93 -5
  11. data/lib/rsmp/collect/collector.rb +117 -134
  12. data/lib/rsmp/collect/distributor.rb +16 -3
  13. data/lib/rsmp/collect/queue.rb +14 -6
  14. data/lib/rsmp/collect/receiver.rb +1 -1
  15. data/lib/rsmp/collect/state_collector.rb +11 -2
  16. data/lib/rsmp/collection.rb +12 -0
  17. data/lib/rsmp/completion.rb +49 -0
  18. data/lib/rsmp/component/component_base.rb +3 -3
  19. data/lib/rsmp/convert/export/json_schema/index.rb +8 -3
  20. data/lib/rsmp/convert/import/yaml.rb +12 -8
  21. data/lib/rsmp/delivery.rb +18 -0
  22. data/lib/rsmp/event.rb +19 -0
  23. data/lib/rsmp/event_source.rb +36 -0
  24. data/lib/rsmp/exchange.rb +10 -0
  25. data/lib/rsmp/failure.rb +23 -0
  26. data/lib/rsmp/helpers/error.rb +14 -23
  27. data/lib/rsmp/message.rb +9 -7
  28. data/lib/rsmp/node/node.rb +3 -21
  29. data/lib/rsmp/node/site/connections.rb +4 -9
  30. data/lib/rsmp/node/site/site.rb +31 -16
  31. data/lib/rsmp/node/supervisor/modules/connection.rb +19 -5
  32. data/lib/rsmp/node/supervisor/modules/sites.rb +16 -5
  33. data/lib/rsmp/node/supervisor/supervisor.rb +13 -14
  34. data/lib/rsmp/node/task.rb +59 -53
  35. data/lib/rsmp/proxy/modules/acknowledgements.rb +22 -9
  36. data/lib/rsmp/proxy/modules/lifecycle.rb +134 -0
  37. data/lib/rsmp/proxy/modules/receive.rb +109 -66
  38. data/lib/rsmp/proxy/modules/send.rb +109 -51
  39. data/lib/rsmp/proxy/modules/state.rb +15 -5
  40. data/lib/rsmp/proxy/modules/tasks.rb +96 -70
  41. data/lib/rsmp/proxy/modules/versions.rb +8 -8
  42. data/lib/rsmp/proxy/modules/watchdogs.rb +15 -2
  43. data/lib/rsmp/proxy/proxy.rb +4 -66
  44. data/lib/rsmp/proxy/site/connection.rb +27 -22
  45. data/lib/rsmp/proxy/site/modules/aggregated_status.rb +18 -8
  46. data/lib/rsmp/proxy/site/modules/alarms.rb +45 -38
  47. data/lib/rsmp/proxy/site/modules/commands.rb +18 -8
  48. data/lib/rsmp/proxy/site/modules/status.rb +44 -19
  49. data/lib/rsmp/proxy/site/site_proxy.rb +12 -10
  50. data/lib/rsmp/proxy/supervisor/modules/aggregated_status.rb +1 -1
  51. data/lib/rsmp/proxy/supervisor/modules/alarms.rb +1 -1
  52. data/lib/rsmp/proxy/supervisor/modules/commands.rb +1 -1
  53. data/lib/rsmp/proxy/supervisor/modules/message_buffer.rb +8 -9
  54. data/lib/rsmp/proxy/supervisor/modules/status.rb +1 -1
  55. data/lib/rsmp/proxy/supervisor/modules/status_updates.rb +1 -1
  56. data/lib/rsmp/proxy/supervisor/supervisor_proxy.rb +34 -30
  57. data/lib/rsmp/result.rb +95 -0
  58. data/lib/rsmp/schema/validation.rb +5 -3
  59. data/lib/rsmp/sxl/interface.rb +8 -1
  60. data/lib/rsmp/sxl/processing/catalogue.rb +61 -0
  61. data/lib/rsmp/sxl/processing/conflict_checker.rb +30 -0
  62. data/lib/rsmp/sxl/processing/dependency_graph.rb +37 -0
  63. data/lib/rsmp/sxl/processing/document.rb +158 -0
  64. data/lib/rsmp/sxl/processing/error.rb +8 -0
  65. data/lib/rsmp/sxl/processing/manifest.rb +144 -0
  66. data/lib/rsmp/sxl/processing/natural_sort.rb +22 -0
  67. data/lib/rsmp/sxl/processing/resolver.rb +94 -0
  68. data/lib/rsmp/sxl/processing/version_requirement.rb +86 -0
  69. data/lib/rsmp/sxl/processing.rb +18 -0
  70. data/lib/rsmp/sxl/supervisor_interface.rb +8 -1
  71. data/lib/rsmp/termination.rb +10 -0
  72. data/lib/rsmp/tlc/modules/plans.rb +0 -2
  73. data/lib/rsmp/tlc/proxy/control.rb +50 -16
  74. data/lib/rsmp/tlc/proxy/detectors.rb +15 -4
  75. data/lib/rsmp/tlc/proxy/io.rb +46 -31
  76. data/lib/rsmp/tlc/proxy/plans.rb +36 -19
  77. data/lib/rsmp/tlc/proxy/plans_bang.rb +44 -0
  78. data/lib/rsmp/tlc/proxy/status.rb +47 -23
  79. data/lib/rsmp/tlc/proxy/system.rb +16 -4
  80. data/lib/rsmp/tlc/supervisor_interface.rb +7 -1
  81. data/lib/rsmp/tlc/traffic_controller_site.rb +6 -9
  82. data/lib/rsmp/validation.rb +22 -0
  83. data/lib/rsmp/version.rb +1 -1
  84. data/lib/rsmp.rb +19 -4
  85. data/rsmp.gemspec +1 -1
  86. metadata +25 -4
  87. data/lib/rsmp/collect/collector/status.rb +0 -34
@@ -6,6 +6,7 @@ module RSMP
6
6
  include Proxy::Control
7
7
  include Proxy::IO
8
8
  include Proxy::Plans
9
+ include Proxy::PlansBang
9
10
  include Proxy::Status
10
11
  include Proxy::Detectors
11
12
  include Proxy::System
@@ -32,7 +33,8 @@ module RSMP
32
33
  end
33
34
 
34
35
  def subscribe_to_timeplan
35
- validate_ready 'subscribe to timeplan'
36
+ readiness = validate_ready 'subscribe to timeplan'
37
+ return readiness if readiness.failure?
36
38
 
37
39
  status_list = [
38
40
  { 'sCI' => 'S0014', 'n' => 'status', 'uRt' => '0' },
@@ -45,6 +47,10 @@ module RSMP
45
47
  subscribe_to_status status_list, component: main.c_id
46
48
  end
47
49
 
50
+ def subscribe_to_timeplan!(...)
51
+ subscribe_to_timeplan(...).value!
52
+ end
53
+
48
54
  def process_status_update(message)
49
55
  status_values = message.attribute('sS')
50
56
  return unless status_values
@@ -28,9 +28,9 @@ module RSMP
28
28
  'TLC'
29
29
  end
30
30
 
31
- def start
31
+ def start_auxiliary_tasks(parent)
32
32
  super
33
- start_tlc_timer
33
+ start_tlc_timer(parent: parent)
34
34
  main.initiate_startup_sequence
35
35
  end
36
36
 
@@ -82,11 +82,11 @@ module RSMP
82
82
  end
83
83
  end
84
84
 
85
- def start_tlc_timer
85
+ def start_tlc_timer(parent:)
86
86
  task_name = 'tlc timer'
87
87
  log "Starting #{task_name} with interval #{@interval} seconds", level: :debug
88
88
 
89
- @timer = @task.async do |task|
89
+ @timer = parent.async do |task|
90
90
  task.annotate task_name
91
91
  run_tlc_timer task
92
92
  end
@@ -96,9 +96,6 @@ module RSMP
96
96
  next_time = Time.now.to_f
97
97
  loop do
98
98
  timer(@clock.now)
99
- rescue StandardError => e
100
- distribute_error e, level: :internal
101
- ensure
102
99
  # adjust sleep duration to avoid drift. so wake up always happens on the
103
100
  # same fractional second.
104
101
  # note that Time.now is not monotonic. If the clock is changed,
@@ -108,7 +105,7 @@ module RSMP
108
105
  # if the clock is changed, the wake up would then happen on a different
109
106
  # fractional second
110
107
  next_time += @interval
111
- duration = next_time - Time.now.to_f
108
+ duration = [next_time - Time.now.to_f, 0].max
112
109
  task.sleep duration
113
110
  end
114
111
  end
@@ -116,7 +113,7 @@ module RSMP
116
113
  def stop_tlc_timer
117
114
  return unless @timer
118
115
 
119
- @timer.stop
116
+ @timer.cancel if @timer.running?
120
117
  @timer = nil
121
118
  end
122
119
 
@@ -0,0 +1,22 @@
1
+ module RSMP
2
+ # The result of validating a message against one or more schemas.
3
+ Validation = Data.define(:violations) do
4
+ def initialize(violations: [])
5
+ raise ArgumentError, 'violations must be an Array' unless violations.is_a?(Array)
6
+
7
+ super(violations: violations.map { |violation| Array(violation).dup.freeze }.freeze)
8
+ end
9
+
10
+ def valid?
11
+ violations.empty?
12
+ end
13
+
14
+ def invalid?
15
+ !valid?
16
+ end
17
+
18
+ def message
19
+ violations.map { |item| item.reject { |part| part == '' } }.compact.join(', ').strip
20
+ end
21
+ end
22
+ end
data/lib/rsmp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = '0.48.4'.freeze
2
+ VERSION = '0.51.0'.freeze
3
3
  end
data/lib/rsmp.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'socket'
3
3
  require 'time'
4
+ require 'English'
4
5
  require 'async'
5
6
  require 'io/endpoint'
6
7
  require 'io/endpoint/host_endpoint'
@@ -10,16 +11,28 @@ require 'json'
10
11
  require 'securerandom'
11
12
  require 'json_schemer'
12
13
  require 'async/queue'
14
+ require 'async/barrier'
15
+ require 'async/promise'
13
16
  require_relative 'rsmp/schema_error'
17
+ require_relative 'rsmp/helpers/clock'
18
+ require_relative 'rsmp/helpers/deep_merge'
19
+ require_relative 'rsmp/helpers/error'
20
+ require_relative 'rsmp/failure'
21
+ require_relative 'rsmp/result'
22
+ require_relative 'rsmp/validation'
23
+ require_relative 'rsmp/event'
24
+ require_relative 'rsmp/event_source'
25
+ require_relative 'rsmp/completion'
26
+ require_relative 'rsmp/termination'
27
+ require_relative 'rsmp/collection'
28
+ require_relative 'rsmp/exchange'
29
+ require_relative 'rsmp/delivery'
14
30
  require_relative 'rsmp/schema'
15
31
  require_relative 'rsmp/convert/import/yaml'
16
32
  require_relative 'rsmp/convert/export/json_schema'
17
33
 
18
34
  require_relative 'rsmp/status_list'
19
35
  require_relative 'rsmp/command_list'
20
- require_relative 'rsmp/helpers/clock'
21
- require_relative 'rsmp/helpers/deep_merge'
22
- require_relative 'rsmp/helpers/error'
23
36
  require_relative 'rsmp/log/logging'
24
37
  require_relative 'rsmp/log/archive'
25
38
  require_relative 'rsmp/log/filtering'
@@ -35,7 +48,6 @@ require_relative 'rsmp/component/component_proxy'
35
48
  require_relative 'rsmp/collect/distributor'
36
49
  require_relative 'rsmp/collect/receiver'
37
50
  require_relative 'rsmp/collect/queue'
38
- require_relative 'rsmp/collect/collector/status'
39
51
  require_relative 'rsmp/collect/collector/reporting'
40
52
  require_relative 'rsmp/collect/collector/logging'
41
53
  require_relative 'rsmp/collect/collector'
@@ -71,11 +83,13 @@ require_relative 'rsmp/proxy/modules/send'
71
83
  require_relative 'rsmp/proxy/modules/receive'
72
84
  require_relative 'rsmp/proxy/modules/versions'
73
85
  require_relative 'rsmp/proxy/modules/tasks'
86
+ require_relative 'rsmp/proxy/modules/lifecycle'
74
87
  require_relative 'rsmp/proxy/proxy'
75
88
  require_relative 'rsmp/sxl/interface'
76
89
  require_relative 'rsmp/sxl/supervisor_interface'
77
90
  require_relative 'rsmp/sxl/site_interface'
78
91
  require_relative 'rsmp/sxl/registry'
92
+ require_relative 'rsmp/sxl/processing'
79
93
  require_relative 'rsmp/proxy/supervisor/modules/status_updates'
80
94
  require_relative 'rsmp/proxy/supervisor/modules/status'
81
95
  require_relative 'rsmp/proxy/supervisor/modules/commands'
@@ -108,6 +122,7 @@ require_relative 'rsmp/tlc/proxy/control'
108
122
  require_relative 'rsmp/tlc/proxy/detectors'
109
123
  require_relative 'rsmp/tlc/proxy/io'
110
124
  require_relative 'rsmp/tlc/proxy/plans'
125
+ require_relative 'rsmp/tlc/proxy/plans_bang'
111
126
  require_relative 'rsmp/tlc/proxy/status'
112
127
  require_relative 'rsmp/tlc/proxy/system'
113
128
  require_relative 'rsmp/tlc/supervisor_interface'
data/rsmp.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency 'async', '~> 2.39'
34
+ spec.add_dependency 'async', '~> 2.45'
35
35
  spec.add_dependency 'colorize', '~> 1.1'
36
36
  spec.add_dependency 'io-endpoint', '~> 0.17'
37
37
  spec.add_dependency 'io-stream', '~> 0.13'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.48.4
4
+ version: 0.51.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Tin
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '2.39'
18
+ version: '2.45'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '2.39'
25
+ version: '2.45'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: colorize
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -166,7 +166,6 @@ files:
166
166
  - lib/rsmp/collect/collector.rb
167
167
  - lib/rsmp/collect/collector/logging.rb
168
168
  - lib/rsmp/collect/collector/reporting.rb
169
- - lib/rsmp/collect/collector/status.rb
170
169
  - lib/rsmp/collect/command_matcher.rb
171
170
  - lib/rsmp/collect/command_response_collector.rb
172
171
  - lib/rsmp/collect/distributor.rb
@@ -177,7 +176,9 @@ files:
177
176
  - lib/rsmp/collect/state_collector.rb
178
177
  - lib/rsmp/collect/status_collector.rb
179
178
  - lib/rsmp/collect/status_matcher.rb
179
+ - lib/rsmp/collection.rb
180
180
  - lib/rsmp/command_list.rb
181
+ - lib/rsmp/completion.rb
181
182
  - lib/rsmp/component/alarm_state.rb
182
183
  - lib/rsmp/component/component.rb
183
184
  - lib/rsmp/component/component_base.rb
@@ -190,6 +191,11 @@ files:
190
191
  - lib/rsmp/convert/export/json_schema/outputs.rb
191
192
  - lib/rsmp/convert/export/json_schema/values.rb
192
193
  - lib/rsmp/convert/import/yaml.rb
194
+ - lib/rsmp/delivery.rb
195
+ - lib/rsmp/event.rb
196
+ - lib/rsmp/event_source.rb
197
+ - lib/rsmp/exchange.rb
198
+ - lib/rsmp/failure.rb
193
199
  - lib/rsmp/helpers/clock.rb
194
200
  - lib/rsmp/helpers/deep_merge.rb
195
201
  - lib/rsmp/helpers/error.rb
@@ -220,6 +226,7 @@ files:
220
226
  - lib/rsmp/options/supervisor_options.rb
221
227
  - lib/rsmp/options/traffic_controller_site_options.rb
222
228
  - lib/rsmp/proxy/modules/acknowledgements.rb
229
+ - lib/rsmp/proxy/modules/lifecycle.rb
223
230
  - lib/rsmp/proxy/modules/receive.rb
224
231
  - lib/rsmp/proxy/modules/send.rb
225
232
  - lib/rsmp/proxy/modules/state.rb
@@ -241,6 +248,7 @@ files:
241
248
  - lib/rsmp/proxy/supervisor/modules/status.rb
242
249
  - lib/rsmp/proxy/supervisor/modules/status_updates.rb
243
250
  - lib/rsmp/proxy/supervisor/supervisor_proxy.rb
251
+ - lib/rsmp/result.rb
244
252
  - lib/rsmp/schema.rb
245
253
  - lib/rsmp/schema/core_sxl_resolution.rb
246
254
  - lib/rsmp/schema/message_resolution.rb
@@ -248,9 +256,20 @@ files:
248
256
  - lib/rsmp/schema_error.rb
249
257
  - lib/rsmp/status_list.rb
250
258
  - lib/rsmp/sxl/interface.rb
259
+ - lib/rsmp/sxl/processing.rb
260
+ - lib/rsmp/sxl/processing/catalogue.rb
261
+ - lib/rsmp/sxl/processing/conflict_checker.rb
262
+ - lib/rsmp/sxl/processing/dependency_graph.rb
263
+ - lib/rsmp/sxl/processing/document.rb
264
+ - lib/rsmp/sxl/processing/error.rb
265
+ - lib/rsmp/sxl/processing/manifest.rb
266
+ - lib/rsmp/sxl/processing/natural_sort.rb
267
+ - lib/rsmp/sxl/processing/resolver.rb
268
+ - lib/rsmp/sxl/processing/version_requirement.rb
251
269
  - lib/rsmp/sxl/registry.rb
252
270
  - lib/rsmp/sxl/site_interface.rb
253
271
  - lib/rsmp/sxl/supervisor_interface.rb
272
+ - lib/rsmp/termination.rb
254
273
  - lib/rsmp/tlc.rb
255
274
  - lib/rsmp/tlc/detector_logic.rb
256
275
  - lib/rsmp/tlc/input_states.rb
@@ -269,6 +288,7 @@ files:
269
288
  - lib/rsmp/tlc/proxy/detectors.rb
270
289
  - lib/rsmp/tlc/proxy/io.rb
271
290
  - lib/rsmp/tlc/proxy/plans.rb
291
+ - lib/rsmp/tlc/proxy/plans_bang.rb
272
292
  - lib/rsmp/tlc/proxy/status.rb
273
293
  - lib/rsmp/tlc/proxy/system.rb
274
294
  - lib/rsmp/tlc/signal_group.rb
@@ -279,6 +299,7 @@ files:
279
299
  - lib/rsmp/tlc/supervisor_interface.rb
280
300
  - lib/rsmp/tlc/traffic_controller.rb
281
301
  - lib/rsmp/tlc/traffic_controller_site.rb
302
+ - lib/rsmp/validation.rb
282
303
  - lib/rsmp/version.rb
283
304
  - rsmp.gemspec
284
305
  - schemas/core/3.1.2/aggregated_status.json
@@ -1,34 +0,0 @@
1
- module RSMP
2
- class Collector
3
- # Status predicate methods for collectors
4
- module Status
5
- def collecting?
6
- @status == :collecting
7
- end
8
-
9
- def ok?
10
- @status == :ok
11
- end
12
-
13
- def timeout?
14
- @status == :timeout
15
- end
16
-
17
- def ready?
18
- @status == :ready
19
- end
20
-
21
- def cancelled?
22
- @status == :cancelled
23
- end
24
-
25
- def ingoing?
26
- @ingoing == true
27
- end
28
-
29
- def outgoing?
30
- @outgoing == true
31
- end
32
- end
33
- end
34
- end