xfy 5a6f4d351f feat(resolver): 新增 DNS 解析器支持
新增 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>
2026-04-08 11:36:49 +08:00

63 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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)
}