修复仪表盘采集服务状态判断:增加心跳超时检测

原来只检查心跳表最后一条记录的status字段是否为running,
没有判断心跳是否已过期(服务停止后旧心跳数据仍在)。
现在增加90秒超时判断(3个心跳间隔),超时则显示已停止。
main
haoliang 4 days ago
parent 6e5b296dd4
commit 9e3a759646

@ -73,8 +73,26 @@ namespace CncService.Impl
public object GetCollectorStatus() public object GetCollectorStatus()
{ {
var latest = _collectorHeartbeatRepository.GetLatest("collector-service"); var latest = _collectorHeartbeatRepository.GetLatest("collector-service");
bool isRunning = latest != null && latest.Status == "running";
long uptimeSeconds = isRunning ? (latest.UptimeSeconds ?? 0) : 0; // 心跳超时阈值90秒3个心跳间隔采集服务默认每30秒上报一次
const int heartbeatTimeoutSeconds = 90;
bool isRunning = false;
long uptimeSeconds = 0;
if (latest != null && latest.Status == "running")
{
// 检查最后心跳时间是否在阈值内,超时则判定为已停止
var lastHeartbeat = latest.CreatedAt;
var elapsed = (DateTime.Now - lastHeartbeat).TotalSeconds;
isRunning = elapsed <= heartbeatTimeoutSeconds;
if (isRunning)
{
uptimeSeconds = latest.UptimeSeconds ?? 0;
}
}
return new { status = isRunning ? "running" : "stopped", uptimeSeconds, lastCollectTime = latest?.LastCollectTime }; return new { status = isRunning ? "running" : "stopped", uptimeSeconds, lastCollectTime = latest?.LastCollectTime };
} }
} }

Loading…
Cancel
Save