rsmp 0.1.32 → 0.1.33
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 +1 -1
- data/lib/rsmp/component.rb +4 -4
- data/lib/rsmp/components.rb +1 -1
- data/lib/rsmp/proxy.rb +24 -12
- data/lib/rsmp/site.rb +19 -2
- data/lib/rsmp/site_proxy.rb +1 -1
- data/lib/rsmp/site_proxy_wait.rb +0 -35
- data/lib/rsmp/supervisor_proxy.rb +16 -3
- data/lib/rsmp/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: ea326578bffa5b75bcd86c0829215d0111b3ba52c88bba7110cca3b9cc0f9fa9
         | 
| 4 | 
            +
              data.tar.gz: b7d197a3430be8922429ce5ac5ce3512900d85b4b9d276d5d283f150082a3303
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '09ad5202d5feb194cdd9e54177f86910631ac260cd94e5afccdf1a386260de91063b438e5e6dc8675703fdaae8112036f6940793f7d3a266e84827ed38d465c1'
         | 
| 7 | 
            +
              data.tar.gz: c37dcaac65b0c1a692ef95507ad25f1fa0e78bdfa089758b8511af331e2f47b1bb497cf1452442ad7f9fbf34f8860c9408eeb1674cb3084337ce4fd3b4f552eb
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        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 | 
            -
                    aggrated_status_changed
         | 
| 39 | 
            +
                    aggrated_status_changed options
         | 
| 40 40 | 
             
                  end
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| @@ -54,8 +54,8 @@ module RSMP | |
| 54 54 | 
             
                  end
         | 
| 55 55 | 
             
                end
         | 
| 56 56 |  | 
| 57 | 
            -
                def aggrated_status_changed
         | 
| 58 | 
            -
                  @node.aggrated_status_changed self
         | 
| 57 | 
            +
                def aggrated_status_changed options={}
         | 
| 58 | 
            +
                  @node.aggrated_status_changed self, options
         | 
| 59 59 | 
             
                end
         | 
| 60 60 |  | 
| 61 61 | 
             
                def alarm code:, status:
         | 
    
        data/lib/rsmp/components.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
         | 
| @@ -74,9 +75,9 @@ module RSMP | |
| 74 75 | 
             
                  SupervisorProxy.new settings
         | 
| 75 76 | 
             
                end
         | 
| 76 77 |  | 
| 77 | 
            -
                def aggrated_status_changed component
         | 
| 78 | 
            +
                def aggrated_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
    
    
    
        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,23 +143,6 @@ module RSMP | |
| 161 143 | 
             
                  true
         | 
| 162 144 | 
             
                end
         | 
| 163 145 |  | 
| 164 | 
            -
                def send_while_collecting parent_task, send_block, &collect_block
         | 
| 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 146 | 
             
                def wait_for_aggregated_status parent_task, options={}
         | 
| 182 147 | 
             
                  collect(parent_task,options.merge({
         | 
| 183 148 | 
             
                    type: ['AggregatedStatus','MessageNotAck'],
         | 
| @@ -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/version.rb
    CHANGED
    
    
    
        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.33
         | 
| 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-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: async
         |