Browse Source

dsasa

feature/MultiClientLog
hyh 1 month ago
parent
commit
399c1b2164
  1. 12
      LTEMvcApp/Models/LTEClient.cs
  2. 4
      LTEMvcApp/Models/LogLayerConfig.cs
  3. 151
      LTEMvcApp/Views/Home/TestClientConfig.cshtml

12
LTEMvcApp/Models/LTEClient.cs

@ -170,10 +170,15 @@ public class LTEClient
public bool HasSignalRecord { get; set; }
/// <summary>
/// 头信息
/// 头信息
/// </summary>
public string[]? Headers { get; set; }
/// <summary>
/// 模式(ran/ims)
/// </summary>
public string Mode { get; set; } = "ran";
#endregion
#region 日志相关属性
@ -1614,6 +1619,11 @@ public class ClientConfig
/// </summary>
public bool Active { get; set; }
/// <summary>
/// 模式(ran/ims)
/// </summary>
public string Mode { get; set; } = "ran";
/// <summary>
/// 模型
/// </summary>

4
LTEMvcApp/Models/LogLayerConfig.cs

@ -151,6 +151,10 @@ namespace LTEMvcApp.Models
PHY, MAC, RLC, PDCP, RRC, NAS, S1AP, NGAP, GTPU, X2AP, XnAP, M2AP
};
public static readonly string[] AllIMSLayers = new[]
{
IMS, CX, RX, SIP, MEDIA, MMS
};
/// <summary>
/// 获取日志级别选项

151
LTEMvcApp/Views/Home/TestClientConfig.cshtml

@ -3,6 +3,7 @@
var testConfig = ViewBag.TestConfig as LTEMvcApp.Models.ClientConfig;
// 只保留不含 EVENT 的日志层
var allLayers = LTEMvcApp.Models.LogLayerTypes.AllLayers.Where(l => l != "EVENT").ToArray();
var allIMSLayers = LTEMvcApp.Models.LogLayerTypes.AllIMSLayers.Where(l => l != "EVENT").ToArray(); // 暂时使用AllLayers,后续可以扩展
var layerConfigs = testConfig?.Logs?.Layers ?? new Dictionary<string, LTEMvcApp.Models.LogLayerConfig>();
}
@ -250,6 +251,14 @@
<input type="checkbox" class="form-check-input" id="readonly" name="readonly" @(testConfig?.Readonly == true ? "checked" : "")>
<label class="form-check-label" for="readonly">只读模式</label>
</div>
<div class="form-check form-check-inline">
<input type="radio" class="form-check-input" id="mode_ran" name="mode" value="ran" @(testConfig?.Mode == "ran" ? "checked" : "checked")>
<label class="form-check-label" for="mode_ran">RAN</label>
</div>
<div class="form-check form-check-inline">
<input type="radio" class="form-check-input" id="mode_ims" name="mode" value="ims" @(testConfig?.Mode == "ims" ? "checked" : "")>
<label class="form-check-label" for="mode_ims">IMS</label>
</div>
</div>
</div>
@ -271,52 +280,104 @@
<th>包含负载</th>
</tr>
</thead>
<tbody>
@foreach (var layer in allLayers)
{
var config = layerConfigs[layer];
<tr>
<td><strong>@layer</strong></td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][filter]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
if (logLevel == config.Filter)
<tbody id="layersTableBody">
<!-- RAN 模式下的日志层 -->
<tbody id="ranLayers" class="mode-layers" style="display: block;">
@foreach (var layer in allLayers)
{
var config = layerConfigs.ContainsKey(layer) ? layerConfigs[layer] : new LTEMvcApp.Models.LogLayerConfig();
<tr>
<td><strong>@layer</strong></td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][filter]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
if (logLevel == config.Filter)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
}
else
{
<option value="@logLevel">@logLevel.ToUpper()</option>
}
}
else
</select>
</td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][level]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
<option value="@logLevel">@logLevel.ToUpper()</option>
if (logLevel == config.Level)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
}
else
{
<option value="@logLevel">@logLevel.ToUpper()</option>
}
}
}
</select>
</td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][level]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
if (logLevel == config.Level)
</select>
</td>
<td>
<input type="number" class="form-control form-control-sm" name="layers[@layer][max_size]" value="@config.MaxSize" min="1" max="1000">
</td>
<td>
<div class="form-check">
<input type="checkbox" class="form-check-input" name="layers[@layer][payload]" @(config.Payload ? "checked" : "")>
</div>
</td>
</tr>
}
</tbody>
<!-- IMS 模式下的日志层 -->
<tbody id="imsLayers" class="mode-layers" style="display: none;">
@foreach (var layer in allIMSLayers)
{
var config = layerConfigs.ContainsKey(layer) ? layerConfigs[layer] : new LTEMvcApp.Models.LogLayerConfig();
<tr>
<td><strong>@layer</strong></td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][filter]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
if (logLevel == config.Filter)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
}
else
{
<option value="@logLevel">@logLevel.ToUpper()</option>
}
}
else
</select>
</td>
<td>
<select class="form-control form-control-sm" name="layers[@layer][level]">
@foreach (var logLevel in LTEMvcApp.Models.LogLayerTypes.LogLevels)
{
<option value="@logLevel">@logLevel.ToUpper()</option>
if (logLevel == config.Level)
{
<option value="@logLevel" selected>@logLevel.ToUpper()</option>
}
else
{
<option value="@logLevel">@logLevel.ToUpper()</option>
}
}
}
</select>
</td>
<td>
<input type="number" class="form-control form-control-sm" name="layers[@layer][max_size]" value="@config.MaxSize" min="1" max="1000">
</td>
<td>
<div class="form-check">
<input type="checkbox" class="form-check-input" name="layers[@layer][payload]" @(config.Payload ? "checked" : "")>
</div>
</td>
</tr>
}
</select>
</td>
<td>
<input type="number" class="form-control form-control-sm" name="layers[@layer][max_size]" value="@config.MaxSize" min="1" max="1000">
</td>
<td>
<div class="form-check">
<input type="checkbox" class="form-check-input" name="layers[@layer][payload]" @(config.Payload ? "checked" : "")>
</div>
</td>
</tr>
}
</tbody>
</tbody>
</table>
</div>
@ -357,6 +418,13 @@
e.preventDefault();
saveTestClientConfig();
});
// 监听模式切换
$('input[name="mode"]').on('change', function() {
var selectedMode = $(this).val();
$('.mode-layers').hide();
$('#' + selectedMode + 'Layers').show();
});
});
function saveTestClientConfig() {
@ -368,13 +436,16 @@
enabled: $('#enabled').is(':checked'),
ssl: $('#ssl').is(':checked'),
readonly: $('#readonly').is(':checked'),
mode: $('input[name="mode"]:checked').val(),
logs: {
layers: {}
}
};
// 构建日志层配置
var layers = @Html.Raw(System.Text.Json.JsonSerializer.Serialize(allLayers));
// 根据当前模式获取日志层
var selectedMode = $('input[name="mode"]:checked').val();
var layers = selectedMode === 'ims' ? @Html.Raw(System.Text.Json.JsonSerializer.Serialize(allIMSLayers)) : @Html.Raw(System.Text.Json.JsonSerializer.Serialize(allLayers));
layers.forEach(function(layer) {
var level = $(`select[name="layers[${layer}][level]"]`).val();
var filter = $(`select[name="layers[${layer}][filter]"]`).val();

Loading…
Cancel
Save