✨ feat(config): add support for labels to retention rules
- allow associating labels with retention rules for more granular control - add label parameter to `add_rule` function - check for duplicate rules and labels before adding new ones
This commit is contained in:
committed by
Jeremiah Russell
parent
5da589678e
commit
cf3d93cf13
@@ -29,10 +29,10 @@ impl Default for Config {
|
|||||||
rules,
|
rules,
|
||||||
};
|
};
|
||||||
|
|
||||||
cfg.add_rule(Retention::new(MessageAge::Years(1), true))
|
cfg.add_rule(Retention::new(MessageAge::Years(1), true), None)
|
||||||
.add_rule(Retention::new(MessageAge::Weeks(1), true))
|
.add_rule(Retention::new(MessageAge::Weeks(1), true), None)
|
||||||
.add_rule(Retention::new(MessageAge::Months(1), true))
|
.add_rule(Retention::new(MessageAge::Months(1), true), None)
|
||||||
.add_rule(Retention::new(MessageAge::Years(5), true));
|
.add_rule(Retention::new(MessageAge::Years(5), true), None);
|
||||||
|
|
||||||
cfg
|
cfg
|
||||||
}
|
}
|
||||||
@@ -51,15 +51,23 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Add a new rule to the rule set by setting the retention age
|
/// Add a new rule to the rule set by setting the retention age
|
||||||
pub fn add_rule(&mut self, retention: Retention) -> &mut Self {
|
pub fn add_rule(&mut self, retention: Retention, label: Option<&String>) -> &mut Self {
|
||||||
if self
|
if self.rules.contains_key(&retention.age().to_string()) && label.is_none() {
|
||||||
.rules
|
|
||||||
.contains_key(retention.age().to_string().as_str())
|
|
||||||
{
|
|
||||||
log::warn!("rule already exists");
|
log::warn!("rule already exists");
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut current_labels = Vec::new();
|
||||||
|
for rule in self.rules.values() {
|
||||||
|
let mut ls = rule.labels().clone();
|
||||||
|
current_labels.append(&mut ls);
|
||||||
|
}
|
||||||
|
|
||||||
|
if label.is_some() && current_labels.contains(label.unwrap()) {
|
||||||
|
log::warn!("a rule already applies to label {}", label.unwrap());
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
let id = if let Some((_, max)) = self.rules.iter().max_by_key(|(_, r)| r.id()) {
|
let id = if let Some((_, max)) = self.rules.iter().max_by_key(|(_, r)| r.id()) {
|
||||||
max.id() + 1
|
max.id() + 1
|
||||||
} else {
|
} else {
|
||||||
@@ -68,6 +76,9 @@ impl Config {
|
|||||||
|
|
||||||
let mut rule = EolRule::new(id);
|
let mut rule = EolRule::new(id);
|
||||||
rule.set_retention(retention);
|
rule.set_retention(retention);
|
||||||
|
if let Some(l) = label {
|
||||||
|
rule.add_label(l);
|
||||||
|
}
|
||||||
log::info!("added rule: {rule}");
|
log::info!("added rule: {rule}");
|
||||||
self.rules.insert(rule.retention().to_string(), rule);
|
self.rules.insert(rule.retention().to_string(), rule);
|
||||||
self
|
self
|
||||||
|
|||||||
Reference in New Issue
Block a user