From a6ef68fa78d2d813b818a82805bca75001828ab6 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 29 May 2018 15:40:38 +0300 Subject: [PATCH] cmd/stateth: add flag for dashboards folder. extract json from binary into json file --- .../{json.go => grafana_dashboards/geth.json} | 8 +--- cmd/stateth/stateth.go | 46 +++++++++++++++---- 2 files changed, 39 insertions(+), 15 deletions(-) rename cmd/stateth/{json.go => grafana_dashboards/geth.json} (99%) diff --git a/cmd/stateth/json.go b/cmd/stateth/grafana_dashboards/geth.json similarity index 99% rename from cmd/stateth/json.go rename to cmd/stateth/grafana_dashboards/geth.json index 462d67a5f1..6e269e7f4d 100644 --- a/cmd/stateth/json.go +++ b/cmd/stateth/grafana_dashboards/geth.json @@ -1,7 +1,3 @@ -package main - -var ( - jsonDashboard = ` { "annotations": { "list": [ @@ -231,5 +227,5 @@ var ( "uid": "dUpKvj7mz", "version": 7 } -` -) + + diff --git a/cmd/stateth/stateth.go b/cmd/stateth/stateth.go index 43c1b8ec96..0d3d6e9dc2 100644 --- a/cmd/stateth/stateth.go +++ b/cmd/stateth/stateth.go @@ -20,6 +20,7 @@ package main import ( "encoding/json" "fmt" + "io/ioutil" "os" "os/exec" "os/signal" @@ -33,9 +34,10 @@ import ( ) var ( - dockerPrefix string // unique prefix used for the created docker resources - grafanaPort int // expose port for the Grafana HTTP interface - influxdbPort int // expose port for the InfluxDB HTTP interface + dockerPrefix string // unique prefix used for the created docker resources + dashboardsFolder string // folder containing all dashboards to be imported in Grafana + grafanaPort int // expose port for the Grafana HTTP interface + influxdbPort int // expose port for the InfluxDB HTTP interface ) const ( @@ -66,6 +68,11 @@ func main() { Value: 3000, Usage: "default grafana http port", }, + cli.StringFlag{ + Name: "grafana-dashboards-folder", + Value: os.Getenv("GOPATH") + "/src/github.com/ethereum/go-ethereum/cmd/stateth/grafana_dashboards", + Usage: "default grafana dashboards folder", + }, cli.StringFlag{ Name: "docker-prefix", Value: "stateth", @@ -78,6 +85,7 @@ func main() { dockerPrefix = c.String("docker-prefix") grafanaPort = c.Int("grafana-http-port") influxdbPort = c.Int("influxdb-http-port") + dashboardsFolder = c.String("grafana-dashboards-folder") if err := runNetwork(c); err != nil { return err @@ -93,7 +101,7 @@ func main() { if err := importGrafanaDatasource(c); err != nil { return err } - if err := importGrafanaDashboard(c); err != nil { + if err := importGrafanaDashboards(c); err != nil { return err } @@ -224,7 +232,7 @@ func importGrafanaDatasource(c *cli.Context) error { return nil } -func importGrafanaDashboard(c *cli.Context) error { +func importGrafanaDashboards(c *cli.Context) error { log.Info("importing grafana dashboards") gclient, err := gapi.New(fmt.Sprintf("%s:%s", grafanaUser, grafanaPass), fmt.Sprintf("http://localhost:%d", grafanaPort)) if err != nil { @@ -232,12 +240,32 @@ func importGrafanaDashboard(c *cli.Context) error { return nil } - model := prepareDashboardModel(jsonDashboard) - - _, err = gclient.SaveDashboard(model, false) + files, err := ioutil.ReadDir(dashboardsFolder) if err != nil { log.Warn(err.Error()) - return err + return nil + } + + for _, f := range files { + name := f.Name() + if strings.Contains(name, "json") { + log.Info("importing dashboard", "dashboard", name) + + blob, err := ioutil.ReadFile(dashboardsFolder + "/" + name) + if err != nil { + log.Warn(err.Error()) + return nil + } + + model := prepareDashboardModel(string(blob)) + + _, err = gclient.SaveDashboard(model, false) + if err != nil { + log.Warn(err.Error()) + return nil + } + + } } return nil