mirror of
https://github.com/ProudMuBai/GoFilm.git
synced 2026-02-04 06:54:41 +08:00
failure record
This commit is contained in:
@@ -72,8 +72,10 @@ const (
|
||||
// DefaultUpdateTime 每次采集最近 3 小时内更新的影片
|
||||
DefaultUpdateTime = 3
|
||||
|
||||
// FailureCollectKey 失败采集记录key
|
||||
FailureCollectKey = "CollectRecord:Fail:%d"
|
||||
// FailureAllCollectKey 失败采集记录-全量采集记录
|
||||
FailureAllCollectKey = "CollectRecord:Fail:%s"
|
||||
// FailureUpdateCollectKey 失败采集记录-更新失败记录
|
||||
FailureUpdateCollectKey = "CollectRecord:Fail:%s"
|
||||
)
|
||||
|
||||
// -------------------------Web API相关redis key-----------------------------------
|
||||
@@ -85,10 +87,11 @@ const (
|
||||
// -------------------------Database Connection Params-----------------------------------
|
||||
const (
|
||||
// SearchTableName 存放检索信息的数据表名
|
||||
SearchTableName = "search"
|
||||
UserTableName = "users"
|
||||
UserIdInitialVal = 10000
|
||||
FileTableName = "files"
|
||||
SearchTableName = "search"
|
||||
UserTableName = "users"
|
||||
UserIdInitialVal = 10000
|
||||
FileTableName = "files"
|
||||
FailureRecordTableName = "failure_records"
|
||||
|
||||
//mysql服务配置信息 root:root 设置mysql账户的用户名和密码
|
||||
|
||||
|
||||
76
server/model/system/CollectRecord.go
Normal file
76
server/model/system/CollectRecord.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"log"
|
||||
"server/config"
|
||||
"server/plugin/db"
|
||||
)
|
||||
|
||||
// FailureRecord 失败采集记录信息机构体
|
||||
type FailureRecord struct {
|
||||
gorm.Model
|
||||
OriginId string `json:"originId"` // 采集站唯一ID
|
||||
Uri string `json:"uri"` // 采集源链接
|
||||
CollectType ResourceType `json:"collectType"` // 采集类型
|
||||
PageNumber int `json:"pageNumber"` // 页码
|
||||
Hour int `json:"hour"` // 采集参数 h 时长
|
||||
Cause string `json:"cause"` // 失败原因
|
||||
Status int `json:"status"` // 重试状态
|
||||
}
|
||||
|
||||
// TableName 采集失败记录表表名
|
||||
func (fr FailureRecord) TableName() string {
|
||||
return config.FailureRecordTableName
|
||||
}
|
||||
|
||||
// CreateFailureRecordTable 创建失效记录表
|
||||
func CreateFailureRecordTable() {
|
||||
var fl = &FailureRecord{}
|
||||
// 不存在则创建FailureRecord表
|
||||
if !db.Mdb.Migrator().HasTable(fl) {
|
||||
if err := db.Mdb.AutoMigrate(fl); err != nil {
|
||||
log.Println("Create Table failure_record failed:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SaveFailureRecord 添加采集失效记录
|
||||
func SaveFailureRecord(fl FailureRecord) {
|
||||
if err := db.Mdb.Create(&fl).Error; err != nil {
|
||||
log.Println("Add failure record failed:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// FailureRecordList 获取所有的采集失效记录
|
||||
func FailureRecordList(page *Page) []FailureRecord {
|
||||
var count int64
|
||||
db.Mdb.Model(&FailureRecord{}).Count(&count)
|
||||
page.Total = int(count)
|
||||
page.PageCount = int((page.Total + page.PageSize - 1) / page.PageSize)
|
||||
// 获取分页查询的数据
|
||||
var list []FailureRecord
|
||||
if err := db.Mdb.Limit(page.PageSize).Offset((page.Current - 1) * page.PageSize).Find(&list).Error; err != nil {
|
||||
log.Println(err)
|
||||
return nil
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
// FindRecordById 获取id对应的失效记录
|
||||
func FindRecordById(id uint) *FailureRecord {
|
||||
var fr FailureRecord
|
||||
fr.ID = id
|
||||
// 通过ID查询对应的数据
|
||||
db.Mdb.First(fr)
|
||||
return &fr
|
||||
}
|
||||
|
||||
// RetryRecord 修改重试采集成功的记录
|
||||
func RetryRecord(id uint, status int64) error {
|
||||
// 查询id对应的失败记录
|
||||
fr := FindRecordById(id)
|
||||
// 将本次更新成功的记录数据状态修改为成功 0
|
||||
return db.Mdb.Model(&FailureRecord{}).Where("update_at > ?", fr.UpdatedAt).Update("status", 0).Error
|
||||
|
||||
}
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"server/config"
|
||||
"server/plugin/common/util"
|
||||
"server/plugin/db"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
@@ -72,16 +71,6 @@ type FilmSource struct {
|
||||
Interval int `json:"interval"` // 采集时间间隔 单位/ms
|
||||
}
|
||||
|
||||
// FailureCollect 失败采集记录信息机构体
|
||||
type FailureCollect struct {
|
||||
Id string `json:"id"` // 采集站唯一ID
|
||||
CollectType ResourceType `json:"collectType"` // 采集类型
|
||||
PageNumber int64 `json:"pageNumber"` // 页码
|
||||
//Hour int64 `json:"hour"` // 采集参数 h 时长
|
||||
Cause string `json:"cause"` // 失败原因
|
||||
Time int `json:"time"` // 采集失败时的时间
|
||||
}
|
||||
|
||||
// SaveCollectSourceList 保存采集站Api列表
|
||||
func SaveCollectSourceList(list []FilmSource) error {
|
||||
var zl []redis.Z
|
||||
@@ -186,22 +175,3 @@ func ExistCollectSourceList() bool {
|
||||
return true
|
||||
|
||||
}
|
||||
|
||||
// CollectFailRecord 记录采集失败的相关参数信息
|
||||
func CollectFailRecord(fc FailureCollect) error {
|
||||
// 将fc序列化为json格式进行存储
|
||||
m, _ := json.Marshal(fc)
|
||||
// 获取当前的时间戳作为set集合的Score
|
||||
z := redis.Z{Score: float64(time.Now().Unix()), Member: m}
|
||||
return db.Rdb.ZAdd(db.Cxt, config.FailureCollectKey, z).Err()
|
||||
}
|
||||
|
||||
// GetCollectFailList 从失败采集记录中读取一部分记录
|
||||
func GetCollectFailList() []FailureCollect {
|
||||
// 获取多条记录, 降低读取频率 or 多次单条读取
|
||||
|
||||
// 一次获取多条记录, 再次执行失败则重新进行记录
|
||||
|
||||
// 读取单条记录, 成功执行则进行记录清除, 否则对其进行保留
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ func SaveSearchTag(search SearchInfo) {
|
||||
// 获取redis中的searchMap
|
||||
key := fmt.Sprintf(config.SearchTitle, search.Pid)
|
||||
searchMap := db.Rdb.HGetAll(db.Cxt, key).Val()
|
||||
// 是否存储对应分类的map, 如果不存在则缓存一份
|
||||
// 是否存在对应分类的map, 如果不存在则缓存一份
|
||||
if len(searchMap) == 0 {
|
||||
searchMap = make(map[string]string)
|
||||
searchMap["Category"] = "类型"
|
||||
|
||||
@@ -12,4 +12,6 @@ func TableInIt() {
|
||||
system.CreateSearchTable()
|
||||
// 创建图片信息管理表
|
||||
system.CreateFileTable()
|
||||
// 创建采集失效记录表
|
||||
system.CreateFailureRecordTable()
|
||||
}
|
||||
|
||||
@@ -139,6 +139,9 @@ func collectFilm(s *system.FilmSource, h, pg int) {
|
||||
// 执行采集方法 获取影片详情list
|
||||
list, err := spiderCore.GetFilmDetail(r)
|
||||
if err != nil || len(list) <= 0 {
|
||||
// 添加采集失败记录
|
||||
fr := system.FailureRecord{OriginId: s.Id, Uri: s.Uri, CollectType: system.CollectVideo, PageNumber: pg, Hour: h, Cause: err.Error(), Status: 1}
|
||||
system.SaveFailureRecord(fr)
|
||||
log.Println("GetMovieDetail Error: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user