Skip to content

Commit

Permalink
Update prom-rules-verify
Browse files Browse the repository at this point in the history
Signed-off-by: João Vilaça <jvilaca@redhat.com>
  • Loading branch information
machadovilaca committed Jan 9, 2024
1 parent 8f834c9 commit a0222c6
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 82 deletions.
4 changes: 1 addition & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,7 @@ docker-push-registry:
$(OCI_BIN) push $(IMAGE_REGISTRY)/$(REGISTRY_IMAGE):$(IMAGE_TAG)

prom-rules-verify:
hack/prom-rule-ci/verify-rules.sh \
data/monitoring/prom-rule.yaml \
hack/prom-rule-ci/prom-rules-tests.yaml
go run ./tools/prom-rule-ci $(OCI_BIN) ./tools/prom-rule-ci/tmp_prom_rules.yaml ./tools/prom-rule-ci/prom-rules-tests.yaml

cluster-up:
./cluster/up.sh
Expand Down
69 changes: 0 additions & 69 deletions hack/prom-rule-ci/verify-rules.sh

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
---
rule_files:
- /tmp/rules.verify.yaml
- /tmp/rules.verify

group_eval_order:
- kubevirt.cnao.rules
- recordingRules.rules
- alerts.rules

tests:
# CnaoDown positive tests
Expand Down Expand Up @@ -42,7 +43,7 @@ tests:
# NetworkAddonsConfigNotReady positive tests
- interval: 1m
input_series:
- series: "kubevirt_cnao_cr_ready{namespace='{{ .Namespace }}'}"
- series: "kubevirt_cnao_cr_ready{namespace='ci'}"
values: "0 0 0 0 0 0"

alert_rule_test:
Expand All @@ -61,13 +62,13 @@ tests:
# NetworkAddonsConfigNotReady negative tests
- interval: 1m
input_series:
- series: "kubevirt_cnao_cr_ready{namespace='{{ .Namespace }}'}"
- series: "kubevirt_cnao_cr_ready{namespace='ci'}"
values: "1 1 1 0 1 1"
- series: "kubevirt_cnao_cr_ready{namespace='{{ .Namespace }}'}"
- series: "kubevirt_cnao_cr_ready{namespace='ci'}"
values: "1 1 1 1 1 1"
- series: "kubevirt_cnao_cr_ready{namespace='{{ .Namespace }}'}"
- series: "kubevirt_cnao_cr_ready{namespace='ci'}"
values: "0 0 0 0 0 1"
- series: "kubevirt_cnao_cr_ready{namespace='other-namespace'}"
- series: "kubevirt_cnao_cr_ready{namespace='not-ci'}"
values: "0 0 0 0 0 0"

alert_rule_test:
Expand All @@ -78,7 +79,7 @@ tests:
# KubeMacPoolDuplicateMacsFound positive tests
- interval: 1m
input_series:
- series: "kubevirt_kmp_duplicate_macs{namespace='{{ .Namespace }}'}"
- series: "kubevirt_kmp_duplicate_macs{namespace='ci'}"
values: "1 1 1 1 1 1"

alert_rule_test:
Expand All @@ -97,9 +98,9 @@ tests:
# KubeMacPoolDuplicateMacsFound negative tests
- interval: 1m
input_series:
- series: "kubevirt_kmp_duplicate_macs{namespace='{{ .Namespace }}'}"
- series: "kubevirt_kmp_duplicate_macs{namespace='ci'}"
values: "1 0 0 0 0 0"
- series: "kubevirt_kmp_duplicate_macs{namespace='other-namespace'}"
- series: "kubevirt_kmp_duplicate_macs{namespace='not-ci'}"
values: "1 1 1 1 1 1"

alert_rule_test:
Expand Down
101 changes: 101 additions & 0 deletions tools/prom-rule-ci/verify-rules.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package main

import (
"encoding/json"
"os"
"os/exec"

"github.com/kubevirt/cluster-network-addons-operator/pkg/monitoring/rules"
)

const promImage = "quay.io/prometheus/prometheus:v2.15.2"

func main() {
if len(os.Args) != 4 {
panic("Usage: verify-rules <oci-bin> <target-file> <tests-file>")
}
ociBin := os.Args[1]
targetFile := os.Args[2]
rulesFile := os.Args[3]

err := verify(ociBin, targetFile, rulesFile)
if err != nil {
panic(err)
}
}

func verify(ociBin string, targetFile string, rulesFile string) error {
defer deleteRulesFile(targetFile)
err := createRulesFile(targetFile)
if err != nil {
return err
}

err = lint(ociBin, targetFile)
if err != nil {
return err
}

err = unitTest(ociBin, targetFile, rulesFile)
if err != nil {
return err
}

return nil
}

func createRulesFile(targetFile string) error {
if err := rules.SetupRules("ci"); err != nil {
return err
}

promRule, err := rules.BuildPrometheusRule("ci")
if err != nil {
return err
}

b, err := json.Marshal(promRule.Spec)
if err != nil {
return err
}

err = os.WriteFile(targetFile, b, 0644)
if err != nil {
return err
}

return nil
}

func deleteRulesFile(targetFile string) error {
err := os.Remove(targetFile)
if err != nil {
return err
}

return nil
}

func lint(ociBin string, targetFile string) error {
cmd := exec.Command(ociBin, "run", "--rm", "--entrypoint=/bin/promtool", "-v", targetFile+":/tmp/rules.verify:ro,Z", promImage, "check", "rules", "/tmp/rules.verify")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
return err
}

return nil
}

func unitTest(ociBin string, targetFile string, testsFile string) error {
cmd := exec.Command(ociBin, "run", "--rm", "--entrypoint=/bin/promtool", "-v", testsFile+":/tmp/rules.test:ro,Z", "-v", targetFile+":/tmp/rules.verify:ro,Z", promImage, "test", "rules", "/tmp/rules.test")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
return err
}

return nil
}

0 comments on commit a0222c6

Please sign in to comment.