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}";
}
}
}