新增 internal/resolver 包,提供动态 DNS 解析功能: - Resolver 类型支持配置多个 DNS 服务器 - 内置缓存支持 TTL 和最大条目数限制 - 统计信息追踪查询次数和缓存命中率 配置层面: - ResolverConfig 支持 addresses/valid/timeout/ipv4/ipv6/cache_size - 添加配置验证逻辑 Target 增强: - 新增 hostname/resolvedIPs 字段支持 IP 缓存 - NeedsResolve 方法判断是否需要重新解析 - NewTargetFromConfig 工厂函数 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
// Package resolver 提供 DNS 解析功能,支持缓存和后台刷新。
|
||
//
|
||
// 该文件包含 DNS 解析器统计指标相关的实现。
|
||
//
|
||
// 作者:xfy
|
||
package resolver
|
||
|
||
import (
|
||
"time"
|
||
)
|
||
|
||
// StatsCollector 统计收集器接口。
|
||
type StatsCollector interface {
|
||
// RecordHit 记录缓存命中
|
||
RecordHit()
|
||
// RecordMiss 记录缓存未命中
|
||
RecordMiss()
|
||
// RecordError 记录解析错误
|
||
RecordError()
|
||
// RecordLatency 记录解析延迟
|
||
RecordLatency(latency time.Duration)
|
||
// GetStats 获取当前统计
|
||
GetStats() ResolverStats
|
||
}
|
||
|
||
// ResetStats 重置所有统计信息。
|
||
func (r *DNSResolver) ResetStats() {
|
||
r.hits.Store(0)
|
||
r.misses.Store(0)
|
||
r.errors.Store(0)
|
||
r.latencyNs.Store(0)
|
||
r.count.Store(0)
|
||
}
|
||
|
||
// GetCacheHits 返回缓存命中次数。
|
||
func (r *DNSResolver) GetCacheHits() int64 {
|
||
return r.hits.Load()
|
||
}
|
||
|
||
// GetCacheMisses 返回缓存未命中次数。
|
||
func (r *DNSResolver) GetCacheMisses() int64 {
|
||
return r.misses.Load()
|
||
}
|
||
|
||
// GetResolveErrors 返回解析错误次数。
|
||
func (r *DNSResolver) GetResolveErrors() int64 {
|
||
return r.errors.Load()
|
||
}
|
||
|
||
// GetTotalQueries 返回总查询次数。
|
||
func (r *DNSResolver) GetTotalQueries() int64 {
|
||
return r.hits.Load() + r.misses.Load()
|
||
}
|
||
|
||
// GetAverageLatency 返回平均解析延迟。
|
||
func (r *DNSResolver) GetAverageLatency() time.Duration {
|
||
count := r.count.Load()
|
||
if count == 0 {
|
||
return 0
|
||
}
|
||
return time.Duration(r.latencyNs.Load() / count)
|
||
}
|