Module: Legion::MCP::Client::ServerRegistry
- Extended by:
- Logging::Helper
- Defined in:
- lib/legion/mcp/client/server_registry.rb
Class Method Summary collapse
- .deregister(name) ⇒ Object
- .healthy_servers ⇒ Object
- .load_from_settings(settings_hash) ⇒ Object
- .mark_healthy(name) ⇒ Object
- .mark_unhealthy(name, cooldown: 60) ⇒ Object
- .register(name, **config) ⇒ Object
- .reset! ⇒ Object
- .servers ⇒ Object
Class Method Details
.deregister(name) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/legion/mcp/client/server_registry.rb', line 33 def deregister(name) log.debug("[mcp][server_registry] action=deregister server=#{name}") @mutex.synchronize do @servers.delete(name) @health.delete(name) end end |
.healthy_servers ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/legion/mcp/client/server_registry.rb', line 45 def healthy_servers @mutex.synchronize do @servers.select do |name, _| h = @health[name] next true if h.nil? || h[:healthy] cooldown = h[:cooldown] || 60 if Time.now - (h[:marked_at] || Time.now) >= cooldown h[:healthy] = true true else false end end end end |
.load_from_settings(settings_hash) ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/legion/mcp/client/server_registry.rb', line 15 def load_from_settings(settings_hash) log.debug("[mcp][server_registry] action=load_from_settings count=#{settings_hash.size}") @mutex.synchronize do settings_hash.each do |name, config| @servers[name] = config.merge(registered_at: Time.now, source: :settings) @health[name] = { healthy: true, last_check: Time.now } end end end |
.mark_healthy(name) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/legion/mcp/client/server_registry.rb', line 74 def mark_healthy(name) log.debug("[mcp][server_registry] action=mark_healthy server=#{name}") @mutex.synchronize do @health[name] = { healthy: true, last_check: Time.now } end end |
.mark_unhealthy(name, cooldown: 60) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/legion/mcp/client/server_registry.rb', line 62 def mark_unhealthy(name, cooldown: 60) log.debug("[mcp][server_registry] action=mark_unhealthy server=#{name} cooldown=#{cooldown}") @mutex.synchronize do @health[name] = { healthy: false, marked_at: Time.now, cooldown: cooldown, last_check: Time.now } end end |
.register(name, **config) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/legion/mcp/client/server_registry.rb', line 25 def register(name, **config) log.debug("[mcp][server_registry] action=register server=#{name}") @mutex.synchronize do @servers[name] = config.merge(registered_at: Time.now, source: :dynamic) @health[name] = { healthy: true, last_check: Time.now } end end |
.reset! ⇒ Object
81 82 83 84 85 86 |
# File 'lib/legion/mcp/client/server_registry.rb', line 81 def reset! @mutex.synchronize do @servers.clear @health.clear end end |
.servers ⇒ Object
41 42 43 |
# File 'lib/legion/mcp/client/server_registry.rb', line 41 def servers @mutex.synchronize { @servers.dup } end |