From ecc9d306d119e6779946a4615d9bad20baedeeed Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 14 Jun 2025 22:04:10 +0800 Subject: [PATCH] refactor(agent): move agent pool to agent package, rename route.Agent() to route.GetAgent() (cont. 7d17a01) --- agent/pkg/agent/agent_pool.go | 57 +++++++++++++++++++ internal/api/v1/{agents.go => list_agents.go} | 0 2 files changed, 57 insertions(+) create mode 100644 agent/pkg/agent/agent_pool.go rename internal/api/v1/{agents.go => list_agents.go} (100%) diff --git a/agent/pkg/agent/agent_pool.go b/agent/pkg/agent/agent_pool.go new file mode 100644 index 0000000..6a9b163 --- /dev/null +++ b/agent/pkg/agent/agent_pool.go @@ -0,0 +1,57 @@ +package agent + +import ( + "github.com/yusing/go-proxy/internal/common" + "github.com/yusing/go-proxy/internal/utils/functional" +) + +var agentPool = functional.NewMapOf[string, *AgentConfig]() + +func init() { + if common.IsTest { + agentPool.Store("test-agent", &AgentConfig{ + Addr: "test-agent", + }) + } +} + +func GetAgent(agentAddrOrDockerHost string) (*AgentConfig, bool) { + if !IsDockerHostAgent(agentAddrOrDockerHost) { + return getAgentByAddr(agentAddrOrDockerHost) + } + return getAgentByAddr(GetAgentAddrFromDockerHost(agentAddrOrDockerHost)) +} + +func GetAgentByName(name string) (*AgentConfig, bool) { + for _, agent := range agentPool.Range { + if agent.Name() == name { + return agent, true + } + } + return nil, false +} + +func AddAgent(agent *AgentConfig) { + agentPool.Store(agent.Addr, agent) +} + +func RemoveAgent(agent *AgentConfig) { + agentPool.Delete(agent.Addr) +} + +func RemoveAllAgents() { + agentPool.Clear() +} + +func ListAgents() []*AgentConfig { + agents := make([]*AgentConfig, 0, agentPool.Size()) + for _, agent := range agentPool.Range { + agents = append(agents, agent) + } + return agents +} + +func getAgentByAddr(addr string) (agent *AgentConfig, ok bool) { + agent, ok = agentPool.Load(addr) + return +} diff --git a/internal/api/v1/agents.go b/internal/api/v1/list_agents.go similarity index 100% rename from internal/api/v1/agents.go rename to internal/api/v1/list_agents.go