Skip to content

Commit fb7a365

Browse files
authored
Fx/notification interval and description (#18)
* Fix notification interval and clarify description * Increase waiting interval * Remove alert by label
1 parent 1b2234d commit fb7a365

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

src/main/java/dev/vality/alerting/mayday/prometheus/client/k8s/PrometheusClient.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.vality.alerting.mayday.prometheus.client.k8s;
22

3+
import dev.vality.alerting.mayday.common.constant.PrometheusRuleLabel;
34
import dev.vality.alerting.mayday.prometheus.client.k8s.model.PrometheusRule;
45
import dev.vality.alerting.mayday.prometheus.client.k8s.model.PrometheusRuleSpec;
56
import dev.vality.alerting.mayday.prometheus.client.k8s.util.PrometheusFunctionsUtil;
@@ -18,6 +19,7 @@
1819
import java.util.Optional;
1920
import java.util.Set;
2021
import java.util.function.UnaryOperator;
22+
import java.util.stream.Collectors;
2123

2224
@Slf4j
2325
@Component
@@ -62,10 +64,11 @@ public Set<PrometheusRuleSpec.Rule> getPrometheusRuleGroupAlerts(String ruleName
6264
if (rule == null) {
6365
return Set.of();
6466
}
65-
var groupAlerts = rule.getSpec().getGroups().stream()
66-
.filter(group -> group.getName().equals(groupName))
67-
.findFirst().orElse(new PrometheusRuleSpec.Group()).getRules();
68-
return groupAlerts == null ? Set.of() : groupAlerts;
67+
return rule.getSpec().getGroups().stream()
68+
.flatMap(group -> group.getRules().stream()
69+
.filter(rule1 -> rule1.getLabels().containsKey(PrometheusRuleLabel.USERNAME)
70+
&& rule1.getLabels().get(PrometheusRuleLabel.USERNAME).equals(groupName)))
71+
.collect(Collectors.toSet());
6972
}
7073
}
7174

@@ -91,6 +94,7 @@ private void modifyPrometheusRule(String ruleName,
9194
prometheusRuleClient = client.resources(PrometheusRule.class);
9295
var rule =
9396
prometheusRuleClient.inNamespace(client.getNamespace()).withName(ruleName).get();
97+
log.info("Rule before modification: {}", rule);
9498
var resource = prometheusRuleClient.inNamespace(client.getNamespace()).resource(rule);
9599
var response = resource.edit(modifyFunc);
96100
log.info("Rule after modification: {}", response);

src/main/java/dev/vality/alerting/mayday/prometheus/client/k8s/util/PrometheusFunctionsUtil.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package dev.vality.alerting.mayday.prometheus.client.k8s.util;
22

3+
import dev.vality.alerting.mayday.common.constant.PrometheusRuleLabel;
34
import dev.vality.alerting.mayday.prometheus.client.k8s.model.PrometheusRule;
45
import dev.vality.alerting.mayday.prometheus.client.k8s.model.PrometheusRuleSpec;
56
import lombok.experimental.UtilityClass;
7+
import lombok.extern.slf4j.Slf4j;
68

79
import java.util.HashSet;
810
import java.util.Set;
911
import java.util.function.UnaryOperator;
1012

13+
@Slf4j
1114
@UtilityClass
1215
public class PrometheusFunctionsUtil {
1316

@@ -29,24 +32,29 @@ public static UnaryOperator<PrometheusRule> getRemoveGroupByNameFunc(String grou
2932
public static UnaryOperator<PrometheusRule> getRemoveAlertByGroupAndNameFunc(String groupName,
3033
String alertNameForRemoval) {
3134
return prometheusRule -> {
35+
log.info("Going to remove alert '{}' for user '{}'", alertNameForRemoval, groupName);
3236
var groups = prometheusRule.getSpec().getGroups();
3337
var groupIterator = groups.iterator();
3438
while (groupIterator.hasNext()) {
3539
var group = groupIterator.next();
36-
if (group.getName().equals(groupName)) {
37-
Set<PrometheusRuleSpec.Rule> alertRules = group.getRules();
38-
var ruleIterator = alertRules.iterator();
39-
while (ruleIterator.hasNext()) {
40-
var rule = ruleIterator.next();
41-
if (rule.getAlert().equals(alertNameForRemoval)) {
42-
ruleIterator.remove();
43-
break;
40+
log.info("Found user '{}'...", group.getName());
41+
Set<PrometheusRuleSpec.Rule> alertRules = group.getRules();
42+
var ruleIterator = alertRules.iterator();
43+
while (ruleIterator.hasNext()) {
44+
var rule = ruleIterator.next();
45+
log.info("Found rule '{}' for user '{}'...", rule.getAlert(), group.getName());
46+
if (rule.getAlert().equals(alertNameForRemoval)
47+
&& rule.getLabels().get(PrometheusRuleLabel.USERNAME).equals(groupName)) {
48+
49+
ruleIterator.remove();
50+
log.info("Rule '{}' for user '{}' will be removed!", rule.getAlert(), group.getName());
51+
52+
if (group.getRules().isEmpty()) {
53+
log.info("User '{}'has no more rules and will be removed!", group.getName());
54+
groupIterator.remove();
4455
}
56+
return prometheusRule;
4557
}
46-
if (group.getRules().isEmpty()) {
47-
groupIterator.remove();
48-
}
49-
break;
5058
}
5159
}
5260
return prometheusRule;
@@ -69,12 +77,14 @@ public static UnaryOperator<PrometheusRule> getAddAlertToGroupFunc(String groupN
6977
rules = new HashSet<>();
7078
group.setRules(rules);
7179
}
80+
log.info("Adding alert '{}' to group '{}'", alert, group);
7281
rules.add(alert);
7382
return prometheusRule;
7483
};
7584
}
7685

7786
public static PrometheusRuleSpec.Group createPrometheusRuleGroup(String groupName) {
87+
log.info("Creating group with name '{}'", groupName);
7888
var group = new PrometheusRuleSpec.Group();
7989
group.setName(groupName);
8090
group.setRules(new HashSet<>());

src/main/java/dev/vality/alerting/mayday/prometheus/converter/CreateAlertDtoToPrometheusRuleConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public PrometheusRuleSpec.Rule convert(CreateAlertDto source) {
2727
PrometheusRuleSpec.Rule rule = new PrometheusRuleSpec.Rule();
2828
rule.setAlert(source.getAlertId());
2929
rule.setExpr(source.getPrometheusQuery());
30+
rule.setDuration("1m");
3031
rule.setAnnotations(Map.of(PrometheusRuleAnnotation.ALERT_NAME, source.getUserFriendlyAlertName(),
3132
PrometheusRuleAnnotation.ALERT_DESCRIPTION, source.getUserFriendlyAlertDescription()));
3233
Map<String, String> labels = new HashMap<>(k8sPrometheusRuleProperties.getAlertRule().getLabels());

0 commit comments

Comments
 (0)