Skip to content

Commit fcb28d7

Browse files
committed
fix(mixin-utils): remove std.prune and use std.filter instead
The use of `std.prune(std.map())` is slow and uses a big stack, on big rulesets this can cause a 'RUNTIME ERROR: max stack frames exceeded.'. It is better to use `std.filter()` to remove an element from an array.
1 parent e338662 commit fcb28d7

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

mixin-utils/utils.libsonnet

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,8 @@ local g = import 'grafana-builder/grafana.libsonnet';
392392
for group in groups
393393
],
394394

395-
removeRuleGroup(ruleName):: {
396-
local removeRuleGroup(rule) = if rule.name == ruleName then null else rule,
397-
local currentRuleGroups = super.groups,
398-
groups: std.prune(std.map(removeRuleGroup, currentRuleGroups)),
395+
removeRuleGroup(groupName):: {
396+
groups: std.filter(function(group) group.name != groupName, super.groups),
399397
},
400398

401399
removeAlertRuleGroup(ruleName):: {
@@ -411,20 +409,17 @@ local g = import 'grafana-builder/grafana.libsonnet';
411409
if 'alert' in rule && std.objectHas(overrides, rule.alert)
412410
then rule + overrides[rule.alert]
413411
else rule,
414-
local overrideInGroup(group) = group { rules: std.map(overrideRule, super.rules) },
412+
local overrideInGroup(group) = group + { rules: std.map(overrideRule, super.rules) },
415413
prometheusAlerts+:: {
416414
groups: std.map(overrideInGroup, super.groups),
417415
},
418416
},
419417

420418
removeAlerts(alerts):: {
421-
local removeRule(rule) =
422-
if 'alert' in rule && std.objectHas(alerts, rule.alert)
423-
then {}
424-
else rule,
425-
local removeInGroup(group) = group { rules: std.map(removeRule, super.rules) },
419+
local removeRule(rule) = !std.member(alerts, std.get(rule, 'alert', '')),
420+
local removeInGroup(group) = group + { rules: std.filter(removeRule, super.rules) },
426421
prometheusAlerts+:: {
427-
groups: std.prune(std.map(removeInGroup, super.groups)),
422+
groups: std.map(removeInGroup, super.groups),
428423
},
429424
},
430425
}

0 commit comments

Comments
 (0)