定时任务数据模型(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)。初始化时 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 / 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. ItemCrontab 的字段对应

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

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 为路径参数或条件(见 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
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐