package model // CrawlLogKeepPerBrand 每个品牌保留的抓取历史条数。 // // 抓取历史是「最近发生了什么」的排障材料,不是审计归档;留太多只会让查询变慢。 // 30 条足够覆盖「最近一次批量重爬 + 若干次手动重试」。 const CrawlLogKeepPerBrand = 30 // CrawlLog 品牌抓取历史的一行(append-only)。 // // 与 ingest_jobs 的分工: // - CrawlLog 记录「这一次抓取」的进程级结果(抓到几场、报了什么错、谁跑的); // - ingest_jobs 记录「每一场秀」的入库结果(新建 / 跳过 / 失败)。 // 两者按时间顺序摆在品牌详情页,就是完整的更新链路。 type CrawlLog struct { ID uint32 `gorm:"primaryKey;column:id" json:"id"` BrandID uint32 `gorm:"column:brand_id;not null" json:"brand_id"` TaskID uint32 `gorm:"column:task_id;not null;default:0" json:"task_id"` Status string `gorm:"column:status;size:16;not null;default:''" json:"status"` // done / failed Attempt int16 `gorm:"column:attempt;not null;default:1" json:"attempt"` ShowsRequested int16 `gorm:"column:shows_requested;not null;default:0" json:"shows_requested"` ShowsSubmitted int32 `gorm:"column:shows_submitted;not null;default:0" json:"shows_submitted"` Message string `gorm:"column:message;type:text;not null;default:''" json:"message"` Worker string `gorm:"column:worker;size:64;not null;default:''" json:"worker"` StartedAt uint32 `gorm:"column:started_at;not null;default:0" json:"started_at"` FinishedAt uint32 `gorm:"column:finished_at;not null;default:0" json:"finished_at"` } // TableName 指定表名。 func (CrawlLog) TableName() string { return "brand_crawl_logs" }