mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-23 18:55:18 +01:00
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package job
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/vmware/harbor/dao"
|
|
"github.com/vmware/harbor/models"
|
|
"github.com/vmware/harbor/utils/log"
|
|
)
|
|
|
|
// StateHandler handles transition, it associates with each state, will be called when
|
|
// SM enters and exits a state during a transition.
|
|
type StateHandler interface {
|
|
// Enter returns the next state, if it returns empty string the SM will hold the current state or
|
|
// or decide the next state.
|
|
Enter() (string, error)
|
|
//Exit should be idempotent
|
|
Exit() error
|
|
}
|
|
|
|
type DummyHandler struct {
|
|
JobID int64
|
|
}
|
|
|
|
func (dh DummyHandler) Enter() (string, error) {
|
|
return "", nil
|
|
}
|
|
|
|
func (dh DummyHandler) Exit() error {
|
|
return nil
|
|
}
|
|
|
|
type StatusUpdater struct {
|
|
DummyHandler
|
|
State string
|
|
}
|
|
|
|
func (su StatusUpdater) Enter() (string, error) {
|
|
err := dao.UpdateRepJobStatus(su.JobID, su.State)
|
|
if err != nil {
|
|
log.Warningf("Failed to update state of job: %d, state: %s, error: %v", su.JobID, su.State, err)
|
|
}
|
|
var next string = models.JobContinue
|
|
if su.State == models.JobStopped || su.State == models.JobError || su.State == models.JobFinished {
|
|
next = ""
|
|
}
|
|
return next, err
|
|
}
|
|
|
|
type ImgPuller struct {
|
|
DummyHandler
|
|
img string
|
|
logger *log.Logger
|
|
}
|
|
|
|
func (ip ImgPuller) Enter() (string, error) {
|
|
ip.logger.Infof("I'm pretending to pull img:%s, then sleep 30s", ip.img)
|
|
time.Sleep(30 * time.Second)
|
|
ip.logger.Infof("wake up from sleep....")
|
|
return "push-img", nil
|
|
}
|
|
|
|
type ImgPusher struct {
|
|
DummyHandler
|
|
targetURL string
|
|
logger *log.Logger
|
|
}
|
|
|
|
func (ip ImgPusher) Enter() (string, error) {
|
|
ip.logger.Infof("I'm pretending to push img to:%s, then sleep 30s", ip.targetURL)
|
|
time.Sleep(30 * time.Second)
|
|
ip.logger.Infof("wake up from sleep....")
|
|
return models.JobContinue, nil
|
|
}
|