From e07c1edf143781dac1ab8fe41a03335bd6c388c7 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 15 May 2019 11:49:37 +0200 Subject: [PATCH] swarm/metrics: use stdlib, instead of exec du --- swarm/metrics/flags.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/swarm/metrics/flags.go b/swarm/metrics/flags.go index 89f217a301..39859a7b2d 100644 --- a/swarm/metrics/flags.go +++ b/swarm/metrics/flags.go @@ -17,9 +17,8 @@ package metrics import ( - "os/exec" - "strconv" - "strings" + "os" + "path/filepath" "time" "github.com/ethereum/go-ethereum/cmd/utils" @@ -118,18 +117,27 @@ func Setup(ctx *cli.Context) { } } -func datadirDiskUsage(dir string, d time.Duration) { +func datadirDiskUsage(path string, d time.Duration) { for range time.Tick(d) { - cmd := exec.Command("du", "-s", dir) - out, err := cmd.CombinedOutput() + bytes, err := dirSize(path) if err != nil { log.Warn("cannot get disk space", "err", err) } - res := strings.Split(string(out), "\t")[0] - bytes, err := strconv.ParseInt(res, 10, 64) - if err != nil { - log.Warn("cannot parse disk space", "err", err, "out", string(out)) - } + metrics.GetOrRegisterGauge("datadir.usage", nil).Update(bytes) } } + +func dirSize(path string) (int64, error) { + var size int64 + err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + size += info.Size() + } + return err + }) + return size, err +}