GetPerformanceStats 获取性能统计信息
(c *gin.Context)
| 81 | |
| 82 | // GetPerformanceStats 获取性能统计信息 |
| 83 | func GetPerformanceStats(c *gin.Context) { |
| 84 | // 不再每次获取统计都全量扫描磁盘,依赖原子计数器保证性能 |
| 85 | // 仅在系统启动或显式清理时同步 |
| 86 | cacheStats := common.GetDiskCacheStats() |
| 87 | |
| 88 | // 获取内存统计 |
| 89 | var memStats runtime.MemStats |
| 90 | runtime.ReadMemStats(&memStats) |
| 91 | |
| 92 | // 获取磁盘缓存目录信息 |
| 93 | diskCacheInfo := getDiskCacheInfo() |
| 94 | |
| 95 | // 获取配置信息 |
| 96 | diskConfig := common.GetDiskCacheConfig() |
| 97 | monitorConfig := common.GetPerformanceMonitorConfig() |
| 98 | config := PerformanceConfig{ |
| 99 | DiskCacheEnabled: diskConfig.Enabled, |
| 100 | DiskCacheThresholdMB: diskConfig.ThresholdMB, |
| 101 | DiskCacheMaxSizeMB: diskConfig.MaxSizeMB, |
| 102 | DiskCachePath: diskConfig.Path, |
| 103 | IsRunningInContainer: common.IsRunningInContainer(), |
| 104 | MonitorEnabled: monitorConfig.Enabled, |
| 105 | MonitorCPUThreshold: monitorConfig.CPUThreshold, |
| 106 | MonitorMemoryThreshold: monitorConfig.MemoryThreshold, |
| 107 | MonitorDiskThreshold: monitorConfig.DiskThreshold, |
| 108 | } |
| 109 | |
| 110 | // 获取磁盘空间信息 |
| 111 | // 使用缓存的系统状态,避免频繁调用系统 API |
| 112 | systemStatus := common.GetSystemStatus() |
| 113 | diskSpaceInfo := common.DiskSpaceInfo{ |
| 114 | UsedPercent: systemStatus.DiskUsage, |
| 115 | } |
| 116 | // 如果需要详细信息,可以按需获取,或者扩展 SystemStatus |
| 117 | // 这里为了保持接口兼容性,我们仍然调用 GetDiskSpaceInfo,但注意这可能会有性能开销 |
| 118 | // 考虑到 GetPerformanceStats 是管理接口,频率较低,直接调用是可以接受的 |
| 119 | // 但为了一致性,我们也可以考虑从 SystemStatus 中获取部分信息 |
| 120 | diskSpaceInfo = common.GetDiskSpaceInfo() |
| 121 | |
| 122 | stats := PerformanceStats{ |
| 123 | CacheStats: cacheStats, |
| 124 | MemoryStats: MemoryStats{ |
| 125 | Alloc: memStats.Alloc, |
| 126 | TotalAlloc: memStats.TotalAlloc, |
| 127 | Sys: memStats.Sys, |
| 128 | NumGC: memStats.NumGC, |
| 129 | NumGoroutine: runtime.NumGoroutine(), |
| 130 | }, |
| 131 | DiskCacheInfo: diskCacheInfo, |
| 132 | DiskSpaceInfo: diskSpaceInfo, |
| 133 | Config: config, |
| 134 | } |
| 135 | |
| 136 | c.JSON(http.StatusOK, gin.H{ |
| 137 | "success": true, |
| 138 | "data": stats, |
| 139 | }) |
| 140 | } |
nothing calls this directly
no test coverage detected