From b8e21d9ed4fc44fd9250421ec3134d9e847fe54e Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Sat, 11 May 2019 21:46:13 +0200 Subject: [PATCH] swarm/metrics: collect metrics on datadir disk usage --- swarm/metrics/flags.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/swarm/metrics/flags.go b/swarm/metrics/flags.go index 3e7918b168..89f217a301 100644 --- a/swarm/metrics/flags.go +++ b/swarm/metrics/flags.go @@ -17,6 +17,9 @@ package metrics import ( + "os/exec" + "strconv" + "strings" "time" "github.com/ethereum/go-ethereum/cmd/utils" @@ -89,11 +92,15 @@ func Setup(ctx *cli.Context) { password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name) enableExport = ctx.GlobalBool(MetricsEnableInfluxDBExportFlag.Name) enableAccountingExport = ctx.GlobalBool(MetricsEnableInfluxDBAccountingExportFlag.Name) + datadir = ctx.GlobalString("datadir") ) // Start system runtime metrics collection go gethmetrics.CollectProcessMetrics(4 * time.Second) + // Start collecting disk metrics + go datadirDiskUsage(datadir, 4*time.Second) + gethmetrics.RegisterRuntimeMemStats(metrics.DefaultRegistry) go gethmetrics.CaptureRuntimeMemStats(metrics.DefaultRegistry, 4*time.Second) @@ -110,3 +117,19 @@ func Setup(ctx *cli.Context) { } } } + +func datadirDiskUsage(dir string, d time.Duration) { + for range time.Tick(d) { + cmd := exec.Command("du", "-s", dir) + out, err := cmd.CombinedOutput() + 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) + } +}