用Go实现一个跨语言的定期任务调度器(2)

上一篇介绍了我们设计定期任务调度器的思路


这一篇介绍数据库的表设计

首先定义两张表, 这里使用gorm来定义

type PeriodicTask struct {
	ID       int    `gorm:"primaryKey;autoIncrement"`
	Name     string `gorm:"size:100"`
	Describe string `gorm:"size:300"`
	Status   int
	Args     string
	Git      string `gorm:"size:100"`
	Entry    string `gorm:"size:100"`
	Lang     string `gorm:"size:10"`
	Cron     string `gorm:"size:100"`
	MailList string `gorm:"size:200"`
	User     Users
	UserID   int `gorm:"size:30"`
}

type PeriodicTaskHistory struct {
	ID             int `gorm:"primaryKey;autoIncrement"`
	PeriodicTask   PeriodicTask
	PeriodicTaskID int
	Result         int
	Output         string      `gorm:"size:50"`
	Executor       string      `gorm:"size:50"`
	Time           FormartTime `gorm:"type:datetime"`
	Duration       string      `gorm:"size:50"`
}

PeriodicTask用来存储任务信息

  • Args: 存储敏感数据
  • Status: 表示任务的状态, 0为正常, 1为暂停, 2为删除
  • Git: 任务的git地址
  • Entry: 任务的入口文件, 比如你有10个py文件, 但是任务的入口文件只有1个
  • Lang: 任务的语言, 根据不同的语言, 我们调用不同的容器
  • Cron: 任务的cron表达式
  • MailList: 通知列表, 可以为空, 当不为空时, 每次任务执行完成, 都会发送邮件通知用户
  • User: 任务的创建人是谁

PeriodicTaskHistory用来存储任务的执行信息

  • PeriodicTask: 哪一个任务的日志
  • Result: 0成功,1失败
  • Output: 任务的输出, 可以捕获容器的标准错误输出和标准输出
  • Executor: 执行人是谁, 如果是定期调度, 那么为Auto, 手动触发, 就是人的名字
  • Time: 日志的创建时间
  • Duration: 任务的耗时

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注