func()

in internal/components/setup/compose_listener.go [55:86]


func (c *ComposeContainerListener) Listen(consumer func(container *ComposeContainer)) error {
	containerEvents, errors := c.client.Events(c.ctx, types.EventsOptions{
		Filters: filters.NewArgs(
			filters.Arg("type", "container"),
			filters.Arg("event", "start"),
		),
	})

	if len(errors) > 0 {
		return <-errors
	}

	go func() {
		for {
			select {
			case msg := <-containerEvents:
				container := c.foundMessage(&msg)
				if container != nil {
					consumer(container)
				}
			case err := <-errors:
				if err != nil {
					logger.Log.Warnf("Listen docker container failed, %v", err)
				}
			case <-c.ctx.Done():
				c.cancel()
				return
			}
		}
	}()
	return nil
}