func (r *Runner) destroyContainers() error { client := r.NewClient() containers, err := client.Containers(nil) if err != nil { return err } for _, container := range containers { err := client.Destroy(container.Handle()) if err != nil { return err } } return nil }
func GardenContainers(gardenAddr string, gardenNetwork string, raw bool, out io.Writer) error { client := client.New(connection.New(gardenNetwork, gardenAddr)) containers, err := client.Containers(nil) if err != nil { return err } workPool, err := workpool.NewWorkPool(32) if err != nil { return err } lock := &sync.Mutex{} wg := &sync.WaitGroup{} wg.Add(len(containers)) containerInfos := []ContainerInfo{} for _, container := range containers { container := container workPool.Submit(func() { defer wg.Done() info, err := container.Info() if err != nil { say.Println(1, say.Red("Failed to fetch container info: %s\n", container.Handle())) return } metrics, err := container.Metrics() if err != nil { say.Println(1, say.Red("Failed to fetch container metrics: %s\n", container.Handle())) return } lock.Lock() defer lock.Unlock() containerInfos = append(containerInfos, ContainerInfo{ container.Handle(), info, metrics, }) }) } wg.Wait() if raw { encoded, err := json.MarshalIndent(containerInfos, "", " ") if err != nil { return err } out.Write(encoded) return nil } if len(containerInfos) == 0 { say.Println(0, say.Red("No Containers")) } for _, containerInfo := range containerInfos { printContainer(out, containerInfo) } return nil }