Skip to content

Commit

Permalink
Stop the resource timer after last expected event
Browse files Browse the repository at this point in the history
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
  • Loading branch information
ndeloof committed Jan 16, 2024
1 parent 2bf2b22 commit 47e7ff3
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 15 deletions.
21 changes: 19 additions & 2 deletions pkg/compose/convergence.go
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ func (s *composeService) isServiceCompleted(ctx context.Context, containers Cont
return false, 0, nil
}

func (s *composeService) startService(ctx context.Context, project *types.Project, service types.ServiceConfig, containers Containers) error {
func (s *composeService) startService(ctx context.Context, project *types.Project, service types.ServiceConfig, containers Containers, wait bool) error {
if service.Deploy != nil && service.Deploy.Replicas != nil && *service.Deploy.Replicas == 0 {
return nil
}
Expand Down Expand Up @@ -765,11 +765,28 @@ func (s *composeService) startService(ctx context.Context, project *types.Projec
if err != nil {
return err
}
w.Event(progress.StartedEvent(eventName))
status := progress.Done
if wait || dependencyWaiting(project, service.Name) {
status = progress.Working
}
w.Event(progress.NewEvent(eventName, status, "Started"))
}
return nil
}

func dependencyWaiting(project *types.Project, name string) bool {
for _, service := range project.Services {
depends, ok := service.DependsOn[name]
if !ok {
continue
}
if depends.Condition == types.ServiceConditionHealthy {
return true
}
}
return false
}

func mergeLabels(ls ...types.Labels) types.Labels {
merged := types.Labels{}
for _, l := range ls {
Expand Down
2 changes: 1 addition & 1 deletion pkg/compose/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func (s *composeService) start(ctx context.Context, projectName string, options
return err
}

return s.startService(ctx, project, service, containers)
return s.startService(ctx, project, service, containers, options.Wait)
})
if err != nil {
return err
Expand Down
3 changes: 3 additions & 0 deletions pkg/compose/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,14 @@ import (

func (s *composeService) Up(ctx context.Context, project *types.Project, options api.UpOptions) error { //nolint:gocyclo
err := progress.Run(ctx, tracing.SpanWrapFunc("project/up", tracing.ProjectOptions(project), func(ctx context.Context) error {
w := progress.ContextWriter(ctx)
w.HasMore(options.Start.Attach == nil)
err := s.create(ctx, project, options.Create)
if err != nil {
return err
}
if options.Start.Attach == nil {
w.HasMore(false)
return s.start(ctx, project.Name, options.Start, nil)
}
return nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/progress/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,6 @@ func (e *Event) Spinner() any {
case Error:
return ErrorColor(spinnerError)
default:
return e.spinner.String()
return CountColor(e.spinner.String())
}
}
3 changes: 3 additions & 0 deletions pkg/progress/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ func (p *noopWriter) TailMsgf(_ string, _ ...interface{}) {

func (p *noopWriter) Stop() {
}

func (p *noopWriter) HasMore(bool) {
}
3 changes: 3 additions & 0 deletions pkg/progress/plain.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,6 @@ func (p *plainWriter) TailMsgf(msg string, args ...interface{}) {
func (p *plainWriter) Stop() {
p.done <- true
}

func (p *plainWriter) HasMore(bool) {
}
3 changes: 3 additions & 0 deletions pkg/progress/quiet.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ func (q quiet) Events(_ []Event) {

func (q quiet) TailMsgf(_ string, _ ...interface{}) {
}

func (q quiet) HasMore(bool) {
}
30 changes: 19 additions & 11 deletions pkg/progress/tty.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,18 @@ import (
)

type ttyWriter struct {
out io.Writer
events map[string]Event
eventIDs []string
repeated bool
numLines int
done chan bool
mtx *sync.Mutex
tailEvents []string
dryRun bool
skipChildEvents bool
progressTitle string
out io.Writer
events map[string]Event
eventIDs []string
repeated bool
numLines int
done chan bool
mtx *sync.Mutex
tailEvents []string
dryRun bool
skipChildEvents bool
progressTitle string
hasFollowupAction bool
}

func (w *ttyWriter) Start(ctx context.Context) error {
Expand All @@ -70,6 +71,10 @@ func (w *ttyWriter) Stop() {
w.done <- true
}

func (w *ttyWriter) HasMore(b bool) {
w.hasFollowupAction = b
}

func (w *ttyWriter) Event(e Event) {
w.mtx.Lock()
defer w.mtx.Unlock()
Expand All @@ -82,6 +87,9 @@ func (w *ttyWriter) event(e Event) {
}
if _, ok := w.events[e.ID]; ok {
last := w.events[e.ID]
if e.Status == Done && w.hasFollowupAction {
e.Status = Working
}
switch e.Status {
case Done, Error, Warning:
if last.endTime.IsZero() {
Expand Down
1 change: 1 addition & 0 deletions pkg/progress/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ type Writer interface {
Event(Event)
Events([]Event)
TailMsgf(string, ...interface{})
HasMore(more bool)
}

type writerKey struct{}
Expand Down

0 comments on commit 47e7ff3

Please sign in to comment.