Module: RSMP::Supervisor::Modules::Sites

Included in:
RSMP::Supervisor
Defined in:
lib/rsmp/node/supervisor/modules/sites.rb

Overview

Manages connected sites and site discovery

Instance Method Summary collapse

Instance Method Details

#aggregated_status_changed(site_proxy, component) ⇒ Object



71
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 71

def aggregated_status_changed(site_proxy, component); end

#check_site_already_connected(site_id) ⇒ Object

Raises:



62
63
64
65
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 62

def check_site_already_connected(site_id)
  site = find_site(site_id)
  raise HandshakeError, "Site '#{site_id}' already connected" if !site.nil? && site != self
end

#check_site_id(site_id) ⇒ Object



57
58
59
60
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 57

def check_site_id(site_id)
  # check_site_already_connected site_id
  site_id_to_site_setting site_id
end

#find_site(site_id) ⇒ Object



17
18
19
20
21
22
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 17

def find_site(site_id)
  @proxies.each do |site|
    return site if site_id == :any || site.site_id == site_id
  end
  nil
end

#find_site_from_ip_port(ip, port) ⇒ Object



10
11
12
13
14
15
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 10

def find_site_from_ip_port(ip, port)
  @proxies.each do |site|
    return site if site.ip == ip && site.port == port
  end
  nil
end

#site_connected?(site_id) ⇒ Boolean



6
7
8
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 6

def site_connected?(site_id)
  !find_site(site_id).nil?
end

#site_ids_changedObject



67
68
69
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 67

def site_ids_changed
  @site_id_condition.signal
end

#wait_for_site(site_id, timeout:) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 24

def wait_for_site(site_id, timeout:)
  site = find_site site_id
  return Result.success(site) if site

  wait_for_condition(@site_id_condition, timeout: timeout) do
    find_site site_id
  end
end

#wait_for_site!(site_id, timeout:) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 33

def wait_for_site!(site_id, timeout:)
  result = wait_for_site(site_id, timeout: timeout)
  return result.value! if result.success?

  str = if site_id == :any
          'No site connected'
        else
          "Site '#{site_id}' did not connect"
        end
  Result.failure(failure: result.failure.with(message: "#{str} within #{timeout}s")).value!
end

#wait_for_site_disconnect(site_id, timeout:) ⇒ Object



45
46
47
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 45

def wait_for_site_disconnect(site_id, timeout:)
  wait_for_condition(@site_id_condition, timeout: timeout) { true unless find_site site_id }
end

#wait_for_site_disconnect!(site_id, timeout:) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/rsmp/node/supervisor/modules/sites.rb', line 49

def wait_for_site_disconnect!(site_id, timeout:)
  result = wait_for_site_disconnect(site_id, timeout: timeout)
  return result.value! if result.success?

  failure = result.failure.with(message: "Site '#{site_id}' did not disconnect within #{timeout}s")
  Result.failure(failure: failure).value!
end