You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
11 KiB

using CoreAgent.Domain.Helpers;
using CoreAgent.Domain.Interfaces.ProtocolLogHandlers;
using CoreAgent.Domain.Models.Protocol;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace CoreAgent.Infrastructure.Services.ProtocolLogHandlers
{
public class ProtocolLogsParesRanHandle : ProtocolParesHandleLogs
{
private readonly ILogger logger;
private readonly IProtocolLogsProviderObserver observer;
public ProtocolLogsParesRanHandle(IProtocolLogsProviderObserver observer, ILogger logger)
{
this.observer = observer;
this.logger = logger;
}
public override async Task GetTryParesLogDataHandle(ProtocolLog model)
{
try
{
if (model is { Logs: null })
{
logger.LogError($"logs is null =====>GetTryParesLogDataHandle Data {model?.ObjToJson()}");
return;
}
var ParseJsonData = model.Logs.ToString().JsonToObj<ProtocolLogDetail[]>();
//var parseResultData = RanLogParseHandle(ParseJsonData, (model.MessageId ?? 0));
//if (parseResultData.Any())
//{
// var MsgData = new { data = parseResultData, MessageType = CSCIMessageType.ProtocolLogsRAN }.ObjToJson();
// logger.LogInformation($"OnData:{MsgData}");
// observer.OnData(MsgData);
//}
}
catch (Exception ex)
{
logger.LogError($"GetTryParesLogDataHandle Data {model?.ObjToJson()}");
logger.LogError(ex.ToString());
}
}
//#region 分析
//private List<CellularNetworkProtocolLogsEntity> RanLogParseHandle(ProtocolLogDetail[] data, int MessageID)
//{
// List<CellularNetworkProtocolLogsEntity> cellulars = new List<CellularNetworkProtocolLogsEntity>();
// try
// {
// foreach (var msg in data)
// {
// ProtocolLogslayerType LayerType;
// Enum.TryParse(msg.layer, out LayerType);
// string info = string.Empty;
// string TMIS = string.Empty;
// string MessageInfo = msg.data[0];
// if (LayerType == ProtocolLogslayerType.RRC)
// {
// var reg = _regExpRRC_UE_ID.Match(MessageInfo);
// if (reg is { Success: true })
// {
// int ue_id = Convert.ToInt32(reg.Groups[1].ToString(), 16);
// }
// reg = _regExpInfo1.Match(MessageInfo);
// if (reg.Success)
// {
// info = reg.Groups[1].Value;
// MessageInfo = reg.Groups[2].Value;
// GetlogListRRC(msg, MessageInfo);
// }
// reg = _regExpRRC_BC.Match(MessageInfo);
// if (reg is { Success: true })
// {
// string result = string.Join("\n", msg.data);
// }
// }
// else if (LayerType == ProtocolLogslayerType.NAS)
// {
// var reg = _regExpInfo1.Match(MessageInfo);
// if (reg is { Success: true })
// {
// info = reg.Groups[1].Value;
// MessageInfo = reg.Groups[2].Value;
// TMIS = GetlogListNAS(msg, MessageInfo);
// if (info.Equals("BCCH_NR"))
// {
// }
// }
// }
// else if (LayerType == ProtocolLogslayerType.PHY)
// {
// var reg = _regExpPhy.Match(MessageInfo);
// if (reg is { Success: true })
// {
// int cell = Convert.ToInt32(reg.Groups[1].Value, 16);
// int rnti = Convert.ToInt32(reg.Groups[2].Value, 16);
// var channel = reg.Groups[4].Value;
// string[] frames = reg.Groups[3].Value.Split('.');
// int frame = Convert.ToInt32(frames[0]) - 0;
// int slot = Convert.ToInt32(frames[1]) - 0;
// }
// }
// else if (LayerType == ProtocolLogslayerType.MAC)
// {
// var reg = _regExpCellID.Match(MessageInfo);
// if (reg is { Success: true })
// {
// int cell = Convert.ToInt32(reg.Groups[1].Value, 16);
// MessageInfo = reg.Groups[2].Value;
// }
// }
// CellularNetworkProtocolLogsEntity entity = new CellularNetworkProtocolLogsEntity
// {
// MessageID = MessageID,
// CellID = msg.cell,
// Timestamp = msg.timestamp,
// UEID = msg.ue_id,
// Time = msg.timestamp.UnixTimeStamp13ToBeijingTime().TimeOfDay,
// ProtocolLayer = LayerType,
// Info = info,
// TMSI = TMIS,
// Message = MessageInfo,
// ProtocolType = msg.src,
// Index = msg.idx,
// Direction = msg.dir switch
// {
// "UL" => DirectionLogsType.UL,
// "DL" => DirectionLogsType.DL,
// _ => DirectionLogsType._
// },
// MessageData = msg.data.ToArray(),
// };
// cellulars.Add(entity);
// }
// return cellulars;
// }
// catch (Exception ex)
// {
// logger.Error("ran logs analysis combination" + ex.Message);
// return cellulars;
// }
//}
//private void GetlogListRRC(ProtocolNetWorkCoreLogsDetailEntity log, string logType)
//{
// try
// {
// switch (logType.ToLower())
// {
// case "sib1":
// break;
// case "sib":
// break;
// case "rrc connection request":
// var lte = GetFindData(log.data, _regExpRRC_TMSI);
// if (lte is { Success: true })
// {
// int tmsi = GetTMSI(log, lte.Groups[2].Value.ToString());
// }
// break;
// case "rrc connection reconfiguration":
// var connection = GetFindData(log.data, _regExpRRC_TMSI);
// if (connection is { Success: true })
// {
// int rnti = GetRNTI(log, connection.Groups[1].Value);
// }
// break;
// case "rrc connection reestablishment request":
// var request = GetFindData(log.data, _regExpRRC_TMSI);
// if (request is { Success: true })
// {
// int rnti = GetRNTI(log, request.Groups[1].Value);
// }
// break;
// case "rrc setup request":
// var RRCrequest = GetFindData(log.data, _regExpRRC_TMSI);
// break;
// case "ue capability information":
// break;
// default:
// break;
// }
// }
// catch (Exception ex)
// {
// logger.Error("GetlogListRRC" + ex.Message);
// }
//}
//private string GetlogListNAS(ProtocolNetWorkCoreLogsDetailEntity log, string logType)
//{
// switch (logType.ToLower())
// {
// case "attach accept":
// var lte = GetFindData(log.data, _regExpNAS_TMSI);
// if (lte is not null && !string.IsNullOrWhiteSpace(lte.Groups[1]?.ToString()))
// {
// int tmsi = GetTMSI(log, lte.Groups[1].Value);
// return lte.Groups[1].Value;
// }
// break;
// case "attach request":
// var data = log.data;
// break;
// case "registration accept":
// var Nr = GetFindData(log.data, _regExpNAS_5GTMSI);
// if (Nr is not null && !string.IsNullOrWhiteSpace(Nr?.Groups[1]?.ToString()))
// {
// int tmsi = GetTMSI(log, Nr.Groups[1].Value);
// return Nr.Groups[1].Value;
// }
// break;
// case "registration request":
// var requestData = log.data;
// break;
// }
// return string.Empty;
//}
//private Match GetFindData(List<string> data, Regex regExp)
//{
// if (data.Any())
// {
// for (var i = 0; i < data.Count; i++)
// {
// Match m = regExp.Match(data[i]);
// if (m.Success)
// return m;
// }
// }
// return default;
//}
//private int GetTMSI(ProtocolNetWorkCoreLogsDetailEntity log, string tmsi)
//{
// return Convert.ToInt32(tmsi, 16);
//}
//private int GetRNTI(ProtocolNetWorkCoreLogsDetailEntity log, string rnti)
//{
// // 定义正则表达式模式
// string pattern = @"'([\dA-F]+)'H";
// // 创建正则表达式对象
// Regex regex = new Regex(pattern);
// // 进行匹配
// Match match = regex.Match(rnti);
// // 检查是否有匹配
// if (match.Success)
// return Convert.ToInt32(match.Groups[1].Value, 16);
// else return 0;
//}
//private bool GetCheckLayerTypeInfo(string layer)
//{
// string[] ArraryLayer = new string[] { "PDSCH", "PDCCH", "EPDCCH", "PUSCH", "PUCCH", "NPDSCH", "NPUSCH", "NPBCH", "BCCH-NR", "HINTS", "SRS", "CSI", "SIM-Even", "IP-SIM" };
// return ArraryLayer.Any(s => s.Equals(layer));
//}
//#endregion
}
}