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);
     }
 

Reply via email to