package managed_job import ( "errors" "time" "gitea.com/logicamp/lc" "go.uber.org/zap" ) func (job *ManagedJob) startCycle() { ticker := time.NewTicker(5 * time.Second) quit := make(chan struct{}) // load job state from db job.loadState() go func() { for { select { case <-ticker.C: job.cycle() case <-quit: ticker.Stop() return } } }() } func (job *ManagedJob) cycle() { lc.Logger.Debug("[managed-job] [new] check cycle", zap.String("jobKey", string(job.def.UID))) // Init job if job.state == nil { err := job.upload() if err != nil { job.setError("[upload-error] " + err.Error()) return } err = job.run() if err != nil { job.setError("[run-error] " + err.Error()) return } return } // Check for set running or error state if job.state.Status == JobStatusCreating { err := job.checkStatus() if errors.Is(err, ErrNoJobId) { job.state = nil } return } if job.state.Status == JobStatusRunning { err := job.checkStatus() if errors.Is(err, ErrNoJobId) { job.state = nil } if job.state.LastSavepointDate == nil || time.Now().Add(-job.def.Spec.SavepointInterval.Duration).After(*job.state.LastSavepointDate) { if job.state.SavepointTriggerId == nil { job.createSavepoint() } else { job.trackSavepoint() } } return } }