Beispiel #1
0
func reloadJobsFromDB(cr *cron.Cron, error_jobs map[string]error, backend *dbBackend, arguments map[string]interface{}) error {
	jobs, e := backend.snapshot(nil)
	if nil != e {
		return errors.New("load snapshot from db failed, " + e.Error())
	}
	versions := map[int64]version{}
	for _, v := range jobs {
		versions[v.id] = v
	}

	for _, ent := range cr.Entries() {
		if job, ok := ent.Job.(*JobFromDB); ok {
			if v, ok := versions[job.id]; ok {
				if !v.updated_at.Equal(job.updated_at) {
					reloadJobFromDB(cr, error_jobs, backend, arguments, job.id, job.name)
				}
				delete(versions, job.id)
			} else {
				log.Println("[sys] delete job -", job.name)
				cr.Unschedule(fmt.Sprint(job.id))
				delete(error_jobs, fmt.Sprint(job.id))
			}
		}
	}

	for id, _ := range versions {
		reloadJobFromDB(cr, error_jobs, backend, arguments, id, "")
	}
	return nil
}