11package dev .vality .alerting .mayday .prometheus .client .k8s .util ;
22
3+ import dev .vality .alerting .mayday .common .constant .PrometheusRuleLabel ;
34import dev .vality .alerting .mayday .prometheus .client .k8s .model .PrometheusRule ;
45import dev .vality .alerting .mayday .prometheus .client .k8s .model .PrometheusRuleSpec ;
56import lombok .experimental .UtilityClass ;
7+ import lombok .extern .slf4j .Slf4j ;
68
79import java .util .HashSet ;
810import java .util .Set ;
911import java .util .function .UnaryOperator ;
1012
13+ @ Slf4j
1114@ UtilityClass
1215public 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 <>());
0 commit comments