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 <[email protected]> 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); }
