Class: Legion::Gaia::Router::WorkerRouting
- Inherits:
-
Object
- Object
- Legion::Gaia::Router::WorkerRouting
- Includes:
- Logging::Helper
- Defined in:
- lib/legion/gaia/router/worker_routing.rb
Instance Attribute Summary collapse
-
#allowed_worker_ids ⇒ Object
readonly
Returns the value of attribute allowed_worker_ids.
Instance Method Summary collapse
- #clear ⇒ Object
-
#initialize(allowed_worker_ids: []) ⇒ WorkerRouting
constructor
A new instance of WorkerRouting.
- #register(identity:, worker_id:) ⇒ Object
- #registered_identities ⇒ Object
- #resolve(identity) ⇒ Object
- #resolve_from_db(identity) ⇒ Object
- #resolve_worker_id(identity) ⇒ Object
- #size ⇒ Object
- #unregister(identity) ⇒ Object
- #worker_allowed?(worker_id) ⇒ Boolean
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_ids ⇒ Object (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
#clear ⇒ Object
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_identities ⇒ Object
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 |
#size ⇒ Object
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
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 |