diff --git a/src/CncService/Impl/DashboardService.cs b/src/CncService/Impl/DashboardService.cs index 9258443..0402ff5 100644 --- a/src/CncService/Impl/DashboardService.cs +++ b/src/CncService/Impl/DashboardService.cs @@ -73,8 +73,26 @@ namespace CncService.Impl public object GetCollectorStatus() { 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 }; } }