|
|
@ -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 |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 检查 RAG 相关端点状态
|
|
|
|
/// 检查 RAG 端点
|
|
|
|
/// </summary>
|
|
|
|
/// <returns>检查结果</returns>
|
|
|
|
private async Task<EndPointStatusResult> CheckRagEndPointsAsync(NetworkIPEndPointCollection endPoints) |
|
|
|
private async Task CheckRagEndPointAsync(NetworkIPEndPointCollection endPoints, List<EndPointStatusResult> 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); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 检查 Core 相关端点状态
|
|
|
|
/// 检查 Core 端点(IMS 和 CN)
|
|
|
|
/// </summary>
|
|
|
|
/// <returns>检查结果</returns>
|
|
|
|
private async Task<EndPointStatusResult> CheckCoreEndPointsAsync(NetworkIPEndPointCollection endPoints) |
|
|
|
private async Task CheckCoreEndPointsAsync(NetworkIPEndPointCollection endPoints, List<EndPointStatusResult> results) |
|
|
|
{ |
|
|
|
var result = new EndPointStatusResult { IsSuccess = true }; |
|
|
|
var errorMessages = new List<string>(); |
|
|
|
|
|
|
|
// 检查 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; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
@ -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 |
|
|
|
/// </summary>
|
|
|
|
/// <param name="comAddr">通信地址</param>
|
|
|
|
/// <param name="endPointType">端点类型</param>
|
|
|
|
private async Task<(bool isSuccess, string data)> CheckEndPointStatusAsync(string comAddr, string endPointType) |
|
|
|
private async Task<bool> 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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |