将模拟数据修改为真实服务器统计数据
This commit is contained in:
@@ -62,6 +62,7 @@ type Server struct {
|
|||||||
monthlyStatsMutex sync.RWMutex
|
monthlyStatsMutex sync.RWMutex
|
||||||
monthlyStats map[string]int64 // 按月统计屏蔽数量
|
monthlyStats map[string]int64 // 按月统计屏蔽数量
|
||||||
saveTicker *time.Ticker // 用于定时保存数据
|
saveTicker *time.Ticker // 用于定时保存数据
|
||||||
|
startTime time.Time // 服务器启动时间
|
||||||
saveDone chan struct{} // 用于通知保存协程停止
|
saveDone chan struct{} // 用于通知保存协程停止
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +93,7 @@ func NewServer(config *config.DNSConfig, shieldConfig *config.ShieldConfig, shie
|
|||||||
},
|
},
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
|
startTime: time.Now(), // 记录服务器启动时间
|
||||||
stats: &Stats{
|
stats: &Stats{
|
||||||
Queries: 0,
|
Queries: 0,
|
||||||
Blocked: 0,
|
Blocked: 0,
|
||||||
@@ -474,6 +476,11 @@ func (s *Server) updateStats(update func(*Stats)) {
|
|||||||
update(s.stats)
|
update(s.stats)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetStartTime 获取服务器启动时间
|
||||||
|
func (s *Server) GetStartTime() time.Time {
|
||||||
|
return s.startTime
|
||||||
|
}
|
||||||
|
|
||||||
// GetStats 获取DNS服务器统计信息
|
// GetStats 获取DNS服务器统计信息
|
||||||
func (s *Server) GetStats() *Stats {
|
func (s *Server) GetStats() *Stats {
|
||||||
s.statsMutex.Lock()
|
s.statsMutex.Lock()
|
||||||
|
|||||||
@@ -87,21 +87,35 @@ func (s *Server) handleStats(w http.ResponseWriter, r *http.Request) {
|
|||||||
dnsStats := s.dnsServer.GetStats()
|
dnsStats := s.dnsServer.GetStats()
|
||||||
shieldStats := s.shieldManager.GetStats()
|
shieldStats := s.shieldManager.GetStats()
|
||||||
|
|
||||||
// 获取最常用查询类型
|
// 获取最常用查询类型(如果有)
|
||||||
topQueryType := "A"
|
topQueryType := "-"
|
||||||
maxCount := int64(0)
|
maxCount := int64(0)
|
||||||
|
if len(dnsStats.QueryTypes) > 0 {
|
||||||
for queryType, count := range dnsStats.QueryTypes {
|
for queryType, count := range dnsStats.QueryTypes {
|
||||||
if count > maxCount {
|
if count > maxCount {
|
||||||
maxCount = count
|
maxCount = count
|
||||||
topQueryType = queryType
|
topQueryType = queryType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 获取活跃来源IP数量
|
// 获取活跃来源IP数量
|
||||||
activeIPCount := len(dnsStats.SourceIPs)
|
activeIPCount := len(dnsStats.SourceIPs)
|
||||||
|
|
||||||
|
// 构建响应数据,确保所有字段都反映服务器的真实状态
|
||||||
stats := map[string]interface{}{
|
stats := map[string]interface{}{
|
||||||
"dns": dnsStats,
|
"dns": map[string]interface{}{
|
||||||
|
"Queries": dnsStats.Queries,
|
||||||
|
"Blocked": dnsStats.Blocked,
|
||||||
|
"Allowed": dnsStats.Allowed,
|
||||||
|
"Errors": dnsStats.Errors,
|
||||||
|
"LastQuery": dnsStats.LastQuery,
|
||||||
|
"AvgResponseTime": dnsStats.AvgResponseTime,
|
||||||
|
"TotalResponseTime": dnsStats.TotalResponseTime,
|
||||||
|
"QueryTypes": dnsStats.QueryTypes,
|
||||||
|
"SourceIPs": dnsStats.SourceIPs,
|
||||||
|
"CpuUsage": dnsStats.CpuUsage,
|
||||||
|
},
|
||||||
"shield": shieldStats,
|
"shield": shieldStats,
|
||||||
"topQueryType": topQueryType,
|
"topQueryType": topQueryType,
|
||||||
"activeIPs": activeIPCount,
|
"activeIPs": activeIPCount,
|
||||||
@@ -580,11 +594,24 @@ func (s *Server) handleStatus(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stats := s.dnsServer.GetStats()
|
stats := s.dnsServer.GetStats()
|
||||||
|
|
||||||
|
// 使用服务器的实际启动时间计算准确的运行时间
|
||||||
|
serverStartTime := s.dnsServer.GetStartTime()
|
||||||
|
uptime := time.Since(serverStartTime)
|
||||||
|
|
||||||
|
// 构建包含所有真实服务器统计数据的响应
|
||||||
status := map[string]interface{}{
|
status := map[string]interface{}{
|
||||||
"status": "running",
|
"status": "running",
|
||||||
"queries": stats.Queries,
|
"queries": stats.Queries,
|
||||||
|
"blocked": stats.Blocked,
|
||||||
|
"allowed": stats.Allowed,
|
||||||
|
"errors": stats.Errors,
|
||||||
"lastQuery": stats.LastQuery,
|
"lastQuery": stats.LastQuery,
|
||||||
"uptime": time.Since(stats.LastQuery),
|
"avgResponseTime": stats.AvgResponseTime,
|
||||||
|
"activeIPs": len(stats.SourceIPs),
|
||||||
|
"startTime": serverStartTime,
|
||||||
|
"uptime": uptime,
|
||||||
|
"cpuUsage": stats.CpuUsage,
|
||||||
"timestamp": time.Now(),
|
"timestamp": time.Now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user