mirror of https://github.com/shunfei/cronsun
parent
533f0fab5d
commit
4a3f246ed3
|
@ -24,7 +24,10 @@ type Job struct {
|
||||||
Rule []*JobRule `json:"rule"`
|
Rule []*JobRule `json:"rule"`
|
||||||
Pause bool `json:"pause"` // 可手工控制的状态
|
Pause bool `json:"pause"` // 可手工控制的状态
|
||||||
|
|
||||||
Schedules map[string][]string `json:"-"` // map[ip][]timer node 服务使用
|
// map[ip]timer node 服务使用
|
||||||
|
// 每个任务在单个结点上只支持一个时间规则
|
||||||
|
// 如果需要多个时间规则,需建新的任务
|
||||||
|
Schedules map[string]string `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type JobRule struct {
|
type JobRule struct {
|
||||||
|
@ -77,36 +80,39 @@ func GetJobs() (jobs map[string]*Job, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Job) BuildSchedules(gs map[string]*Group) {
|
func (j *Job) BuildSchedules(gs map[string]*Group) {
|
||||||
j.Schedules = make(map[string][]string)
|
j.Schedules = make(map[string]string)
|
||||||
for _, r := range j.Rule {
|
for _, r := range j.Rule {
|
||||||
sch := make(map[string]string)
|
|
||||||
for _, gid := range r.GroupIDs {
|
for _, gid := range r.GroupIDs {
|
||||||
g, ok := gs[gid]
|
g, ok := gs[gid]
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for _, id := range g.NodeIDs {
|
for _, id := range g.NodeIDs {
|
||||||
sch[id] = r.Timer
|
if t, ok := j.Schedules[id]; ok {
|
||||||
|
log.Warnf("job[%s] already exists timer[%s], timer[%s] will skip", j.ID, t, r.Timer)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
j.Schedules[id] = r.Timer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range r.NodeIDs {
|
for _, id := range r.NodeIDs {
|
||||||
sch[id] = r.Timer
|
if t, ok := j.Schedules[id]; ok {
|
||||||
|
log.Warnf("job[%s] already exists timer[%s], timer[%s] will skip", j.ID, t, r.Timer)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
j.Schedules[id] = r.Timer
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, id := range r.ExcludeNodeIDs {
|
for _, id := range r.ExcludeNodeIDs {
|
||||||
delete(sch, id)
|
delete(j.Schedules, id)
|
||||||
}
|
|
||||||
|
|
||||||
for id, t := range sch {
|
|
||||||
j.Schedules[id] = append(j.Schedules[id], t)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Job) Schedule(id string) ([]string, bool) {
|
func (j *Job) Schedule(id string) (string, bool) {
|
||||||
if len(j.Schedules) == 0 {
|
if len(j.Schedules) == 0 {
|
||||||
return nil, false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
s, ok := j.Schedules[id]
|
s, ok := j.Schedules[id]
|
||||||
|
|
11
node/node.go
11
node/node.go
|
@ -85,17 +85,12 @@ func (n *Node) Register() (err error) {
|
||||||
|
|
||||||
func (n *Node) addJobs() {
|
func (n *Node) addJobs() {
|
||||||
for _, job := range n.jobs {
|
for _, job := range n.jobs {
|
||||||
schs, ok := job.Schedule(n.ID)
|
sch, ok := job.Schedule(n.ID)
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Warnf("job[%s] has no schedules, will skip", job.ID)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if err := n.Cron.AddJob(sch, job); err != nil {
|
||||||
for _, sch := range schs {
|
log.Warnf("job[%s] timer[%s] parse err: %s", job.ID, sch)
|
||||||
if err := n.Cron.AddJob(sch, job); err != nil {
|
|
||||||
log.Warnf("job[%s] timer[%s] parse err: %s", job.ID, sch)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue