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

Inherits:
Object
  • Object
show all
Includes:
Logging::Helper
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.



11
12
13
14
15
16
# File 'lib/legion/gaia/router/worker_routing.rb', line 11

def initialize(allowed_worker_ids: [])
  log.unknown "initialize(allowed_worker_ids: #{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.



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

def allowed_worker_ids
  @allowed_worker_ids
end

Instance Method Details

#clearObject



48
49
50
# File 'lib/legion/gaia/router/worker_routing.rb', line 48

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

#register(identity:, worker_id:) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/legion/gaia/router/worker_routing.rb', line 18

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



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

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

#resolve(identity) ⇒ Object



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

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

#resolve_from_db(identity) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/legion/gaia/router/worker_routing.rb', line 58

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



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

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

#sizeObject



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

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

#unregister(identity) ⇒ Object



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

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

#worker_allowed?(worker_id) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
# File 'lib/legion/gaia/router/worker_routing.rb', line 52

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

  allowed_worker_ids.include?(worker_id)
end