Skip to content

Commit

Permalink
Merge pull request #99 from cloudflare/dups
Browse files Browse the repository at this point in the history
Don't enable multiple instances of the same check
  • Loading branch information
prymitive committed Dec 23, 2021
2 parents dd530dd + cbb4e9b commit 0b3fc40
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 25 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## v0.5.2

### Added

- `--no-color` flag for disabling output colouring.

### Fixed

- Fixed duplicated warnings when multiple `rule {...}` blocks where configured.

## v0.5.1

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion cmd/pint/ci.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
)

func actionCI(c *cli.Context) (err error) {
err = initLogger(c.String(logLevelFlag))
err = initLogger(c.String(logLevelFlag), c.Bool(noColorFlag))
if err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/pint/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
)

func actionConfig(c *cli.Context) (err error) {
err = initLogger(c.String(logLevelFlag))
err = initLogger(c.String(logLevelFlag), c.Bool(noColorFlag))
if err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/pint/lint.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
)

func actionLint(c *cli.Context) (err error) {
err = initLogger(c.String(logLevelFlag))
err = initLogger(c.String(logLevelFlag), c.Bool(noColorFlag))
if err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/pint/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ func lvlFormatter(level interface{}) string {
return fmt.Sprintf("level=%s", level)
}

func initLogger(level string) error {
func initLogger(level string, noColor bool) error {
log.Logger = log.Logger.Output(zerolog.ConsoleWriter{
Out: os.Stderr,
NoColor: false,
NoColor: noColor,
FormatLevel: lvlFormatter,
FormatMessage: msgFormatter,
FormatTimestamp: func(interface{}) string {
Expand Down
9 changes: 8 additions & 1 deletion cmd/pint/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const (
logLevelFlag = "log-level"
disabledFlag = "disabled"
offlineFlag = "offline"
noColorFlag = "no-color"
)

var (
Expand All @@ -39,6 +40,12 @@ func newApp() *cli.App {
Value: zerolog.InfoLevel.String(),
Usage: "Log level",
},
&cli.BoolFlag{
Name: noColorFlag,
Aliases: []string{"n"},
Value: false,
Usage: "Disable output colouring",
},
},
Commands: []*cli.Command{
{
Expand Down Expand Up @@ -108,7 +115,7 @@ func main() {
}

func actionVersion(c *cli.Context) (err error) {
err = initLogger(c.String(logLevelFlag))
err = initLogger(c.String(logLevelFlag), c.Bool(noColorFlag))
if err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/pint/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func parseQuery(query string) error {
}

func actionParse(c *cli.Context) (err error) {
err = initLogger(c.String(logLevelFlag))
err = initLogger(c.String(logLevelFlag), c.Bool(noColorFlag))
if err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
Expand Down
27 changes: 27 additions & 0 deletions cmd/pint/tests/0023_enabled_checks.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
pint.error -l debug --no-color lint rules
! stdout .
stderr 'level=debug msg="Configured checks for rule" enabled=\["promql/syntax","alerts/for","promql/comparison","alerts/template","promql/rate\(prom\)","query/series\(prom\)","promql/vector_matching"\] path=rules/1.yaml rule=one'
stderr 'level=debug msg="Configured checks for rule" enabled=\["promql/syntax","alerts/for","promql/comparison","alerts/template","promql/rate\(prom\)","query/series\(prom\)","promql/vector_matching"\] path=rules/1.yaml rule=two'
stderr 'level=debug msg="Configured checks for rule" enabled=\["promql/syntax","alerts/for","promql/comparison","alerts/template","promql/rate\(prom\)","query/series\(prom\)","promql/vector_matching"\] path=rules/2.yaml rule=one'
stderr 'level=debug msg="Configured checks for rule" enabled=\["promql/syntax","alerts/for","promql/comparison","alerts/template","promql/rate\(prom\)","query/series\(prom\)","promql/vector_matching"\] path=rules/2.yaml rule=two'

-- rules/1.yaml --
- record: one
expr: up == 0
- record: two
expr: up == 0
-- rules/2.yaml --
- record: one
expr: up == 0
- record: two
expr: up == 0

-- .pint.hcl --
prometheus "prom" {
uri = "https://"
timeout = "2m"
}

rule{}
rule{}
rule{}
23 changes: 12 additions & 11 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,8 @@ func (cfg Config) GetChecksForRule(path string, r parser.Rule) []checks.RuleChec
continue
}
proms = append(proms, prom)
timeout, _ := parseDuration(prom.Timeout)
if isEnabled(cfg.Checks.Enabled, cfg.Checks.Disabled, checks.RateCheckName, r) {
enabled = append(enabled, checks.NewRateCheck(prom.Name, prom.URI, timeout))
}
if isEnabled(cfg.Checks.Enabled, cfg.Checks.Disabled, checks.SeriesCheckName, r) {
enabled = append(enabled, checks.NewSeriesCheck(prom.Name, prom.URI, timeout))
}
if isEnabled(cfg.Checks.Enabled, cfg.Checks.Disabled, checks.VectorMatchingCheckName, r) {
enabled = append(enabled, checks.NewVectorMatchingCheck(prom.Name, prom.URI, timeout))
}
}

for _, rule := range cfg.Rules {
for _, c := range rule.resolveChecks(path, r, cfg.Checks.Enabled, cfg.Checks.Disabled, proms) {
if r.HasComment(fmt.Sprintf("disable %s", removeRedundantSpaces(c.String()))) {
Expand All @@ -101,7 +92,17 @@ func (cfg Config) GetChecksForRule(path string, r parser.Rule) []checks.RuleChec
Msg("Check disabled by comment")
continue
}
enabled = append(enabled, c)
// check if rule was already enabled
var v bool
for _, er := range enabled {
if er.String() == c.String() {
v = true
break
}
}
if !v {
enabled = append(enabled, c)
}
}
}

Expand Down
21 changes: 14 additions & 7 deletions internal/config/rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,20 @@ func (rule Rule) resolveChecks(path string, r parser.Rule, enabledChecks, disabl
}
}

if isEnabled(enabledChecks, disabledChecks, checks.SeriesCheckName, r) {
for _, prom := range proms {
timeout, _ := parseDuration(prom.Timeout)
enabled = append(enabled, checks.NewSeriesCheck(prom.Name, prom.URI, timeout))
}
}

if isEnabled(enabledChecks, disabledChecks, checks.VectorMatchingCheckName, r) {
for _, prom := range proms {
timeout, _ := parseDuration(prom.Timeout)
enabled = append(enabled, checks.NewVectorMatchingCheck(prom.Name, prom.URI, timeout))
}
}

if rule.Cost != nil && isEnabled(enabledChecks, disabledChecks, checks.CostCheckName, r) {
severity := rule.Cost.getSeverity(checks.Bug)
for _, prom := range proms {
Expand Down Expand Up @@ -228,13 +242,6 @@ func (rule Rule) resolveChecks(path string, r parser.Rule, enabledChecks, disabl
}
}

if isEnabled(enabledChecks, disabledChecks, checks.SeriesCheckName, r) {
for _, prom := range proms {
timeout, _ := parseDuration(prom.Timeout)
enabled = append(enabled, checks.NewSeriesCheck(prom.Name, prom.URI, timeout))
}
}

if rule.Alerts != nil && isEnabled(enabledChecks, disabledChecks, checks.AlertsCheckName, r) {
qRange := time.Hour * 24
if rule.Alerts.Range != "" {
Expand Down

0 comments on commit 0b3fc40

Please sign in to comment.