From fdbf8be7356cb8a80c6fdfe0d24b0863903e1832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 25 Jun 2015 15:33:26 +0300 Subject: [PATCH] cmd/geth, rpc/api: fix reported metrics issues --- cmd/geth/monitorcmd.go | 20 ++++++++------------ rpc/api/debug.go | 27 ++++++++++++--------------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go index 78b67c17c..43937dcaa 100644 --- a/cmd/geth/monitorcmd.go +++ b/cmd/geth/monitorcmd.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "reflect" + "runtime" "sort" "strings" "time" @@ -72,15 +73,7 @@ func monitor(ctx *cli.Context) { } monitored := resolveMetrics(metrics, ctx.Args()) if len(monitored) == 0 { - list := []string{} - for _, metric := range expandMetrics(metrics, "") { - switch { - case strings.HasSuffix(metric, "/0"): - list = append(list, strings.Replace(metric, "/0", "/[0-100]", -1)) - case !strings.Contains(metric, "Percentiles"): - list = append(list, metric) - } - } + list := expandMetrics(metrics, "") sort.Strings(list) utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) } @@ -116,11 +109,14 @@ func monitor(ctx *cli.Context) { } for i, metric := range monitored { charts[i] = termui.NewLineChart() + if runtime.GOOS == "windows" { + charts[i].Mode = "dot" + } charts[i].Data = make([]float64, 512) charts[i].DataLabels = []string{""} charts[i].Height = (termui.TermHeight() - footer.Height) / rows charts[i].AxesColor = termui.ColorWhite - charts[i].PaddingBottom = -1 + charts[i].PaddingBottom = -2 charts[i].Border.Label = metric charts[i].Border.LabelFgColor = charts[i].Border.FgColor | termui.AttrBold @@ -141,7 +137,7 @@ func monitor(ctx *cli.Context) { for { select { case event := <-termui.EventCh(): - if event.Type == termui.EventKey && event.Ch == 'q' { + if event.Type == termui.EventKey && event.Key == termui.KeyCtrlC { return } if event.Type == termui.EventResize { @@ -302,7 +298,7 @@ func updateChart(metric string, data []float64, chart *termui.LineChart, err err func updateFooter(ctx *cli.Context, err error, footer *termui.Par) { // Generate the basic footer refresh := time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second - footer.Text = fmt.Sprintf("Press q to quit. Refresh interval: %v.", refresh) + footer.Text = fmt.Sprintf("Press Ctrl+C to quit. Refresh interval: %v.", refresh) footer.TextFgColor = termui.Theme().ParTextFg | termui.AttrBold // Append any encountered errors diff --git a/rpc/api/debug.go b/rpc/api/debug.go index 5975f88ab..f16f62d2e 100644 --- a/rpc/api/debug.go +++ b/rpc/api/debug.go @@ -193,11 +193,6 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { format := func(total float64, rate float64) string { return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) } - // Create the percentile units - percentiles := make([]float64, 101) - for i := 0; i <= 100; i++ { - percentiles[i] = float64(i) / 100 - } // Iterate over all the metrics, and just dump for now counters := make(map[string]interface{}) metrics.DefaultRegistry.Each(func(name string, metric interface{}) { @@ -220,21 +215,23 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "AvgRate05Min": metric.Rate5(), "AvgRate15Min": metric.Rate15(), "MeanRate": metric.RateMean(), - "Total": float64(metric.Count()), + "Overall": float64(metric.Count()), } case metrics.Timer: - ps := make(map[string]interface{}) - for i, p := range metric.Percentiles(percentiles) { - ps[fmt.Sprintf("%d", i)] = p - } root[name] = map[string]interface{}{ "AvgRate01Min": metric.Rate1(), "AvgRate05Min": metric.Rate5(), "AvgRate15Min": metric.Rate15(), "MeanRate": metric.RateMean(), - "Total": float64(metric.Count()), - "Percentiles": ps, + "Overall": float64(metric.Count()), + "Percentiles": map[string]interface{}{ + "5": metric.Percentile(0.05), + "20": metric.Percentile(0.2), + "50": metric.Percentile(0.5), + "80": metric.Percentile(0.8), + "95": metric.Percentile(0.95), + }, } default: @@ -247,7 +244,7 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), + "Overall": format(float64(metric.Count()), metric.RateMean()), } case metrics.Timer: @@ -255,15 +252,15 @@ func (self *debugApi) Metrics(req *shared.Request) (interface{}, error) { "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Total": format(float64(metric.Count()), metric.RateMean()), + "Overall": format(float64(metric.Count()), metric.RateMean()), "Maximum": time.Duration(metric.Max()).String(), "Minimum": time.Duration(metric.Min()).String(), "Percentiles": map[string]interface{}{ + "5": time.Duration(metric.Percentile(0.05)).String(), "20": time.Duration(metric.Percentile(0.2)).String(), "50": time.Duration(metric.Percentile(0.5)).String(), "80": time.Duration(metric.Percentile(0.8)).String(), "95": time.Duration(metric.Percentile(0.95)).String(), - "99": time.Duration(metric.Percentile(0.99)).String(), }, }