package log import ( "time" ) // QueryLog DNS 查询日志结构 type QueryLog struct { ID int64 `json:"id"` Timestamp time.Time `json:"timestamp"` // 查询时间 ClientIP string `json:"clientIP"` // 客户端 IP Domain string `json:"domain"` // 查询域名 QueryType string `json:"queryType"` // 查询类型 ResponseTime int64 `json:"responseTime"` // 响应时间 (ms) Result string `json:"result"` // 查询结果(allowed, blocked, error) BlockRule string `json:"blockRule"` // 屏蔽规则(如果被屏蔽) BlockType string `json:"blockType"` // 屏蔽类型(如果被屏蔽) FromCache bool `json:"fromCache"` // 是否来自缓存 DNSSEC bool `json:"dnssec"` // 是否使用了 DNSSEC EDNS bool `json:"edns"` // 是否使用了 EDNS DNSServer string `json:"dnsServer"` // 使用的 DNS 服务器 DNSSECServer string `json:"dnssecServer"` // 使用的 DNSSEC 专用服务器 Answers string `json:"answers"` // 解析记录(JSON 格式) ResponseCode int `json:"responseCode"` // DNS 响应代码 } // LogFilter 日志过滤条件 type LogFilter struct { Result string // 结果过滤(allowed, blocked, error) SearchTerm string // 搜索关键词(域名或 IP) QueryType string // 查询类型过滤 StartTime time.Time // 开始时间 EndTime time.Time // 结束时间 } // PageParams 分页参数 type PageParams struct { Limit int // 每页数量 Offset int // 偏移量 SortField string // 排序字段 SortDirection string // 排序方向(asc, desc) } // LogStats 日志统计信息 type LogStats struct { TotalQueries int64 `json:"totalQueries"` // 总查询数 BlockedQueries int64 `json:"blockedQueries"` // 被屏蔽查询数 AllowedQueries int64 `json:"allowedQueries"` // 允许查询数 ErrorQueries int64 `json:"errorQueries"` // 错误查询数 AvgResponseTime float64 `json:"avgResponseTime"` // 平均响应时间 QueryTypes map[string]int64 `json:"queryTypes"` // 查询类型分布 TopDomains []DomainCount `json:"topDomains"` // TOP 域名 TopClients []ClientCount `json:"topClients"` // TOP 客户端 } // DomainCount 域名统计 type DomainCount struct { Domain string `json:"domain"` Count int64 `json:"count"` } // ClientCount 客户端统计 type ClientCount struct { IP string `json:"ip"` Count int64 `json:"count"` } // QueryLogger 日志记录器接口 type QueryLogger interface { // Log 记录日志(异步、非阻塞) Log(log QueryLog) error // QueryLogs 查询日志(支持分页、过滤、排序) QueryLogs(filter LogFilter, page PageParams) ([]QueryLog, int64, error) // GetStats 获取统计信息 GetStats(timeRange TimeRange) (*LogStats, error) // Close 关闭日志记录器 Close() error } // TimeRange 时间范围 type TimeRange struct { StartTime time.Time EndTime time.Time }