Module: Legion::Transport::TenantTopology

Extended by:
Logging::Helper
Defined in:
lib/legion/transport/tenant_topology.rb

Constant Summary collapse

DEFAULT_SHARED_EXCHANGES =
%w[legion.control legion.health legion.audit].freeze
DEFAULT_PREFIX_FORMAT =
't.%<tenant_id>s.%<name>s'

Class Method Summary collapse

Class Method Details

.current_tenant_idObject



42
43
44
45
46
47
48
49
# File 'lib/legion/transport/tenant_topology.rb', line 42

def self.current_tenant_id
  return nil unless defined?(Legion::TenantContext)

  Legion::TenantContext.current_tenant_id
rescue StandardError => e
  handle_exception(e, level: :warn, handled: true, operation: :tenant_topology_current_tenant_id)
  nil
end

.enabled?Boolean

Returns:

  • (Boolean)


37
38
39
40
# File 'lib/legion/transport/tenant_topology.rb', line 37

def self.enabled?
  settings = transport_settings
  settings.is_a?(Hash) && settings.dig(:tenant_topology, :enabled) == true
end

.exchange_name(base_name, tenant_id: nil) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/legion/transport/tenant_topology.rb', line 13

def self.exchange_name(base_name, tenant_id: nil)
  return base_name unless enabled?

  tid = tenant_id || current_tenant_id
  return base_name if tid.nil? || tid == 'default' || shared?(base_name)

  format(prefix_format, tenant_id: tid, name: base_name)
end

.queue_name(base_name, tenant_id: nil) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/legion/transport/tenant_topology.rb', line 22

def self.queue_name(base_name, tenant_id: nil)
  return base_name unless enabled?

  tid = tenant_id || current_tenant_id
  return base_name if tid.nil? || tid == 'default'

  format(prefix_format, tenant_id: tid, name: base_name)
end

.shared?(name) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
# File 'lib/legion/transport/tenant_topology.rb', line 31

def self.shared?(name)
  configured_shared_exchanges.any? do |entry|
    name == entry || name.start_with?("#{entry}.")
  end
end