first commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
"browser.local/platform/validator"
|
||||
)
|
||||
|
||||
func (svc *CoreService) projectLifecycleJobResult(job domain.Job, stamp time.Time) error {
|
||||
nextState, ok := lifecycleProjectedState(job.Capability, job.State)
|
||||
if !ok || job.ServerInstanceID == "" {
|
||||
return nil
|
||||
}
|
||||
instance, err := svc.store.ServerInstances().Get(job.ServerInstanceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
instance.State = nextState
|
||||
instance.UpdatedAt = stamp
|
||||
if err := validator.ValidateServerInstance(instance); err != nil {
|
||||
return err
|
||||
}
|
||||
return svc.store.ServerInstances().Update(instance)
|
||||
}
|
||||
|
||||
func lifecycleProjectedState(capability string, jobState domain.JobState) (domain.ServerInstanceState, bool) {
|
||||
if capability != domain.LifecycleCapabilityInstall && capability != domain.LifecycleCapabilityStart && capability != domain.LifecycleCapabilityStop {
|
||||
return "", false
|
||||
}
|
||||
if jobState == domain.JobStateFailed || jobState == domain.JobStateCancelled {
|
||||
return domain.ServerInstanceStateFailed, true
|
||||
}
|
||||
if jobState != domain.JobStateSucceeded {
|
||||
return "", false
|
||||
}
|
||||
switch capability {
|
||||
case domain.LifecycleCapabilityInstall:
|
||||
return domain.ServerInstanceStateReady, true
|
||||
case domain.LifecycleCapabilityStart:
|
||||
return domain.ServerInstanceStateRunning, true
|
||||
case domain.LifecycleCapabilityStop:
|
||||
return domain.ServerInstanceStateStopped, true
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user