From cc677bcf728bd555bfa34909c0f18e9e69ac4560 Mon Sep 17 00:00:00 2001 From: wood chen Date: Fri, 11 Jul 2025 19:55:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=AF=B9=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E7=9A=84=E6=8C=81=E4=B9=85=E5=8C=96=E5=92=8C?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=EF=BC=8C=E7=AE=80=E5=8C=96=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=85=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E7=8A=B6=E6=80=81=E7=A0=81=E5=92=8C=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E7=BB=9F=E8=AE=A1=E7=9A=84=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=8C=96=E3=80=82=E4=BB=AA=E8=A1=A8=E6=9D=BF=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=A0=81=E7=BB=9F=E8=AE=A1=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E6=80=BB=E8=AF=B7=E6=B1=82=E6=95=B0?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BD=93=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/metrics/persistence.go | 50 +++++---------------------------- web/app/dashboard/page.tsx | 5 +++- 2 files changed, 11 insertions(+), 44 deletions(-) diff --git a/internal/metrics/persistence.go b/internal/metrics/persistence.go index cbdf111..f2b74b5 100644 --- a/internal/metrics/persistence.go +++ b/internal/metrics/persistence.go @@ -23,7 +23,6 @@ type MetricsStorage struct { wg sync.WaitGroup lastSaveTime time.Time mutex sync.RWMutex - metricsFile string statusCodeFile string refererStatsFile string } @@ -39,7 +38,6 @@ func NewMetricsStorage(collector *Collector, dataDir string, saveInterval time.D saveInterval: saveInterval, dataDir: dataDir, stopChan: make(chan struct{}), - metricsFile: filepath.Join(dataDir, "metrics.json"), statusCodeFile: filepath.Join(dataDir, "status_codes.json"), refererStatsFile: filepath.Join(dataDir, "referer_stats.json"), } @@ -104,23 +102,8 @@ func (ms *MetricsStorage) SaveMetrics() error { // 获取当前指标数据 stats := ms.collector.GetStats() - // 保存基本指标 - 只保存必要的字段 - basicMetrics := map[string]interface{}{ - "uptime": stats["uptime"], - "total_bytes": stats["total_bytes"], - "avg_response_time": stats["avg_response_time"], - "save_time": time.Now().Format(time.RFC3339), - } - - // 单独保存延迟统计,避免嵌套结构导致的内存占用 - if latencyStats, ok := stats["latency_stats"].(map[string]interface{}); ok { - basicMetrics["latency_min"] = latencyStats["min"] - basicMetrics["latency_max"] = latencyStats["max"] - } - - if err := saveJSONToFile(ms.metricsFile, basicMetrics); err != nil { - return fmt.Errorf("保存基本指标失败: %v", err) - } + // 不再持久化 basicMetrics(metrics.json),只在内存中维护 + // 只持久化累计型数据 // 保存状态码统计 if err := saveJSONToFile(ms.statusCodeFile, stats["status_code_stats"]); err != nil { @@ -163,24 +146,9 @@ func (ms *MetricsStorage) LoadMetrics() error { start := time.Now() log.Printf("[MetricsStorage] 开始加载指标数据...") - // 检查文件是否存在 - if !fileExists(ms.metricsFile) { - return fmt.Errorf("指标数据文件不存在") - } + // 不再加载 basicMetrics(metrics.json) - // 加载基本指标 - var basicMetrics map[string]interface{} - if err := loadJSONFromFile(ms.metricsFile, &basicMetrics); err != nil { - return fmt.Errorf("加载基本指标失败: %v", err) - } - - // 将加载的数据应用到收集器 - // 1. 应用总字节数 - if totalBytes, ok := basicMetrics["total_bytes"].(float64); ok { - atomic.StoreInt64(&ms.collector.totalBytes, int64(totalBytes)) - } - - // 2. 加载状态码统计(如果文件存在) + // 1. 加载状态码统计(如果文件存在) if fileExists(ms.statusCodeFile) { var statusCodeStats map[string]interface{} if err := loadJSONFromFile(ms.statusCodeFile, &statusCodeStats); err != nil { @@ -205,7 +173,7 @@ func (ms *MetricsStorage) LoadMetrics() error { } } - // 3. 加载引用来源统计(如果文件存在) + // 2. 加载引用来源统计(如果文件存在) if fileExists(ms.refererStatsFile) { var refererStats []map[string]interface{} if err := loadJSONFromFile(ms.refererStatsFile, &refererStats); err != nil { @@ -245,7 +213,7 @@ func (ms *MetricsStorage) LoadMetrics() error { } } - // 5. 加载延迟分布(如果文件存在) + // 3. 加载延迟分布(如果文件存在) latencyDistributionFile := filepath.Join(ms.dataDir, "latency_distribution.json") if fileExists(latencyDistributionFile) { var distribution map[string]interface{} @@ -267,11 +235,7 @@ func (ms *MetricsStorage) LoadMetrics() error { } ms.mutex.Lock() - if saveTime, ok := basicMetrics["save_time"].(string); ok { - if t, err := time.Parse(time.RFC3339, saveTime); err == nil { - ms.lastSaveTime = t - } - } + // 不再恢复 lastSaveTime(metrics.json 里才有) ms.mutex.Unlock() // 强制进行一次GC diff --git a/web/app/dashboard/page.tsx b/web/app/dashboard/page.tsx index 8c31914..5d6d3aa 100644 --- a/web/app/dashboard/page.tsx +++ b/web/app/dashboard/page.tsx @@ -188,7 +188,10 @@ export default function DashboardPage() { - 状态码统计 + + 状态码统计 + (总请求数: {Object.values(metrics.status_code_stats || {}).reduce((a, b) => a + (b as number), 0)}) +