aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/geth/main.go4
-rw-r--r--cmd/geth/usage.go4
-rw-r--r--cmd/swarm/swarm-smoke/main.go15
-rw-r--r--cmd/utils/flags.go41
-rw-r--r--cmd/utils/flags_test.go64
5 files changed, 105 insertions, 23 deletions
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index c62fd87f2..e60a27e43 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -38,7 +38,7 @@ import (
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/node"
- "gopkg.in/urfave/cli.v1"
+ cli "gopkg.in/urfave/cli.v1"
)
const (
@@ -165,7 +165,7 @@ var (
utils.MetricsInfluxDBDatabaseFlag,
utils.MetricsInfluxDBUsernameFlag,
utils.MetricsInfluxDBPasswordFlag,
- utils.MetricsInfluxDBHostTagFlag,
+ utils.MetricsInfluxDBTagsFlag,
}
)
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
index ed7e98bba..6823aa36c 100644
--- a/cmd/geth/usage.go
+++ b/cmd/geth/usage.go
@@ -26,7 +26,7 @@ import (
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/internal/debug"
- "gopkg.in/urfave/cli.v1"
+ cli "gopkg.in/urfave/cli.v1"
)
// AppHelpTemplate is the test template for the default, global app help topic.
@@ -230,7 +230,7 @@ var AppHelpFlagGroups = []flagGroup{
utils.MetricsInfluxDBDatabaseFlag,
utils.MetricsInfluxDBUsernameFlag,
utils.MetricsInfluxDBPasswordFlag,
- utils.MetricsInfluxDBHostTagFlag,
+ utils.MetricsInfluxDBTagsFlag,
},
},
{
diff --git a/cmd/swarm/swarm-smoke/main.go b/cmd/swarm/swarm-smoke/main.go
index 4f28e86b1..43d2c1ff5 100644
--- a/cmd/swarm/swarm-smoke/main.go
+++ b/cmd/swarm/swarm-smoke/main.go
@@ -117,7 +117,7 @@ func main() {
swarmmetrics.MetricsInfluxDBDatabaseFlag,
swarmmetrics.MetricsInfluxDBUsernameFlag,
swarmmetrics.MetricsInfluxDBPasswordFlag,
- swarmmetrics.MetricsInfluxDBHostTagFlag,
+ swarmmetrics.MetricsInfluxDBTagsFlag,
}...)
app.Flags = append(app.Flags, tracing.Flags...)
@@ -176,13 +176,14 @@ func emitMetrics(ctx *cli.Context) error {
database = ctx.GlobalString(swarmmetrics.MetricsInfluxDBDatabaseFlag.Name)
username = ctx.GlobalString(swarmmetrics.MetricsInfluxDBUsernameFlag.Name)
password = ctx.GlobalString(swarmmetrics.MetricsInfluxDBPasswordFlag.Name)
- hosttag = ctx.GlobalString(swarmmetrics.MetricsInfluxDBHostTagFlag.Name)
+ tags = ctx.GlobalString(swarmmetrics.MetricsInfluxDBTagsFlag.Name)
)
- return influxdb.InfluxDBWithTagsOnce(gethmetrics.DefaultRegistry, endpoint, database, username, password, "swarm-smoke.", map[string]string{
- "host": hosttag,
- "version": gitCommit,
- "filesize": fmt.Sprintf("%v", filesize),
- })
+
+ tagsMap := utils.SplitTagsFlag(tags)
+ tagsMap["version"] = gitCommit
+ tagsMap["filesize"] = fmt.Sprintf("%v", filesize)
+
+ return influxdb.InfluxDBWithTagsOnce(gethmetrics.DefaultRegistry, endpoint, database, username, password, "swarm-smoke.", tagsMap)
}
return nil
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index a65a36204..55e84b876 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -57,7 +57,7 @@ import (
"github.com/ethereum/go-ethereum/p2p/netutil"
"github.com/ethereum/go-ethereum/params"
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
- "gopkg.in/urfave/cli.v1"
+ cli "gopkg.in/urfave/cli.v1"
)
var (
@@ -618,14 +618,14 @@ var (
Usage: "Password to authorize access to the database",
Value: "test",
}
- // 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.
+ // Tags are part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
+ // For example `host` tag could be 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: "InfluxDB `host` tag attached to all measurements",
- Value: "localhost",
+ MetricsInfluxDBTagsFlag = cli.StringFlag{
+ Name: "metrics.influxdb.tags",
+ Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements",
+ Value: "host=localhost",
}
EWASMInterpreterFlag = cli.StringFlag{
@@ -1378,16 +1378,33 @@ func SetupMetrics(ctx *cli.Context) {
database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name)
username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name)
password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name)
- hosttag = ctx.GlobalString(MetricsInfluxDBHostTagFlag.Name)
)
if enableExport {
+ tagsMap := SplitTagsFlag(ctx.GlobalString(MetricsInfluxDBTagsFlag.Name))
+
log.Info("Enabling metrics export to InfluxDB")
- go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", map[string]string{
- "host": hosttag,
- })
+
+ go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", tagsMap)
+ }
+ }
+}
+
+func SplitTagsFlag(tagsFlag string) map[string]string {
+ tags := strings.Split(tagsFlag, ",")
+ tagsMap := map[string]string{}
+
+ for _, t := range tags {
+ if t != "" {
+ kv := strings.Split(t, "=")
+
+ if len(kv) == 2 {
+ tagsMap[kv[0]] = kv[1]
+ }
}
}
+
+ return tagsMap
}
// MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails.
diff --git a/cmd/utils/flags_test.go b/cmd/utils/flags_test.go
new file mode 100644
index 000000000..adfdd0903
--- /dev/null
+++ b/cmd/utils/flags_test.go
@@ -0,0 +1,64 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
+
+// Package utils contains internal helper functions for go-ethereum commands.
+package utils
+
+import (
+ "reflect"
+ "testing"
+)
+
+func Test_SplitTagsFlag(t *testing.T) {
+ tests := []struct {
+ name string
+ args string
+ want map[string]string
+ }{
+ {
+ "2 tags case",
+ "host=localhost,bzzkey=123",
+ map[string]string{
+ "host": "localhost",
+ "bzzkey": "123",
+ },
+ },
+ {
+ "1 tag case",
+ "host=localhost123",
+ map[string]string{
+ "host": "localhost123",
+ },
+ },
+ {
+ "empty case",
+ "",
+ map[string]string{},
+ },
+ {
+ "garbage",
+ "smth=smthelse=123",
+ map[string]string{},
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := SplitTagsFlag(tt.args); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("splitTagsFlag() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}