namespace LTEMvcApp.Models { /// /// 日志状态管理类 /// public class LogState { /// /// 日志列表 /// public List Logs { get; set; } = new(); /// /// 客户端列表 /// public List ClientList { get; set; } = new(); /// /// 新日志列表 /// public List NewLogs { get; set; } = new(); /// /// 是否重置元数据 /// public bool ResetMetadata { get; set; } = false; /// /// 检测到的最小日志级别 /// public int MinLevelDetected { get; set; } = 10; /// /// 是否启用过滤器 /// public bool Filter { get; set; } = false; /// /// 是否更新网格 /// public bool UpdateGrid { get; set; } = false; /// /// 是否跟随最新日志 /// public bool Follow { get; set; } = false; /// /// 过滤器锁定状态 /// public string FilterLock { get; set; } = string.Empty; /// /// 日志总数 /// public int LogCount => Logs.Count; /// /// 客户端总数 /// public int ClientCount => ClientList.Count; /// /// 新日志数量 /// public int NewLogCount => NewLogs.Count; /// /// 启用的客户端数量 /// public int EnabledClientCount => ClientList.Count(c => c.State == ClientState.Connected || c.State == ClientState.Start); /// /// 添加日志 /// /// 日志对象 public void AddLog(LTELog log) { Logs.Add(log); NewLogs.Add(log); } /// /// 添加客户端 /// /// 客户端对象 public void AddClient(LTEClient client) { ClientList.Add(client); } /// /// 移除客户端 /// /// 客户端对象 /// 是否成功移除 public bool RemoveClient(LTEClient client) { var removed = ClientList.Remove(client); if (removed) { // 移除该客户端的日志 Logs.RemoveAll(log => log.Client == client); NewLogs.RemoveAll(log => log.Client == client); } return removed; } /// /// 清除所有日志 /// public void ClearLogs() { Logs.Clear(); NewLogs.Clear(); ResetMetadata = true; UpdateGrid = true; } /// /// 清除新日志 /// public void ClearNewLogs() { NewLogs.Clear(); } /// /// 重置状态 /// public void Reset() { Logs.Clear(); NewLogs.Clear(); ResetMetadata = true; MinLevelDetected = 10; Filter = false; UpdateGrid = false; Follow = false; FilterLock = string.Empty; } /// /// 获取指定客户端的日志 /// /// 客户端对象 /// 日志列表 public List GetLogsByClient(LTEClient client) { return Logs.Where(log => log.Client == client).ToList(); } /// /// 获取启用的客户端 /// /// 启用的客户端列表 public List GetEnabledClients() { return ClientList.Where(c => c.State == ClientState.Connected || c.State == ClientState.Start).ToList(); } /// /// 获取错误状态的客户端 /// /// 错误状态的客户端列表 public List GetErrorClients() { return ClientList.Where(c => c.State == ClientState.Error).ToList(); } /// /// 获取连接状态的客户端 /// /// 连接状态的客户端列表 public List GetConnectedClients() { return ClientList.Where(c => c.State == ClientState.Connected).ToList(); } /// /// 检查是否有实时客户端 /// /// 是否有实时客户端 public bool HasRealTimeClients() { return ClientList.Any(c => c.State == ClientState.Connected); } /// /// 获取日志统计信息 /// /// 统计信息 public LogStatistics GetStatistics() { return new LogStatistics { TotalLogs = LogCount, NewLogs = NewLogCount, TotalClients = ClientCount, EnabledClients = EnabledClientCount, ConnectedClients = GetConnectedClients().Count, ErrorClients = GetErrorClients().Count, MinLevel = MinLevelDetected, HasRealTime = HasRealTimeClients() }; } /// /// 更新最小日志级别 /// /// 日志级别 public void UpdateMinLevel(int level) { if (level < MinLevelDetected) { MinLevelDetected = level; } } /// /// 设置过滤器状态 /// /// 是否启用 public void SetFilter(bool enabled) { Filter = enabled; if (enabled) { UpdateGrid = true; } } /// /// 锁定过滤器 /// /// 锁定名称 public void LockFilter(string lockName) { FilterLock = lockName; } /// /// 解锁过滤器 /// public void UnlockFilter() { FilterLock = string.Empty; } /// /// 检查过滤器是否被锁定 /// /// 是否被锁定 public bool IsFilterLocked() { return !string.IsNullOrEmpty(FilterLock); } } /// /// 日志统计信息 /// public class LogStatistics { /// /// 总日志数 /// public int TotalLogs { get; set; } /// /// 新日志数 /// public int NewLogs { get; set; } /// /// 总客户端数 /// public int TotalClients { get; set; } /// /// 启用的客户端数 /// public int EnabledClients { get; set; } /// /// 连接的客户端数 /// public int ConnectedClients { get; set; } /// /// 错误的客户端数 /// public int ErrorClients { get; set; } /// /// 最小日志级别 /// public int MinLevel { get; set; } /// /// 是否有实时客户端 /// public bool HasRealTime { get; set; } /// /// 获取统计信息字符串 /// /// 统计信息字符串 public override string ToString() { return $"日志: {TotalLogs} (新: {NewLogs}), 客户端: {EnabledClients}/{TotalClients} (连接: {ConnectedClients}, 错误: {ErrorClients}), 最小级别: {MinLevel}"; } } }