node-api/docker/du.go

51 lines
980 B
Go
Raw Normal View History

2020-07-09 22:27:23 +00:00
package docker
import (
"bytes"
"os/exec"
"strconv"
"strings"
)
// Return bytes, inodes occupied by a directory and/or error if there is any
func du(path string) (int, int, error) {
space, inodes := 0, 0
// Occupied space
var out bytes.Buffer
command := exec.Command("/usr/bin/du -m -s " + path)
command.Stdout = &out
err := command.Run()
if err != nil {
return space, inodes, err
}
fields := strings.Fields(strings.TrimSpace(out.String()))
out.Reset()
if len(fields) == 2 {
space, err = strconv.Atoi(fields[0])
if err != nil {
return space, inodes, err
}
}
// Occupied inodes
command = exec.Command("/usr/bin/du --inodes -s " + path)
command.Stdout = &out
err = command.Run()
if err != nil {
return space, inodes, err
}
fields = strings.Fields(strings.TrimSpace(out.String()))
out.Reset()
if len(fields) == 2 {
space, err = strconv.Atoi(fields[0])
if err != nil {
return inodes, inodes, err
}
}
return space, inodes, nil
}