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

Defined in:
lib/legion/mcp/client/server_registry.rb

Class Method Summary collapse

Class Method Details

.deregister(name) ⇒ Object



29
30
31
32
33
34
# File 'lib/legion/mcp/client/server_registry.rb', line 29

def deregister(name)
  @mutex.synchronize do
    @servers.delete(name)
    @health.delete(name)
  end
end

.healthy_serversObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legion/mcp/client/server_registry.rb', line 40

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



13
14
15
16
17
18
19
20
# File 'lib/legion/mcp/client/server_registry.rb', line 13

def load_from_settings(settings_hash)
  @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



68
69
70
71
72
# File 'lib/legion/mcp/client/server_registry.rb', line 68

def mark_healthy(name)
  @mutex.synchronize do
    @health[name] = { healthy: true, last_check: Time.now }
  end
end

.mark_unhealthy(name, cooldown: 60) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/legion/mcp/client/server_registry.rb', line 57

def mark_unhealthy(name, cooldown: 60)
  @mutex.synchronize do
    @health[name] = {
      healthy:    false,
      marked_at:  Time.now,
      cooldown:   cooldown,
      last_check: Time.now
    }
  end
end

.register(name, **config) ⇒ Object



22
23
24
25
26
27
# File 'lib/legion/mcp/client/server_registry.rb', line 22

def register(name, **config)
  @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



74
75
76
77
78
79
# File 'lib/legion/mcp/client/server_registry.rb', line 74

def reset!
  @mutex.synchronize do
    @servers.clear
    @health.clear
  end
end

.serversObject



36
37
38
# File 'lib/legion/mcp/client/server_registry.rb', line 36

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