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