SkeyeVSS开发笔记-定时任务数据模型
定时任务数据模型(core/repositories/models/crontab)
本文说明 Cron 服务侧「可配置定时项」 core/repositories/models/crontab 的职责:表结构、uniqueId 主键语义、执行参数与 logs 累积策略,以及与 db / cron 双端的衔接。
项目地址 https://github.com/openskeye/go-vss
姊妹篇:录像计划等业务常与本表 video-project 条目联动,可结合 4.1 FetchDataLogic-统一定时数据获取 与 cron 内 VideoProjectLogic。
1. 在项目中承担的作用
该模型描述 一条定时任务配置(周期、批次、超时、是否阻塞、运行日志等):数据落在表 sk-crontab。业务主键为字符串 uniqueId(非自增数字 id)。初始化时 initTableRecords 会 Insert(crontab.InitRecords) 写入内置任务(如 video-project 录像计划),并 DeleteBy 清理 不在 UniqueIds 白名单 内的记录,避免脏数据残留。Cron 进程通过 ConfigService 拉取列表,按 uniqueId 调度 VideoProjectLogic 等实现。
| 层级 | 作用 |
|---|---|
| 数据层 | AutoMigrate(new(crontab.Crontab));启动前对索引 Crontab_uniqueId 有 Drop + Migrate 逻辑(见 init_database.go)。 |
| RPC / db 服务 | core/app/sev/db/internal/logic/configservice/crontab_*.go:列表、单行、创建、更新、删除、crontab_bulk_update_logic(按 uniqueId 批量更新 logs 等)。 |
| HTTP / backend | core/app/sev/backend/internal/handler/config/crontab:/crontab、/crontab/list 等。 |
| Cron | core/app/sev/cron/internal/logic/fetch-data/crontab.go 拉取配置;internal/logic/crontab/video-project.go 等绑定 UniqueIdVideoProject。 |
UseCache() 返回 nil,不启用模型级内存缓存。
2. 表与字段:数据库列 ↔ Go ↔ JSON
实体 Crontab 映射表 sk-crontab。注意:表无自增 id,主键列为 uniqueId。
| 字段 | 含义 | 说明 |
|---|---|---|
uniqueId |
业务唯一键 | CHAR(40),唯一索引;ORM 主键字段。内置 video-project(录像计划)。 |
title |
标题 | 展示用。 |
interval |
执行周期 | 秒 单位/s。 |
status |
启用状态 | 默认 1 启用(与其它模型 state 命名不同,以字段 status 为准)。 |
readonly |
是否只读 | 1 只读,防止后台误改内置项(与初始化数据一致)。 |
timeout |
单批超时 | 秒。 |
counter |
每周期批大小 | 每个周期每一批次执行数量;内置录像计划示例为 40。 |
blockStatus |
是否阻塞下一周期 | 1:须等本周期所有批次完成再进入下一周期;0:可不等待。 |
logs |
运行日志 | 库内 JSON 字符串数组;Item.Logs 为 []string;保留约 100 条(具体截断在更新逻辑中实现)。 |
createdAt |
创建时间 | 毫秒时间戳。 |
updatedAt |
更新时间 | 毫秒时间戳;Correction / CorrectionMap 刷新。 |
3. Item 与 Crontab 的字段对应
- 内嵌
*Crontab:与实体 JSON 一致。 Logs:仅挂载在Item上,API 为字符串切片;ConvToModel写入Crontab.Logs字符串。UseDBCache:json:"-"。
crontab_update_logic 等对 logs 有 条数裁剪(与 RPC 入参结合),避免无限增长,联调时注意观察返回的 logs 长度。
4. 列名常量(variables.go)
| 常量 | 数据库列 |
|---|---|
ColumnUniqueId |
uniqueId |
ColumnTitle |
title |
ColumnInterval |
interval |
ColumnCounter |
counter |
ColumnBlockStatus |
blockStatus |
ColumnStatus |
status |
ColumnTimeout |
timeout |
ColumnLogs |
logs |
ColumnReadonly |
readonly |
ColumnCreatedAt |
createdAt |
ColumnUpdatedAt |
updatedAt |
PrimaryUniqueId 为 "uniqueId"(不是 id)。
5. 行为与联调注意点
- 主键:列表、Row 接口多以
uniqueId为路径参数或条件(见 backendroutes.go/crontab/:uniqueId)。 - 初始化:
InitRecords会插入readonly:1的内置任务;DeleteBy ... NOT IN UniqueIds用于删除非白名单遗留行,勿随意从UniqueIds移除仍在使用的uniqueId。 - Cron 侧:
main.go注册crontab.VideoProjectLogic等与uniqueId绑定的处理器;修改周期应通过 DB 配置 + 拉取 生效。
6. 相关代码路径
- 模型包:
core/repositories/models/crontab/ - 迁移与种子数据:
core/app/sev/db/internal/svc/init_database.go(initTableRecords) - Config RPC:
core/app/sev/db/internal/logic/configservice/crontab_*.go - HTTP:
core/app/sev/backend/internal/handler/config/crontab/ - Cron 拉取与录像计划:
core/app/sev/cron/internal/logic/fetch-data/crontab.go、internal/logic/crontab/video-project.go、internal/handler/crontab.go
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)