aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/metrics/flags.go
blob: 79490fd360123a53abad5fde6b8cd12069f573bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Copyright 2018 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

package metrics

import (
    "time"

    "github.com/ethereum/go-ethereum/cmd/utils"
    gethmetrics "github.com/ethereum/go-ethereum/metrics"
    "github.com/ethereum/go-ethereum/metrics/influxdb"
    "github.com/ethereum/go-ethereum/swarm/log"
    "gopkg.in/urfave/cli.v1"
)

var (
    metricsEnableInfluxDBExportFlag = cli.BoolFlag{
        Name:  "metrics.influxdb.export",
        Usage: "Enable metrics export/push to an external InfluxDB database",
    }
    metricsInfluxDBEndpointFlag = cli.StringFlag{
        Name:  "metrics.influxdb.endpoint",
        Usage: "Metrics InfluxDB endpoint",
        Value: "http://127.0.0.1:8086",
    }
    metricsInfluxDBDatabaseFlag = cli.StringFlag{
        Name:  "metrics.influxdb.database",
        Usage: "Metrics InfluxDB database",
        Value: "metrics",
    }
    metricsInfluxDBUsernameFlag = cli.StringFlag{
        Name:  "metrics.influxdb.username",
        Usage: "Metrics InfluxDB username",
        Value: "",
    }
    metricsInfluxDBPasswordFlag = cli.StringFlag{
        Name:  "metrics.influxdb.password",
        Usage: "Metrics InfluxDB password",
        Value: "",
    }
    // The `host` tag is part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
    // It is used so that we can group all nodes and average a measurement across all of them, but also so
    // that we can select a specific node and inspect its measurements.
    // https://docs.influxdata.com/influxdb/v1.4/concepts/key_concepts/#tag-key
    metricsInfluxDBHostTagFlag = cli.StringFlag{
        Name:  "metrics.influxdb.host.tag",
        Usage: "Metrics InfluxDB `host` tag attached to all measurements",
        Value: "localhost",
    }
)

// Flags holds all command-line flags required for metrics collection.
var Flags = []cli.Flag{
    utils.MetricsEnabledFlag,
    metricsEnableInfluxDBExportFlag,
    metricsInfluxDBEndpointFlag, metricsInfluxDBDatabaseFlag, metricsInfluxDBUsernameFlag, metricsInfluxDBPasswordFlag, metricsInfluxDBHostTagFlag,
}

func Setup(ctx *cli.Context) {
    if gethmetrics.Enabled {
        log.Info("Enabling swarm metrics collection")
        var (
            enableExport = ctx.GlobalBool(metricsEnableInfluxDBExportFlag.Name)
            endpoint     = ctx.GlobalString(metricsInfluxDBEndpointFlag.Name)
            database     = ctx.GlobalString(metricsInfluxDBDatabaseFlag.Name)
            username     = ctx.GlobalString(metricsInfluxDBUsernameFlag.Name)
            password     = ctx.GlobalString(metricsInfluxDBPasswordFlag.Name)
            hosttag      = ctx.GlobalString(metricsInfluxDBHostTagFlag.Name)
        )

        // Start system runtime metrics collection
        go gethmetrics.CollectProcessMetrics(2 * time.Second)

        if enableExport {
            log.Info("Enabling swarm metrics export to InfluxDB")
            go influxdb.InfluxDBWithTags(gethmetrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "swarm.", map[string]string{
                "host": hosttag,
            })
        }
    }
}
d class='commitgraph'>* Clean up Makefile a bit: remove left bits about openquicktime,lioux2004-12-151-20/+1 * Update to 0.7.10lioux2004-12-144-55/+43 * o Fix build problem on 4.x branch by upholding C{,XX}FLAGS; thus,lioux2004-12-141-2/+5 * Add nifty -f (frequency) option to setchannel.edwin2004-12-144-6/+16 * Update to KDE 3.3.2lofi2004-12-1413-87/+65 * Respect CFLAGSahze2004-12-131-1/+1 * - Fix lsdvd so it can print a DVD-titleahze2004-12-132-2/+41 * o Fix PLIST: ffplay is only built WITH_SDLlioux2004-12-132-2/+8 * - Fix crash on exitingpav2004-12-131-1/+2 * Unset maintainership on ports. Multiple maintainerjosef2004-12-121-1/+1 * - Mark IGNORE on 4.x, it builds but does not run properly.pav2004-12-121-1/+7 * - Fix BATCH buildpav2004-12-121-13/+9 * BROKEN on 4.x: Does not compilekris2004-12-121-0/+1 * - Update to 0.9.7pav2004-12-126-39/+15 * BROKEN: Unfetchablekris2004-12-111-0/+1 * - Update to 2.0.34-test1sem2004-12-102-36/+32 * Update to version 0.6.0hq2004-12-093-5/+13 * Fix build on ia64.lofi2004-12-091-0/+11 * Removed on maintainer request: no longer maintained by the authorsem2004-12-095-89/+0 * libcdio: Update to 0.71arved2004-12-096-24/+14 * Fix wrong assumption on iconv args on amd64.pb2004-12-092-1/+22 * - Make the library actually usable on gcc 3.4 systems:pav2004-12-092-0/+23 * Fix libmpeg2 detection on 4.x branchlioux2004-12-091-0/+14 * Fix build without NOPORTDOCS: force detection of port textproc/texi2htmllioux2004-12-082-0/+12 * Fix plist on !i386arved2004-12-082-5/+8 * - Use new ffmpeg 0.4.9.p1 from ports and remove ffmpeg snapshotahze2004-12-074-224/+28 * Fix build on amd64. Add missing dependency on multimedia/mpeg4ip-libmp4v2.kris2004-12-072-11/+16 * Chase library version bump on multimedia/ffmpeglioux2004-12-062-2/+2 * o Update to 0.4.9.p1lioux2004-12-0618-244/+312 * Bump portrevision and dependency on ImageMagickjosef2004-12-053-6/+7 * Correct libmusepack dependency.marcus2004-12-052-2/+2 * Update to 0.4.7arved2004-12-053-9/+6 * Add totem-gstreamer, a slave port to totem that enables the gstreamermarcus2004-12-052-0/+19 * Prepare totem to be a master port.marcus2004-12-051-4/+4 * Update to 1.1arved2004-12-052-4/+4 * BROKEN on !i386: Broken pkg-plistkris2004-12-041-0/+4 * Reset MAINTAINER to ports@FreeBSD.orgahze2004-12-011-1/+1 * Add libvisual and musepack support.kwm2004-12-014-4/+88 * Update to version 0.8.1.kwm2004-11-304-6/+6 * o Add graphics/jpeg-mmx supportlioux2004-11-281-7/+25 * Update to 0.2.4lioux2004-11-283-7/+8 * - Fix header problemahze2004-11-286-3/+24