定时任务数据模型(`core/repositories/models/crontab`)

3 阅读3分钟

定时任务数据模型(core/repositories/models/crontab

本文说明 Cron 服务侧「可配置定时项」 core/repositories/models/crontab 的职责:表结构、uniqueId 主键语义、执行参数与 logs 累积策略,以及与 db / cron 双端的衔接。

项目地址 github.com/openskeye/g…

姊妹篇:录像计划等业务常与本表 video-project 条目联动,可结合 4.1 FetchDataLogic-统一定时数据获取 与 cron 内 VideoProjectLogic


1. 在项目中承担的作用

该模型描述 一条定时任务配置(周期、批次、超时、是否阻塞、运行日志等):数据落在表 sk-crontab业务主键为字符串 uniqueId(非自增数字 id)。初始化时 initTableRecordsInsert(crontab.InitRecords) 写入内置任务(如 video-project 录像计划),并 DeleteBy 清理 不在 UniqueIds 白名单 内的记录,避免脏数据残留。Cron 进程通过 ConfigService 拉取列表,按 uniqueId 调度 VideoProjectLogic 等实现。

层级作用
数据层AutoMigrate(new(crontab.Crontab));启动前对索引 Crontab_uniqueIdDrop + Migrate 逻辑(见 init_database.go)。
RPC / db 服务core/app/sev/db/internal/logic/configservice/crontab_*.go:列表、单行、创建、更新、删除、crontab_bulk_update_logic(按 uniqueId 批量更新 logs 等)。
HTTP / backendcore/app/sev/backend/internal/handler/config/crontab/crontab/crontab/list 等。
Croncore/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. ItemCrontab 的字段对应

  • 内嵌 *Crontab:与实体 JSON 一致。
  • Logs:仅挂载在 Item 上,API 为字符串切片;ConvToModel 写入 Crontab.Logs 字符串。
  • UseDBCachejson:"-"

crontab_update_logic 等对 logs条数裁剪(与 RPC 入参结合),避免无限增长,联调时注意观察返回的 logs 长度。


4. 列名常量(variables.go

常量数据库列
ColumnUniqueIduniqueId
ColumnTitletitle
ColumnIntervalinterval
ColumnCountercounter
ColumnBlockStatusblockStatus
ColumnStatusstatus
ColumnTimeouttimeout
ColumnLogslogs
ColumnReadonlyreadonly
ColumnCreatedAtcreatedAt
ColumnUpdatedAtupdatedAt

PrimaryUniqueId"uniqueId"不是 id)。


5. 行为与联调注意点

  • 主键:列表、Row 接口多以 uniqueId 为路径参数或条件(见 backend routes.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.goinitTableRecords
  • 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.gointernal/logic/crontab/video-project.gointernal/handler/crontab.go