Module: Legion::MCP::Client::ServerRegistry

Extended by:
Logging::Helper
Defined in:
lib/legion/mcp/client/server_registry.rb

Class Method Summary collapse

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_serversObject



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

.serversObject



41
42
43
# File 'lib/legion/mcp/client/server_registry.rb', line 41

def servers
  @mutex.synchronize { @servers.dup }
end