修复数据显示问题

This commit is contained in:
Alex Yang
2025-11-28 17:59:13 +08:00
parent bc912056cd
commit ec1e051252
4 changed files with 337 additions and 2 deletions

View File

@@ -0,0 +1,58 @@
## 问题分析
通过代码分析,我发现/api/top-clients端点数据无法持久化的原因有两个
1. **数据保存逻辑缺失**:在`saveStatsData`方法中,虽然`StatsData`结构体包含了`ClientStats`字段,但没有将`server.clientStats`赋值给`statsData.ClientStats`
2. **数据加载逻辑缺失**:在`loadStatsData`方法中,虽然`StatsData`结构体包含了`ClientStats`字段,但没有将`statsData.ClientStats`赋值给`server.clientStats`
3. **自动保存功能未启用**`startAutoSave`方法没有在`Server``Start`方法中被调用,导致数据不会定期保存
## 修复计划
1. **修改`saveStatsData`方法**:添加保存`ClientStats`数据的逻辑
2. **修改`loadStatsData`方法**:添加加载`ClientStats`数据的逻辑
3. **在`Server.Start`方法中调用`startAutoSave`**:确保数据定期保存
## 修复步骤
### 步骤1修改`saveStatsData`方法
`dns/server.go`文件中,修改`saveStatsData`方法,添加保存`ClientStats`数据的逻辑:
```go
// 复制客户端统计数据
s.clientStatsMutex.RLock()
statsData.ClientStats = make(map[string]*ClientStats)
for k, v := range s.clientStats {
statsData.ClientStats[k] = v
}
s.clientStatsMutex.RUnlock()
```
### 步骤2修改`loadStatsData`方法
`dns/server.go`文件中,修改`loadStatsData`方法,添加加载`ClientStats`数据的逻辑:
```go
s.clientStatsMutex.Lock()
if statsData.ClientStats != nil {
s.clientStats = statsData.ClientStats
}
s.clientStatsMutex.Unlock()
```
### 步骤3在`Server.Start`方法中调用`startAutoSave`
`dns/server.go`文件的`Start`方法中,添加调用`startAutoSave`的代码:
```go
// 启动自动保存功能
go s.startAutoSave()
```
## 预期效果
修复后,/api/top-clients端点的数据将
1. 在服务器启动时从文件加载
2. 定期自动保存到文件
3. 在服务器停止时最后保存一次
这样就能确保/api/top-clients端点的数据持久化不会因为服务器重启而丢失。