You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by dg...@apache.org on 2021/11/18 21:47:38 UTC
[unomi] 01/01: UNOMI-532 : - avoid action missing warnings for disabled rules. - do not register rules without actions - disable invalid rules.
This is an automated email from the ASF dual-hosted git repository.
dgriffon pushed a commit to branch avoid-empty-action-warning
in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 5873b3c377f01a210ec29485e3bb5225dcb94c08
Author: David Griffon <dg...@jahia.com>
AuthorDate: Thu Nov 18 22:46:48 2021 +0100
UNOMI-532 :
- avoid action missing warnings for disabled rules.
- do not register rules without actions
- disable invalid rules.
---
.../org/apache/unomi/api/utils/ParserHelper.java | 10 ++++++---
.../services/impl/rules/RulesServiceImpl.java | 26 +++++++++++++++++++---
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/api/src/main/java/org/apache/unomi/api/utils/ParserHelper.java b/api/src/main/java/org/apache/unomi/api/utils/ParserHelper.java
index 6396e19..cba2cc3 100644
--- a/api/src/main/java/org/apache/unomi/api/utils/ParserHelper.java
+++ b/api/src/main/java/org/apache/unomi/api/utils/ParserHelper.java
@@ -137,12 +137,16 @@ public class ParserHelper {
public static boolean resolveActionTypes(DefinitionsService definitionsService, Rule rule) {
boolean result = true;
if (rule.getActions() == null) {
- logger.warn("Rule {}:{} has null actions", rule.getItemId(), rule.getMetadata().getName());
+ if (rule.getMetadata().isEnabled()) {
+ logger.warn("Rule {}:{} has null actions", rule.getItemId(), rule.getMetadata().getName());
+ }
return false;
}
if (rule.getActions().isEmpty()) {
- logger.warn("Rule {}:{} has empty actions", rule.getItemId(), rule.getMetadata().getName());
- return result;
+ if (rule.getMetadata().isEnabled()) {
+ logger.warn("Rule {}:{} has empty actions", rule.getItemId(), rule.getMetadata().getName());
+ }
+ return false;
}
for (Action action : rule.getActions()) {
result &= ParserHelper.resolveActionType(definitionsService, action);
diff --git a/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
index d7b7186..f540510 100644
--- a/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java
@@ -277,11 +277,26 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn
private List<Rule> getAllRules() {
List<Rule> rules = persistenceService.getAllItems(Rule.class, 0, -1, "priority").getList();
+ List<Rule> rulesToDisable = new ArrayList<>();
+ List<Rule> enabledRules = new ArrayList<>();
for (Rule rule : rules) {
- ParserHelper.resolveConditionType(definitionsService, rule.getCondition(), "rule " + rule.getItemId());
- ParserHelper.resolveActionTypes(definitionsService, rule);
+ // Check rule integrity
+ boolean isValid = ParserHelper.resolveConditionType(definitionsService, rule.getCondition(), "rule " + rule.getItemId());
+ isValid = isValid && ParserHelper.resolveActionTypes(definitionsService, rule);
+ // exclude enabled invalid rules
+ if (isValid) {
+ enabledRules.add(rule);
+ } else if (rule.getMetadata().isEnabled()) {
+ rulesToDisable.add(rule);
+ }
}
- return rules;
+ // Disable invalid rules and store it.
+ rulesToDisable.forEach(rule -> {
+ logger.warn("Rule {} has been disabled due to invalid condition or actions", rule.getItemId());
+ rule.getMetadata().setEnabled(false);
+ persistenceService.save(rule);
+ });
+ return enabledRules;
}
private Map<String, Set<Rule>> getRulesByEventType(List<Rule> rules) {
@@ -393,6 +408,11 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn
definitionsService.extractConditionBySystemTag(condition, "eventCondition");
}
}
+ List<Action> actions = rule.getActions();
+ if (actions == null || actions.isEmpty()) {
+ logger.warn("rule {} won't be saved as it contains no action", rule.getItemId());
+ return;
+ }
persistenceService.save(rule);
}