|
|
|
# 统计配置功能实现说明
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
本功能实现了通过StatisticsController动态控制统计消息中的`samples`和`rf`参数,支持根据IP地址为不同客户端设置不同的统计配置。
|
|
|
|
|
|
|
|
## 功能特性
|
|
|
|
|
|
|
|
### 1. 全局统计配置
|
|
|
|
- 设置默认的`samples`和`rf`值
|
|
|
|
- 所有未配置特定参数的客户端将使用全局默认值
|
|
|
|
|
|
|
|
### 2. 客户端特定配置
|
|
|
|
- 根据客户端名称或IP地址设置特定的统计参数
|
|
|
|
- 支持启用/禁用配置
|
|
|
|
- 可添加描述信息
|
|
|
|
|
|
|
|
### 3. 动态配置管理
|
|
|
|
- 通过Web界面实时修改配置
|
|
|
|
- 配置自动保存到`statistics_config.json`文件
|
|
|
|
- 支持配置列表查看和编辑
|
|
|
|
- 支持配置导入/导出功能
|
|
|
|
|
|
|
|
## 页面结构
|
|
|
|
|
|
|
|
### 两个独立页面:
|
|
|
|
1. **`Statistics/Index.cshtml`** - 统计数据监控页面
|
|
|
|
- 实时统计数据展示
|
|
|
|
- 客户端状态监控
|
|
|
|
- SSE实时数据推送
|
|
|
|
- 小区详细信息查看
|
|
|
|
|
|
|
|
2. **`Statistics/Config.cshtml`** - 统计配置管理页面
|
|
|
|
- 全局配置管理
|
|
|
|
- 客户端特定配置
|
|
|
|
- 配置列表管理
|
|
|
|
- 配置导入/导出
|
|
|
|
|
|
|
|
## 文件结构
|
|
|
|
|
|
|
|
### 新增文件
|
|
|
|
- `Models/StatisticsConfig.cs` - 统计配置模型
|
|
|
|
- `statistics_config.json` - 统计配置文件
|
|
|
|
- `Views/Statistics/Config.cshtml` - 统计配置管理页面
|
|
|
|
|
|
|
|
### 修改文件
|
|
|
|
- `Services/LTEClientWebSocket.cs` - 添加统计配置支持
|
|
|
|
- `Services/WebSocketManagerService.cs` - 添加配置管理功能
|
|
|
|
- `Controllers/StatisticsController.cs` - 添加配置管理API和Config方法
|
|
|
|
- `Views/Shared/_Layout.cshtml` - 添加导航菜单链接
|
|
|
|
|
|
|
|
## 核心实现
|
|
|
|
|
|
|
|
### 1. 统计配置模型
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
public class StatisticsConfig
|
|
|
|
{
|
|
|
|
public string IpAddress { get; set; } = string.Empty;
|
|
|
|
public string ClientName { get; set; } = string.Empty;
|
|
|
|
public bool EnableSamples { get; set; } = false;
|
|
|
|
public bool EnableRf { get; set; } = false;
|
|
|
|
public bool IsEnabled { get; set; } = true;
|
|
|
|
public string Description { get; set; } = string.Empty;
|
|
|
|
}
|
|
|
|
|
|
|
|
public class GlobalStatisticsConfig
|
|
|
|
{
|
|
|
|
public bool DefaultSamples { get; set; } = false;
|
|
|
|
public bool DefaultRf { get; set; } = false;
|
|
|
|
public List<StatisticsConfig> ClientConfigs { get; set; } = new List<StatisticsConfig>();
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### 2. WebSocket客户端配置
|
|
|
|
|
|
|
|
在`LTEClientWebSocket`类中添加了统计配置字段和方法:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
// 统计配置相关字段
|
|
|
|
private bool _enableSamples = false;
|
|
|
|
private bool _enableRf = false;
|
|
|
|
|
|
|
|
// 设置统计配置
|
|
|
|
public void SetStatisticsConfig(bool enableSamples, bool enableRf)
|
|
|
|
{
|
|
|
|
_enableSamples = enableSamples;
|
|
|
|
_enableRf = enableRf;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 在UpdateStats方法中使用配置
|
|
|
|
var msg = new JObject {
|
|
|
|
["message"] = "stats",
|
|
|
|
["samples"] = _enableSamples,
|
|
|
|
["rf"] = _enableRf
|
|
|
|
};
|
|
|
|
```
|
|
|
|
|
|
|
|
### 3. 配置管理服务
|
|
|
|
|
|
|
|
在`WebSocketManagerService`中添加了配置管理功能:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
// 加载和保存配置
|
|
|
|
private void LoadStatisticsConfig()
|
|
|
|
private void SaveStatisticsConfig()
|
|
|
|
|
|
|
|
// 配置管理方法
|
|
|
|
public GlobalStatisticsConfig GetGlobalStatisticsConfig()
|
|
|
|
public void SetGlobalStatisticsConfig(GlobalStatisticsConfig config)
|
|
|
|
public StatisticsConfig? GetClientStatisticsConfig(string clientName)
|
|
|
|
public void SetClientStatisticsConfig(StatisticsConfig config)
|
|
|
|
public StatisticsConfig? GetStatisticsConfigByIp(string ipAddress)
|
|
|
|
|
|
|
|
// 应用配置到客户端
|
|
|
|
private void UpdateClientStatisticsConfig(string clientName)
|
|
|
|
private void UpdateAllClientsStatisticsConfig()
|
|
|
|
```
|
|
|
|
|
|
|
|
### 4. API接口
|
|
|
|
|
|
|
|
在`StatisticsController`中添加了配置管理API:
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
[HttpGet] GetGlobalStatisticsConfig()
|
|
|
|
[HttpPost] SetGlobalStatisticsConfig([FromBody] GlobalStatisticsConfig config)
|
|
|
|
[HttpGet] GetClientStatisticsConfig(string clientName)
|
|
|
|
[HttpPost] SetClientStatisticsConfig([FromBody] StatisticsConfig config)
|
|
|
|
[HttpGet] GetStatisticsConfigByIp(string ipAddress)
|
|
|
|
[HttpGet] GetAllClientStatisticsConfigs()
|
|
|
|
public IActionResult Config() // 配置管理页面
|
|
|
|
```
|
|
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
|
|
### 1. 访问统计数据页面
|
|
|
|
- 通过导航菜单点击"统计数据"或访问 `/Statistics/Index`
|
|
|
|
- 查看实时统计数据、客户端状态、小区信息等
|
|
|
|
|
|
|
|
### 2. 访问配置管理页面
|
|
|
|
- 通过导航菜单点击"统计配置"或访问 `/Statistics/Config`
|
|
|
|
- 管理全局配置和客户端特定配置
|
|
|
|
|
|
|
|
### 3. 设置全局配置
|
|
|
|
- 在"全局统计配置"部分设置默认的samples和rf值
|
|
|
|
- 点击"保存配置"按钮保存
|
|
|
|
|
|
|
|
### 4. 设置客户端特定配置
|
|
|
|
- 在"客户端特定配置"部分输入客户端信息
|
|
|
|
- 设置特定的samples和rf值
|
|
|
|
- 点击"保存配置"按钮保存
|
|
|
|
|
|
|
|
### 5. 查看配置列表
|
|
|
|
- 在"配置列表"部分可以看到所有已配置的客户端
|
|
|
|
- 点击"编辑"按钮可以修改现有配置
|
|
|
|
- 支持配置导入/导出功能
|
|
|
|
|
|
|
|
## 配置优先级
|
|
|
|
|
|
|
|
1. **客户端特定配置** - 如果客户端有特定的配置且启用,则使用该配置
|
|
|
|
2. **全局默认配置** - 如果客户端没有特定配置,则使用全局默认值
|
|
|
|
3. **系统默认值** - 如果都没有配置,则使用系统默认值(samples=false, rf=false)
|
|
|
|
|
|
|
|
## 配置文件格式
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"defaultSamples": false,
|
|
|
|
"defaultRf": false,
|
|
|
|
"clientConfigs": [
|
|
|
|
{
|
|
|
|
"ipAddress": "192.168.13.12",
|
|
|
|
"clientName": "TestClient1",
|
|
|
|
"enableSamples": true,
|
|
|
|
"enableRf": false,
|
|
|
|
"isEnabled": true,
|
|
|
|
"description": "测试客户端1 - 启用samples"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## 页面优势
|
|
|
|
|
|
|
|
### 拆分的好处:
|
|
|
|
1. **职责分离** - 数据监控和配置管理各司其职
|
|
|
|
2. **用户体验** - 每个页面功能专注,界面简洁
|
|
|
|
3. **维护性** - 代码结构清晰,易于维护和扩展
|
|
|
|
4. **性能** - 避免单个页面过于复杂,加载更快
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
|
1. 配置修改后会自动应用到所有已连接的客户端
|
|
|
|
2. 新连接的客户端会自动应用相应的配置
|
|
|
|
3. 配置文件会在应用启动时自动加载
|
|
|
|
4. 配置修改会实时保存到文件,重启应用后配置仍然有效
|
|
|
|
5. 两个页面功能独立,用户可以根据需要分别访问
|
|
|
|
|
|
|
|
## 扩展功能
|
|
|
|
|
|
|
|
可以根据需要扩展以下功能:
|
|
|
|
- 配置模板管理
|
|
|
|
- 配置版本控制
|
|
|
|
- 配置变更日志
|
|
|
|
- 批量配置操作
|
|
|
|
- 配置验证和测试
|