Class: Legion::Gaia::Router::WorkerRouting

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/gaia/router/worker_routing.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(allowed_worker_ids: []) ⇒ WorkerRouting

Returns a new instance of WorkerRouting.



9
10
11
12
13
# File 'lib/legion/gaia/router/worker_routing.rb', line 9

def initialize(allowed_worker_ids: [])
  @routes = {}
  @allowed_worker_ids = allowed_worker_ids
  @mutex = Mutex.new
end

Instance Attribute Details

#allowed_worker_idsObject (readonly)

Returns the value of attribute allowed_worker_ids.



7
8
9
# File 'lib/legion/gaia/router/worker_routing.rb', line 7

def allowed_worker_ids
  @allowed_worker_ids
end

Instance Method Details

#clearObject



45
46
47
# File 'lib/legion/gaia/router/worker_routing.rb', line 45

def clear
  @mutex.synchronize { @routes.clear }
end

#register(identity:, worker_id:) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/legion/gaia/router/worker_routing.rb', line 15

def register(identity:, worker_id:)
  return { registered: false, reason: :not_allowed } unless worker_allowed?(worker_id)

  @mutex.synchronize do
    @routes[identity] = { worker_id: worker_id, registered_at: Time.now.utc }
  end
  { registered: true, identity: identity, worker_id: worker_id }
end

#registered_identitiesObject



37
38
39
# File 'lib/legion/gaia/router/worker_routing.rb', line 37

def registered_identities
  @mutex.synchronize { @routes.keys }
end

#resolve(identity) ⇒ Object



24
25
26
# File 'lib/legion/gaia/router/worker_routing.rb', line 24

def resolve(identity)
  @mutex.synchronize { @routes[identity] }
end

#resolve_from_db(identity) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/legion/gaia/router/worker_routing.rb', line 55

def resolve_from_db(identity)
  return nil unless defined?(Legion::Data::Model::DigitalWorker)

  worker = Legion::Data::Model::DigitalWorker.first(entra_oid: identity)
  return nil unless worker&.active?

  register(identity: identity, worker_id: worker.worker_id)
  worker.worker_id
end

#resolve_worker_id(identity) ⇒ Object



28
29
30
31
# File 'lib/legion/gaia/router/worker_routing.rb', line 28

def resolve_worker_id(identity)
  route = resolve(identity)
  route&.fetch(:worker_id, nil)
end

#sizeObject



41
42
43
# File 'lib/legion/gaia/router/worker_routing.rb', line 41

def size
  @mutex.synchronize { @routes.size }
end

#unregister(identity) ⇒ Object



33
34
35
# File 'lib/legion/gaia/router/worker_routing.rb', line 33

def unregister(identity)
  @mutex.synchronize { @routes.delete(identity) }
end

#worker_allowed?(worker_id) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
# File 'lib/legion/gaia/router/worker_routing.rb', line 49

def worker_allowed?(worker_id)
  return true if allowed_worker_ids.empty?

  allowed_worker_ids.include?(worker_id)
end