|
|
@ -10,6 +10,7 @@ using WebSocket4Net; |
|
|
|
using LTEMvcApp.Models; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using System.Text.Json; |
|
|
|
|
|
|
|
namespace LTEMvcApp.Services |
|
|
|
{ |
|
|
@ -233,66 +234,35 @@ namespace LTEMvcApp.Services |
|
|
|
/// <summary>
|
|
|
|
/// 设置日志配置
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="config">日志配置</param>
|
|
|
|
/// <param name="save">是否保存</param>
|
|
|
|
public void SetLogsConfig(Dictionary<string, object> config, bool save = false) |
|
|
|
public void SetLogsConfig(ClientLogsConfig logsConfig, bool save = false) |
|
|
|
{ |
|
|
|
// 重新格式化配置
|
|
|
|
var logs = new JObject(); |
|
|
|
foreach (var kvp in config) |
|
|
|
var logsPayload = new JObject(); |
|
|
|
var layersPayload = new JObject(); |
|
|
|
|
|
|
|
foreach (var layerKvp in logsConfig.Layers) |
|
|
|
{ |
|
|
|
switch (kvp.Key) |
|
|
|
layersPayload[layerKvp.Key] = JObject.FromObject(new |
|
|
|
{ |
|
|
|
case "layers": |
|
|
|
var layers = new JObject(); |
|
|
|
var layersDict = kvp.Value as Dictionary<string, object>; |
|
|
|
if (layersDict != null) |
|
|
|
{ |
|
|
|
foreach (var layer in layersDict) |
|
|
|
{ |
|
|
|
var layerConfig = layer.Value as Dictionary<string, object>; |
|
|
|
if (layerConfig != null) |
|
|
|
{ |
|
|
|
layers[layer.Key] = new JObject |
|
|
|
{ |
|
|
|
["level"] = layerConfig.GetValueOrDefault("level", "warn").ToString(), |
|
|
|
["max_size"] = Convert.ToInt32(layerConfig.GetValueOrDefault("max_size", 0)), |
|
|
|
["payload"] = Convert.ToBoolean(layerConfig.GetValueOrDefault("payload", false)) |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
logs["layers"] = layers; |
|
|
|
break; |
|
|
|
default: |
|
|
|
if (IsLogParameter(kvp.Key)) |
|
|
|
{ |
|
|
|
logs[kvp.Key] = JToken.FromObject(kvp.Value); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
level = layerKvp.Value.Level, |
|
|
|
maxSize = layerKvp.Value.MaxSize, |
|
|
|
payload = layerKvp.Value.Payload, |
|
|
|
filter = layerKvp.Value.Filter |
|
|
|
}); |
|
|
|
} |
|
|
|
logsPayload["layers"] = layersPayload; |
|
|
|
|
|
|
|
if (logsConfig.Signal.HasValue) logsPayload["signal"] = logsConfig.Signal.Value; |
|
|
|
if (logsConfig.Cch.HasValue) logsPayload["cch"] = logsConfig.Cch.Value; |
|
|
|
|
|
|
|
SendMessage(new JObject |
|
|
|
{ |
|
|
|
["message"] = "config_set", |
|
|
|
["logs"] = logs |
|
|
|
["logs"] = logsPayload |
|
|
|
}, response => |
|
|
|
{ |
|
|
|
if (save) |
|
|
|
{ |
|
|
|
// 保存配置
|
|
|
|
foreach (var kvp in config) |
|
|
|
{ |
|
|
|
if (_config.Logs.ContainsKey(kvp.Key)) |
|
|
|
{ |
|
|
|
_config.Logs[kvp.Key] = kvp.Value; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
_config.Logs.Add(kvp.Key, kvp.Value); |
|
|
|
} |
|
|
|
} |
|
|
|
_config.Logs = logsConfig; |
|
|
|
} |
|
|
|
LogGet(new Dictionary<string, object> { ["timeout"] = 0 }); |
|
|
|
}, true); |
|
|
@ -392,36 +362,15 @@ namespace LTEMvcApp.Services |
|
|
|
/// <param name="parameters">参数</param>
|
|
|
|
public void LogGet(Dictionary<string, object>? parameters = null) |
|
|
|
{ |
|
|
|
var config = _config; |
|
|
|
if (config.Pause) |
|
|
|
if (_config.Pause) |
|
|
|
return; |
|
|
|
|
|
|
|
var layers = new JObject(); |
|
|
|
if (config.Logs.ContainsKey("layers")) |
|
|
|
if (_config.Logs?.Layers != null) |
|
|
|
{ |
|
|
|
// 处理layers配置,确保键是字符串类型
|
|
|
|
if (config.Logs["layers"] is JObject layersJObject) |
|
|
|
{ |
|
|
|
foreach (var layer in layersJObject) |
|
|
|
{ |
|
|
|
var layerName = layer.Key; // 这里layer.Key已经是字符串
|
|
|
|
var layerConfig = layer.Value as JObject; |
|
|
|
if (layerConfig != null && layerConfig.ContainsKey("filter")) |
|
|
|
{ |
|
|
|
layers[layerName] = layerConfig["filter"].ToString(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (config.Logs["layers"] is Dictionary<string, object> layersDict) |
|
|
|
foreach (var layerKvp in _config.Logs.Layers) |
|
|
|
{ |
|
|
|
foreach (var layer in layersDict) |
|
|
|
{ |
|
|
|
var layerConfig = layer.Value as Dictionary<string, object>; |
|
|
|
if (layerConfig != null && layerConfig.ContainsKey("filter")) |
|
|
|
{ |
|
|
|
layers[layer.Key] = layerConfig["filter"].ToString(); |
|
|
|
} |
|
|
|
} |
|
|
|
layers[layerKvp.Key] = layerKvp.Value.Filter; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -565,7 +514,7 @@ namespace LTEMvcApp.Services |
|
|
|
_messageFifo.Clear(); |
|
|
|
|
|
|
|
// 检查当前配置
|
|
|
|
var firstCon = !_config.Logs.ContainsKey("layers"); |
|
|
|
var firstCon = _config.Logs.Layers.Count == 0; |
|
|
|
|
|
|
|
// 获取配置
|
|
|
|
SendMessage(new JObject { ["message"] = "config_get" }, config => |
|
|
@ -585,54 +534,16 @@ namespace LTEMvcApp.Services |
|
|
|
} |
|
|
|
|
|
|
|
var ro = _config.Readonly; |
|
|
|
if (ro || firstCon) |
|
|
|
{ |
|
|
|
_config.Logs = config["logs"]?.ToObject<Dictionary<string, object>>() ?? new Dictionary<string, object>(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var serverLogs = config["logs"]?.ToObject<Dictionary<string, object>>() ?? new Dictionary<string, object>(); |
|
|
|
foreach (var kvp in serverLogs) |
|
|
|
{ |
|
|
|
if (!_config.Logs.ContainsKey(kvp.Key)) |
|
|
|
{ |
|
|
|
_config.Logs[kvp.Key] = kvp.Value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
var serverLogsConfig = config["logs"]?.ToObject<ClientLogsConfig>(Newtonsoft.Json.JsonSerializer.CreateDefault(new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); |
|
|
|
|
|
|
|
// 清理和设置层配置
|
|
|
|
if (_config.Logs.ContainsKey("layers")) |
|
|
|
if (ro || firstCon) |
|
|
|
{ |
|
|
|
var layers = _config.Logs["layers"] as Dictionary<string, object>; |
|
|
|
var configLayers = config["logs"]?["layers"]?.ToObject<Dictionary<string, object>>(); |
|
|
|
|
|
|
|
if (layers != null && configLayers != null) |
|
|
|
if (serverLogsConfig != null) |
|
|
|
{ |
|
|
|
var keysToRemove = layers.Keys.Where(k => !configLayers.ContainsKey(k)).ToList(); |
|
|
|
foreach (var key in keysToRemove) |
|
|
|
{ |
|
|
|
layers.Remove(key); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var layer in layers) |
|
|
|
{ |
|
|
|
var layerConfig = layer.Value as Dictionary<string, object>; |
|
|
|
if (layerConfig != null && !layerConfig.ContainsKey("filter")) |
|
|
|
{ |
|
|
|
if (ro) |
|
|
|
{ |
|
|
|
layerConfig["filter"] = layerConfig.GetValueOrDefault("level", "warn").ToString(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
layerConfig["filter"] = GetDefaultFilter(layer.Key); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
_config.Logs = serverLogsConfig; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 添加小区信息
|
|
|
|
if (config["cells"] != null) |
|
|
|
{ |
|
|
|