func collectUnit(container container, units chan<- provision.Unit, wg *sync.WaitGroup) { defer wg.Done() unit := provision.Unit{ Name: container.ID, AppName: container.AppName, Type: container.Type, } if container.Status == "error" { unit.Status = provision.StatusDown units <- unit return } if container.Status == "running" { unit.Ip = container.HostAddr ip, hostPort, err := container.networkInfo() if err == nil && (hostPort != container.HostPort || ip != container.IP) { err = fixContainer(&container, ip, hostPort) if err != nil { log.Errorf("error on fix container hostport for [container %s]", container.ID) return } } addr := strings.Replace(container.getAddress(), "http://", "", 1) conn, err := net.Dial("tcp", addr) if err != nil { unit.Status = provision.StatusUnreachable } else { conn.Close() unit.Status = provision.StatusStarted } log.Debugf("collected data for [container %s] - [app %s]", container.ID, container.AppName) units <- unit } }