39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package update
|
|
|
|
import "time"
|
|
|
|
func (s UpdateStatus) WithRestartRequest(request RestartRequest) UpdateStatus {
|
|
return s.settled(StateRestarting, "", request.RequestedAt)
|
|
}
|
|
|
|
func (s UpdateStatus) WithResult(result Result, currentVersion string, now time.Time) UpdateStatus {
|
|
if result.IsRunning() && now.Sub(result.StartedAt) < RunningResultMaxAge {
|
|
return s.settled(StateRestarting, "", result.StartedAt)
|
|
}
|
|
if result.IsRunning() || result.Outcome == OutcomeFailed {
|
|
return s.settled(StateFailed, ErrorKindInstall, result.StartedAt)
|
|
}
|
|
if result.Outcome == OutcomeRolledBack {
|
|
return s.settled(StateFailed, ErrorKindRolledBack, result.StartedAt)
|
|
}
|
|
if result.Kind == RestartKindUpdate && result.Tag == currentVersion {
|
|
return s.settled(StateSucceeded, "", result.StartedAt)
|
|
}
|
|
s.State = StateIdle
|
|
s.Progress = nil
|
|
s.Error = nil
|
|
s.StartedAt = nil
|
|
return s
|
|
}
|
|
|
|
func (s UpdateStatus) settled(state string, errorKind string, startedAt time.Time) UpdateStatus {
|
|
s.State = state
|
|
s.Progress = nil
|
|
s.Error = nil
|
|
if errorKind != "" {
|
|
s.Error = &errorKind
|
|
}
|
|
s.StartedAt = &startedAt
|
|
return s
|
|
}
|