From a793a54fd00461e7858142ed5008491943b54899 Mon Sep 17 00:00:00 2001 From: Chris Grindstaff Date: Thu, 2 Feb 2023 10:46:02 -0500 Subject: [PATCH] test: ensure rate calculations are not 1m --- cmd/tools/grafana/dashboard_test.go | 52 ++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/cmd/tools/grafana/dashboard_test.go b/cmd/tools/grafana/dashboard_test.go index 6983f944d..31427079c 100644 --- a/cmd/tools/grafana/dashboard_test.go +++ b/cmd/tools/grafana/dashboard_test.go @@ -347,21 +347,7 @@ func checkUnusedVariables(t *testing.T, path string, data []byte) { return true }) - // collect all expressions - expressions := make([]string, 0) - gjson.GetBytes(data, "panels").ForEach(func(key, value gjson.Result) bool { - doExpr("", key, value, func(path string, expr string) { - expressions = append(expressions, expr) - }) - value.Get("panels").ForEach(func(key2, value2 gjson.Result) bool { - pathPrefix := fmt.Sprintf("panels[%d].", key.Int()) - doExpr(pathPrefix, key2, value2, func(path string, expr string) { - expressions = append(expressions, expr) - }) - return true - }) - return true - }) + expressions := allExpressions(data) // check that each variable is used in at least one expression varLoop: @@ -381,6 +367,24 @@ varLoop: } } +func allExpressions(data []byte) []string { + expressions := make([]string, 0) + gjson.GetBytes(data, "panels").ForEach(func(key, value gjson.Result) bool { + doExpr("", key, value, func(path string, expr string) { + expressions = append(expressions, expr) + }) + value.Get("panels").ForEach(func(key2, value2 gjson.Result) bool { + pathPrefix := fmt.Sprintf("panels[%d].", key.Int()) + doExpr(pathPrefix, key2, value2, func(path string, expr string) { + expressions = append(expressions, expr) + }) + return true + }) + return true + }) + return expressions +} + func doExpr(pathPrefix string, key gjson.Result, value gjson.Result, exprFunc func(path string, expr string)) { kind := value.Get("type").String() if kind == "row" { @@ -674,3 +678,21 @@ func checkPanelChildPanels(t *testing.T, path string, data []byte) { return true }) } + +func TestRatesAreNot1m(t *testing.T) { + visitDashboards( + []string{"../../../grafana/dashboards/cmode", "../../../grafana/dashboards/storagegrid"}, + func(path string, data []byte) { + checkRate1m(t, shortPath(path), data) + }, + ) +} + +func checkRate1m(t *testing.T, path string, data []byte) { + expressions := allExpressions(data) + for _, expr := range expressions { + if strings.Contains(expr, "[1m]") { + t.Errorf("dashboard=%s, expr should not use rate of [1m] expr=%s", path, expr) + } + } +}