Skip to content

pkg/models

📄 统一 Result 模型与证据结构。

pkg/models 定义 snir 的核心数据模型,所有集成模式与 Writer 共享。

📁 源码:pkg/models/models.go · pkg/models/time.go

核心常量

ResultSchemaVersion = "snir-skills.result.v1"

每条结果带此字段,下游据此判断兼容性。

类型总览

类型源码说明
ResultL22一次采集的顶层结果
RequestTypeL14请求类型(Request/Response)
HeaderL145HTTP 响应头
NetworkLogL153网络请求日志
ConsoleLogL165控制台日志
CookieCookie
TLSTLS 证书信息
Technology识别的技术

Result 结构

Result 是核心聚合根,把截图与所有证据关联到一条记录:

go
type Result struct {
    Path string `json:"path"`
    ID   uint   `json:"id" gorm:"primarykey"`

    URL           string    `json:"url"`
    SchemaVersion string    `json:"schema_version"`
    Scheme        string    `json:"scheme"`
    Host          string    `json:"host"`
    Port          int       `json:"port"`
    Endpoint      string    `json:"endpoint"`
    ProbedAt      time.Time `json:"probed_at"`
    FinalURL      string    `json:"final_url"`
    ResponseCode  int       `json:"response_code"`
    // ... 截图/哈希/失败标记 ...
    TLS          TLS          `json:"tls"`
    Technologies []Technology `json:"technologies"`
    Headers      []Header     `json:"headers"`
    Network      []NetworkLog `json:"network"`
    Console      []ConsoleLog `json:"console"`
    Cookies      []Cookie     `json:"cookies"`
}

完整字段见 Result Schema

ER 关系

嵌套证据以切片挂载;GORM 持久化时各自成表,通过 ResultID 外键关联,constraint:OnDelete:CASCADE——删除 Result 时连带删除其证据。

辅助函数

函数源码说明
EnrichEndpoint(result)L117从 URL 补 host/port/scheme/endpoint
DefaultPortForScheme(scheme)L124http→80、https→443

EnrichEndpoint 的归一化逻辑:

时间

Now()time.go)集中时间获取,便于测试注入固定时间,避免直接 time.Now() 散落各处。

序列化约定

截图字节不入文本/不入库,省空间
  • JSONL:ScreenshotBytesjson:"-" 不序列化——字节不入文本,否则 JSONL 文件巨大
  • SQLite:ScreenshotBytesgorm:"-" 不入库——字节不入库,截图以文件形式存 screenshots/,DB 只存路径
  • 索引字段:html/title/perception_hash/perception_hash_group_idgorm:"index",加速查询

→ 要拿截图字节,用 ScreenshotBytes 字段或 *Bytes 系列 API,不依赖 JSONL/DB。

下一步

基于 MIT 许可发布