func()

in cleanup.go [129:193]


func (c *CustomDockerClient) diskSpaceRemotely(path string) (ds DiskSpace, err error) {
	_, err = c.InspectImage(diskSpaceImage)
	if err != nil {
		logrus.Debugln("Pulling", diskSpaceImage, "...")
		err = c.PullImage(docker.PullImageOptions{
			Repository: diskSpaceImage,
		}, docker.AuthConfiguration{})
		if err != nil {
			return
		}
	}

	// create container for the first time
	container, err := c.CreateContainer(docker.CreateContainerOptions{
		Config: &docker.Config{
			Image:        diskSpaceImage,
			Entrypoint:   []string{"/bin/stat"},
			Cmd:          []string{"-f", "-c%a %b %s %d %c", path},
			AttachStdout: true,
		},
	})
	if err != nil {
		return
	}

	defer c.RemoveContainer(docker.RemoveContainerOptions{
		ID:    container.ID,
		Force: true,
	})

	err = c.StartContainer(container.ID, nil)
	if err != nil {
		return
	}

	errorCode, err := c.WaitContainer(container.ID)
	if err != nil || errorCode != 0 {
		return
	}

	var buffer bytes.Buffer
	err = c.Logs(docker.LogsOptions{
		Container:    container.ID,
		OutputStream: &buffer,
		Stdout:       true,
		Tail:         "1",
	})
	if err != nil {
		return
	}

	var freeBlocks, totalBlocks, blockSize, freeFiles, totalFiles uint64
	_, err = fmt.Fscanln(&buffer, &freeBlocks, &totalBlocks, &blockSize, &freeFiles, &totalFiles)
	if err != nil {
		return
	}

	ds = DiskSpace{
		BytesFree:  uint64(freeBlocks * blockSize),
		BytesTotal: uint64(totalBlocks * blockSize),
		FilesFree:  freeFiles,
		FilesTotal: totalFiles,
	}
	return
}