using Fleet.Core;
using Monitor.Protocol;
namespace Monitor.Backend.Application;
///
/// Application 通往 Agent 连接的端口(由 Gateway 实现):下发状态变化、发起按需测试。
///
public interface IAgentGateway
{
IReadOnlyCollection OnlineAgents { get; }
bool IsOnline(NodeId agent);
/// 某个 Agent 的期望状态变了:Gateway 重新计算并推送。
void NotifyTaskSetChanged(NodeId agent);
void NotifyAllTaskSetsChanged();
/// 失败时错误码为 probe_offline、test_busy、agent_offline 等。
ValueTask> RunTestAsync(NodeId agent, TestRunParams run, CancellationToken ct);
ValueTask CancelTestAsync(NodeId agent, TestId test, CancellationToken ct);
/// 让 Agent 断开某个 Probe 的会话。返回 Agent 是否真的有这个会话。
ValueTask> DisconnectProbeAsync(NodeId agent, ProbeId probe, CancellationToken ct);
ValueTask DisconnectAsync(NodeId agent, string reason, CancellationToken ct);
}