namespace RemoteExec.Client.LoadBalancingStrategies; /// /// A load balancing strategy that selects servers based on CPU usage, active tasks, and backlog. /// internal class ResourceAwareStrategy : ILoadBalancingStrategy { /// public ServerConnection? SelectServer(IEnumerable availableServers) { return availableServers.MinBy(s => { if (s.Metrics == null) { return double.MaxValue; } double cpuScore = s.Metrics.CpuUsage; double activeTaskScore = s.Metrics.ActiveTasks * 10; double backlogScore = s.TaskChannel.Reader.Count * 50; return cpuScore + activeTaskScore + backlogScore; }); } }