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.

251 lines
12 KiB

using System.ComponentModel.DataAnnotations;
namespace LTEMvcApp.Models
{
/// <summary>
/// 日志层配置
/// </summary>
public class LogLayerConfig
{
/// <summary>
/// 日志级别
/// </summary>
[Required]
public string Level { get; set; } = "warn";
/// <summary>
/// 最大大小
/// </summary>
public int MaxSize { get; set; } = 1;
/// <summary>
/// 是否包含负载
/// </summary>
public bool Payload { get; set; } = false;
/// <summary>
/// 过滤器(用于兼容性)
/// </summary>
public string Filter { get; set; } = "warn";
1 month ago
/// <summary>
/// 颜色代码
/// </summary>
public string Color { get; set; } = "#000000";
/// <summary>
/// 方向配置
/// </summary>
public Dictionary<string, int> Direction { get; set; } = new();
/// <summary>
/// 是否为EPC相关
/// </summary>
public bool EPC { get; set; } = false;
/// <summary>
/// 调试配置
/// </summary>
public DebugConfig? Debug { get; set; }
/// <summary>
/// 最大配置
/// </summary>
public MaxConfig? Max { get; set; }
}
/// <summary>
/// 调试配置
/// </summary>
public class DebugConfig
{
public string Level { get; set; } = "debug";
public int MaxSize { get; set; } = 1;
}
/// <summary>
/// 最大配置
/// </summary>
public class MaxConfig
{
public int MaxSize { get; set; } = 32;
}
/// <summary>
/// 日志层类型枚举
/// </summary>
public static class LogLayerTypes
{
public const string PHY = "PHY";
public const string MAC = "MAC";
public const string RLC = "RLC";
public const string PDCP = "PDCP";
public const string RRC = "RRC";
public const string NAS = "NAS";
public const string S1AP = "S1AP";
public const string NGAP = "NGAP";
public const string GTPU = "GTPU";
1 month ago
public const string GTPC = "GTPC";
public const string IP = "IP";
public const string X2AP = "X2AP";
public const string XnAP = "XnAP";
public const string M2AP = "M2AP";
1 month ago
public const string IMS = "IMS";
public const string CX = "CX";
public const string RX = "RX";
public const string COM = "COM";
public const string SIP = "SIP";
public const string MEDIA = "MEDIA";
public const string RTP = "RTP";
public const string PROD = "PROD";
public const string S6 = "S6";
public const string S13 = "S13";
public const string SGsAP = "SGsAP";
public const string SBcAP = "SBcAP";
public const string N8 = "N8";
public const string N12 = "N12";
public const string N13 = "N13";
public const string N17 = "N17";
public const string N50 = "N50";
public const string MMS = "MMS";
public const string HTTP2 = "HTTP2";
public const string LCSAP = "LCSAP";
public const string LPPa = "LPPa";
public const string NL1 = "NL1";
public const string NRPPa = "NRPPa";
public const string IKEV2 = "IKEV2";
public const string SWU = "SWU";
public const string NWU = "NWU";
public const string IPSEC = "IPSEC";
public const string N3IWF = "N3IWF";
public const string TRX = "TRX";
public const string MON = "MON";
public const string EVENT = "EVENT";
1 month ago
public const string ALARM = "ALARM";
public const string LIC = "LIC";
public const string OTS = "OTS";
public const string ERROR = "ERROR";
/// <summary>
/// 获取所有日志层类型
/// </summary>
1 month ago
public static readonly string[] NEWAllLayers = new[]
{
1 month ago
PHY, MAC, RLC, PDCP, RRC, NAS, S1AP, NGAP, GTPU, GTPC, IP, X2AP, XnAP, M2AP,
IMS, CX, RX, COM, SIP, MEDIA, RTP, PROD, S6, S13, SGsAP, SBcAP, N8, N12, N13,
N17, N50, MMS, HTTP2, LCSAP, LPPa, NL1, NRPPa, IKEV2, SWU, NWU, IPSEC, N3IWF,
TRX, MON, EVENT, ALARM, LIC, OTS, ERROR
};
1 month ago
/// <summary>
/// 获取所有日志层类型
/// </summary>
public static readonly string[] AllLayers = new[]
{
PHY, MAC, RLC, PDCP, RRC, NAS, S1AP, NGAP, GTPU, X2AP, XnAP, M2AP
};
/// <summary>
/// 获取日志级别选项
/// </summary>
public static readonly string[] LogLevels = new[]
{
"debug", "info", "warn", "error"
};
/// <summary>
/// 获取默认日志级别
/// </summary>
public static string GetDefaultLevel(string layer)
{
return layer switch
{
NAS or RRC or S1AP or NGAP or X2AP => "debug",
EVENT or M2AP => "info",
_ => "warn"
};
}
1 month ago
/// <summary>
/// 获取层配置
/// </summary>
/// <returns>层配置字典</returns>
public static Dictionary<string, LogLayerConfig> GetLayerConfigs()
{
return new Dictionary<string, LogLayerConfig>
{
[PHY] = new() { Color = "#606070", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 1 }, Debug = new() { Level = "debug", MaxSize = 1 } },
[MAC] = new() { Color = "#10A0FF", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 1 }, Debug = new() { Level = "debug", MaxSize = 1 } },
[RLC] = new() { Color = "#FFFF80", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 1 } },
[PDCP] = new() { Color = "#B0D0B0", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 1 } },
[RRC] = new() { Color = "#00FF60", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 1 }, Debug = new() { Level = "debug", MaxSize = 1 } },
[NAS] = new() { Color = "#90FFC0", Direction = new() { ["UE"] = 2, ["PROBE"] = 3, ["ENB"] = 3, ["N3IWF"] = 3, ["MME"] = 1 }, Debug = new() { Level = "debug", MaxSize = 1 } },
[GTPU] = new() { Color = "#FF80FF", Direction = new() { ["ENB"] = 2, ["N3IWF"] = 2, ["MME"] = 1, ["MBMSGW"] = 1, ["UE"] = 1, ["RUE"] = 2 }, EPC = true, Max = new() { MaxSize = 32 } },
[GTPC] = new() { Color = "#FFC0FF", Direction = new() { ["MME"] = 2 }, EPC = true },
[IP] = new() { Color = "#E0E0E0", Direction = new() { ["RUE"] = 2, ["UE"] = 2, ["N3IWF"] = 3, ["PROBE"] = 3, ["MME"] = 3 }, Max = new() { MaxSize = 32 } },
[S1AP] = new() { Color = "#80FF00", Direction = new() { ["ENB"] = 2, ["MME"] = 1 }, EPC = true, Debug = new() { Level = "debug", MaxSize = 1 } },
[NGAP] = new() { Color = "#5DD122", Direction = new() { ["ENB"] = 2, ["MME"] = 1, ["N3IWF"] = 2 }, EPC = true, Debug = new() { Level = "debug", MaxSize = 1 } },
[X2AP] = new() { Color = "#FF8000", Direction = new() { ["ENB"] = 2 } },
[XnAP] = new() { Color = "#FFB020", Direction = new() { ["ENB"] = 2 } },
[M2AP] = new() { Color = "#7F675B", Direction = new() { ["ENB"] = 2, ["MBMSGW"] = 1 }, EPC = true },
[IMS] = new() { Color = "#C0FF80", Direction = new() { ["MME"] = 2, ["IMS"] = 1 }, Debug = new() { Level = "debug", MaxSize = 1 }, EPC = true },
[CX] = new() { Color = "#F49542", Direction = new() { ["MME"] = 2, ["IMS"] = 1 }, EPC = true },
[RX] = new() { Color = "#D4A190", Direction = new() { ["MME"] = 2, ["IMS"] = 1 }, EPC = true },
[COM] = new() { Color = "#C000FF", Direction = new() { ["*"] = 2 } },
[SIP] = new() { Color = "#C080FF", Direction = new() { ["IMS"] = 1 }, EPC = true, Debug = new() { Level = "debug", MaxSize = 1 } },
[MEDIA] = new() { Color = "#800040", Direction = new() { ["IMS"] = 1 }, EPC = true },
[RTP] = new() { Color = "#FF00C0", Direction = new() { ["IMS"] = 1 }, EPC = true },
[PROD] = new() { Color = "#80C0FF", Direction = new() { } },
[S6] = new() { Color = "#F44B42", Direction = new() { ["MME"] = 2 }, EPC = true },
[S13] = new() { Color = "#D6F953", Direction = new() { ["MME"] = 2 }, EPC = true },
[SGsAP] = new() { Color = "#FF7DB8", Direction = new() { ["MME"] = 2 }, EPC = true },
[SBcAP] = new() { Color = "#8FA00F", Direction = new() { ["MME"] = 2 }, EPC = true },
[N8] = new() { Color = "#106020", Direction = new() { ["MME"] = 2 }, EPC = true },
[N12] = new() { Color = "#602020", Direction = new() { ["MME"] = 2 }, EPC = true },
[N13] = new() { Color = "#202060", Direction = new() { ["MME"] = 2 }, EPC = true },
[N17] = new() { Color = "#D6F953", Direction = new() { ["MME"] = 2 }, EPC = true },
[N50] = new() { Color = "#8FA00F", Direction = new() { ["MME"] = 2 }, EPC = true },
[MMS] = new() { Color = "#B4D98F", Direction = new() { ["MME"] = 2 }, EPC = true },
[HTTP2] = new() { Color = "#644824", Direction = new() { ["MME"] = 2 }, EPC = true },
[LCSAP] = new() { Color = "#cfd50d", Direction = new() { ["MME"] = 2 }, EPC = true },
[LPPa] = new() { Color = "#0dcfd5", Direction = new() { ["ENB"] = 2, ["MME"] = 3 }, EPC = true },
[NL1] = new() { Color = "#d040cf", Direction = new() { ["MME"] = 2 }, EPC = true },
[NRPPa] = new() { Color = "#0dd5cf", Direction = new() { ["ENB"] = 2, ["MME"] = 3 }, EPC = true },
[IKEV2] = new() { Color = "#C0B732", Direction = new() { ["UE"] = 2, ["MME"] = 1, ["N3IWF"] = 1 } },
[SWU] = new() { Color = "#101080", Direction = new() { ["UE"] = 2, ["MME"] = 1 } },
[NWU] = new() { Color = "#2080B8", Direction = new() { ["UE"] = 2, ["MME"] = 1 } },
[IPSEC] = new() { Color = "#F04010", Direction = new() { ["UE"] = 2, ["IMS"] = 1, ["N3IWF"] = 1, ["MME"] = 1 }, EPC = true, Max = new() { MaxSize = 32 } },
[N3IWF] = new() { Color = "#C080C0", Direction = new() { ["UE"] = 2, ["N3IWF"] = 1 } },
[TRX] = new() { Color = "#42C0a0", Direction = new() { ["UE"] = 2, ["ENB"] = 1 }, Debug = new() { Level = "debug" } },
[MON] = new() { Color = "#C0C080", Direction = new() { } },
[EVENT] = new() { Color = "#80C0FF", Direction = new() { } },
[ALARM] = new() { Color = "#FF8040", Direction = new() { } },
[LIC] = new() { Color = "#ff80c0", Direction = new() { ["LICENSE"] = 1 } },
[OTS] = new() { Color = "#8080FF", Direction = new() { } },
[ERROR] = new() { Color = "#ff0000", Direction = new() { } }
};
}
/// <summary>
/// 获取层配置
/// </summary>
/// <param name="layerName">层名称</param>
/// <returns>层配置</returns>
public static LogLayerConfig? GetLayerConfig(string layerName)
{
var configs = GetLayerConfigs();
return configs.TryGetValue(layerName, out var config) ? config : null;
}
/// <summary>
/// 验证层名称是否有效
/// </summary>
/// <param name="layerName">层名称</param>
/// <returns>是否有效</returns>
public static bool IsValidLayer(string layerName)
{
return AllLayers.Contains(layerName);
}
}
}