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 }