From 3809594434dda8ce0525d89df19a11709104f521 Mon Sep 17 00:00:00 2001
From: root <295172551@qq.com>
Date: Sun, 15 Jun 2025 11:46:00 +0800
Subject: [PATCH] =?UTF-8?q?NetworkStatusMonitor=20=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=91=BD=E5=90=8D=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/Network/NetworkStatusMonitor.cs | 134 ++++++++----------
1 file changed, 60 insertions(+), 74 deletions(-)
diff --git a/CoreAgent.Infrastructure/Services/Network/NetworkStatusMonitor.cs b/CoreAgent.Infrastructure/Services/Network/NetworkStatusMonitor.cs
index b00bbda..50e7b8c 100644
--- a/CoreAgent.Infrastructure/Services/Network/NetworkStatusMonitor.cs
+++ b/CoreAgent.Infrastructure/Services/Network/NetworkStatusMonitor.cs
@@ -101,20 +101,16 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
switch (configType)
{
case NetworkConfigType.BothRagAndCore:
- var ragResult = await CheckRagEndPointsAsync(endPoints);
- results.Add(ragResult);
- var coreResult = await CheckCoreEndPointsAsync(endPoints);
- results.Add(coreResult);
+ await CheckRagEndPointAsync(endPoints, results);
+ await CheckCoreEndPointsAsync(endPoints, results);
break;
case NetworkConfigType.RagOnly:
- var ragOnlyResult = await CheckRagEndPointsAsync(endPoints);
- results.Add(ragOnlyResult);
+ await CheckRagEndPointAsync(endPoints, results);
break;
case NetworkConfigType.CoreOnly:
- var coreOnlyResult = await CheckCoreEndPointsAsync(endPoints);
- results.Add(coreOnlyResult);
+ await CheckCoreEndPointsAsync(endPoints, results);
break;
case NetworkConfigType.None:
@@ -127,78 +123,32 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
}
///
- /// 检查 RAG 相关端点状态
+ /// 检查 RAG 端点
///
- /// 检查结果
- private async Task CheckRagEndPointsAsync(NetworkIPEndPointCollection endPoints)
+ private async Task CheckRagEndPointAsync(NetworkIPEndPointCollection endPoints, List results)
{
- var result = new EndPointStatusResult();
-
- if (endPoints.RanEndPoint == null)
- {
- result.IsSuccess = true;
- return result;
- }
-
- result.ComAddr = endPoints.RanEndPoint.ComAddr;
- var ranResult = await CheckRanStatusAsync(endPoints.RanEndPoint);
- _logger.LogInformation("RAN 端点状态检查: {ComAddr}, 结果: {IsSuccess}",
- ranResult.ComAddr, ranResult.IsSuccess);
-
- result.IsSuccess = ranResult.IsSuccess;
- result.ErrorMessage = ranResult.ErrorMessage;
- return result;
+ var ragResult = await CheckRanStatusAsync(endPoints.RanEndPoint);
+ results.Add(ragResult);
}
///
- /// 检查 Core 相关端点状态
+ /// 检查 Core 端点(IMS 和 CN)
///
- /// 检查结果
- private async Task CheckCoreEndPointsAsync(NetworkIPEndPointCollection endPoints)
+ private async Task CheckCoreEndPointsAsync(NetworkIPEndPointCollection endPoints, List results)
{
- var result = new EndPointStatusResult { IsSuccess = true };
- var errorMessages = new List();
-
// 检查 IMS 端点
if (endPoints.ImsEndPoints != null && endPoints.ImsEndPoints.Any())
{
var imsResults = await CheckImsStatusAsync(endPoints.ImsEndPoints);
- foreach (var imsResult in imsResults)
- {
- _logger.LogInformation("IMS 端点状态检查: {ComAddr}, 结果: {IsSuccess}",
- imsResult.ComAddr, imsResult.IsSuccess);
-
- if (!imsResult.IsSuccess)
- {
- result.IsSuccess = false;
- errorMessages.Add($"IMS端点 {imsResult.ComAddr}: {imsResult.ErrorMessage}");
- }
- }
+ results.AddRange(imsResults);
}
// 检查 CN 端点
if (endPoints.CnEndPoints != null && endPoints.CnEndPoints.Any())
{
var cnResults = await CheckCnStatusAsync(endPoints.CnEndPoints);
- foreach (var cnResult in cnResults)
- {
- _logger.LogInformation("CN 端点状态检查: {ComAddr}, 结果: {IsSuccess}",
- cnResult.ComAddr, cnResult.IsSuccess);
-
- if (!cnResult.IsSuccess)
- {
- result.IsSuccess = false;
- errorMessages.Add($"CN端点 {cnResult.ComAddr}: {cnResult.ErrorMessage}");
- }
- }
+ results.AddRange(cnResults);
}
-
- if (!result.IsSuccess)
- {
- result.ErrorMessage = string.Join("; ", errorMessages);
- }
-
- return result;
}
///
@@ -221,8 +171,7 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
result.ComAddr = ranEndPoint.ComAddr;
try
{
- await CheckEndPointStatusAsync(ranEndPoint.ComAddr, "RAN");
- result.IsSuccess = true;
+ result.IsSuccess= await CheckEndPointStatusAsync(ranEndPoint.ComAddr, "RAN");
}
catch (Exception ex)
{
@@ -257,8 +206,7 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
try
{
- await CheckEndPointStatusAsync(imsEndPoint.ComAddr, "IMS");
- statusResult.IsSuccess = true;
+ statusResult.IsSuccess = await CheckEndPointStatusAsync(imsEndPoint.ComAddr, "IMS");
}
catch (Exception ex)
{
@@ -296,8 +244,7 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
try
{
- await CheckEndPointStatusAsync(cnEndPoint.ComAddr, "CN");
- statusResult.IsSuccess = true;
+ statusResult.IsSuccess = await CheckEndPointStatusAsync(cnEndPoint.ComAddr, "CN");
}
catch (Exception ex)
{
@@ -317,21 +264,60 @@ public class NetworkStatusMonitor : INetworkStatusMonitor
///
/// 通信地址
/// 端点类型
- private async Task<(bool isSuccess, string data)> CheckEndPointStatusAsync(string comAddr, string endPointType)
+ private async Task CheckEndPointStatusAsync(string comAddr, string endPointType)
{
var command = $"{_appSettings.WebSocketJsPath} {comAddr} '{_appSettings.WebSocketCommands.Stats.ToJson()}'";
+ _logger.LogInformation("开始检查{EndPointType}端点状态,地址: {ComAddr}", endPointType, comAddr);
+
var result = await _commandExecutor.ExecuteCommandAsync(command, new CancellationTokenSource());
+ if (string.IsNullOrEmpty(result.Output))
+ {
+ _logger.LogWarning("{EndPointType}端点 {ComAddr} 状态检查失败: 返回数据为空",
+ endPointType, comAddr);
+ return false;
+ }
+
+ var parsedData = result.Output.ParseWsResultLogs();
+
+ // 验证是否为有效的JSON且内容不为空
+ try
+ {
+ using var jsonDoc = JsonDocument.Parse(parsedData);
+ var root = jsonDoc.RootElement;
+
+ if (root.ValueKind == JsonValueKind.Object && root.EnumerateObject().Count() == 0)
+ {
+ _logger.LogWarning("{EndPointType}端点 {ComAddr} 状态检查失败: 返回的JSON数据为空对象",
+ endPointType, comAddr);
+ return false;
+ }
+ if (root.ValueKind == JsonValueKind.Array && root.GetArrayLength() == 0)
+ {
+ _logger.LogWarning("{EndPointType}端点 {ComAddr} 状态检查失败: 返回的JSON数据为空数组",
+ endPointType, comAddr);
+ return false;
+ }
+ }
+ catch (JsonException)
+ {
+ _logger.LogWarning("{EndPointType}端点 {ComAddr} 状态检查失败: 返回数据不是有效的JSON格式",
+ endPointType, comAddr);
+ return false;
+ }
+
if (result.IsSuccess)
{
- _logger.LogInformation("{EndPointType} 端点 {ComAddr} 状态检查成功", endPointType, comAddr);
- return (result.IsSuccess, result.Output.ParseWsResultLogs());
+ _logger.LogInformation("{EndPointType}端点 {ComAddr} 状态检查成功,返回数据: {Data}",
+ endPointType, comAddr, parsedData);
+ return true;
}
else
{
- var error = $"检查失败: {result.Error}";
- _logger.LogWarning("{EndPointType} 端点 {ComAddr} 状态检查失败: {Error}", endPointType, comAddr, result.Error);
- return (result.IsSuccess, result.Output.ParseWsResultLogs());
+ var error = $"检查失败: {result.Error},返回数据: {result.Output}";
+ _logger.LogWarning("{EndPointType}端点 {ComAddr} 状态检查失败: {Error}",
+ endPointType, comAddr, error);
+ return false;
}
}
}
\ No newline at end of file