From b0a21f9eab4bace707c88607ae873bacfd3bf522 Mon Sep 17 00:00:00 2001 From: jessicagreben Date: Sat, 11 Sep 2021 09:31:40 -0700 Subject: [PATCH] rm overlap, add label builder to fix name bug Signed-off-by: jessicagreben --- cmd/promtool/rules.go | 21 +++++++++------------ cmd/promtool/rules_test.go | 5 +++-- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/cmd/promtool/rules.go b/cmd/promtool/rules.go index e19b1605e7..96e21a9f41 100644 --- a/cmd/promtool/rules.go +++ b/cmd/promtool/rules.go @@ -103,6 +103,9 @@ func (importer *ruleImporter) importRule(ctx context.Context, ruleExpr, ruleName currStart := max(startOfBlock/int64(time.Second/time.Millisecond), start.Unix()) startWithAlignment := grp.EvalTimestamp(time.Unix(currStart, 0).UTC().UnixNano()) + for startWithAlignment.Unix() < currStart { + startWithAlignment = startWithAlignment.Add(grp.Interval()) + } val, warnings, err := importer.apiClient.QueryRange(ctx, ruleExpr, v1.Range{ @@ -141,22 +144,16 @@ func (importer *ruleImporter) importRule(ctx context.Context, ruleExpr, ruleName matrix = val.(model.Matrix) for _, sample := range matrix { - currentLabels := make(labels.Labels, 0, len(sample.Metric)+len(ruleLabels)+1) - currentLabels = append(currentLabels, labels.Label{ - Name: labels.MetricName, - Value: ruleName, - }) - - currentLabels = append(currentLabels, ruleLabels...) + lb := labels.NewBuilder(ruleLabels) for name, value := range sample.Metric { - currentLabels = append(currentLabels, labels.Label{ - Name: string(name), - Value: string(value), - }) + lb.Set(string(name), string(value)) } + + lb.Set(labels.MetricName, ruleName) + for _, value := range sample.Values { - if err := app.add(ctx, currentLabels, timestamp.FromTime(value.Timestamp.Time()), float64(value.Value)); err != nil { + if err := app.add(ctx, lb.Labels(), timestamp.FromTime(value.Timestamp.Time()), float64(value.Value)); err != nil { return errors.Wrap(err, "add") } } diff --git a/cmd/promtool/rules_test.go b/cmd/promtool/rules_test.go index 4afae2c9f9..0c5d85aca1 100644 --- a/cmd/promtool/rules_test.go +++ b/cmd/promtool/rules_test.go @@ -61,6 +61,7 @@ func TestBackfillRuleIntegration(t *testing.T) { }{ {"no samples", 1, 0, 0, 0, []*model.SampleStream{}}, {"run importer once", 1, 8, 4, 4, []*model.SampleStream{{Metric: model.Metric{"name1": "val1"}, Values: []model.SamplePair{{Timestamp: testTime, Value: testValue}}}}}, + {"run importer with dup name label", 1, 8, 4, 4, []*model.SampleStream{{Metric: model.Metric{"__name__": "val1", "name1": "val1"}, Values: []model.SamplePair{{Timestamp: testTime, Value: testValue}}}}}, {"one importer twice", 2, 8, 4, 8, []*model.SampleStream{{Metric: model.Metric{"name1": "val1"}, Values: []model.SamplePair{{Timestamp: testTime, Value: testValue}, {Timestamp: testTime2, Value: testValue2}}}}}, } for _, tt := range testCases { @@ -194,7 +195,7 @@ func createMultiRuleTestFiles(path string) error { - record: grp1_rule1 expr: grp1_rule1_expr labels: - testlabel11: testlabelvalue11 + testlabel11: testlabelvalue12 - name: group2 rules: - record: grp2_rule1 @@ -202,7 +203,7 @@ func createMultiRuleTestFiles(path string) error { - record: grp2_rule2 expr: grp2_rule2_expr labels: - testlabel11: testlabelvalue11 + testlabel11: testlabelvalue13 ` return ioutil.WriteFile(path, []byte(recordingRules), 0777) }