This is an automated email from the ASF dual-hosted git repository.
dgriffon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/master by this push:
new 71efb77 UNOMI-532 : avoid displaying warnings too many times. (#366)
71efb77 is described below
commit 71efb77961de76cadce04892825438f79449c332
Author: David Griffon <[email protected]>
AuthorDate: Mon Nov 22 18:03:05 2021 +0100
UNOMI-532 : avoid displaying warnings too many times. (#366)
---
.../org/apache/unomi/api/utils/ParserHelper.java | 14 ++++++----
.../services/impl/rules/RulesServiceImpl.java | 30 ++++++++++++++--------
2 files changed, 29 insertions(+), 15 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..57adc7f 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
@@ -134,15 +134,19 @@ public class ParserHelper {
visitor.postVisit(rootCondition);
}
- public static boolean resolveActionTypes(DefinitionsService
definitionsService, Rule rule) {
+ public static boolean resolveActionTypes(DefinitionsService
definitionsService, Rule rule, boolean ignoreErrors) {
boolean result = true;
if (rule.getActions() == null) {
- logger.warn("Rule {}:{} has null actions", rule.getItemId(),
rule.getMetadata().getName());
+ if (!ignoreErrors) {
+ 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 (!ignoreErrors) {
+ logger.warn("Rule {}:{} has empty actions", rule.getItemId(),
rule.getMetadata().getName());
+ }
+ return false;
}
for (Action action : rule.getActions()) {
result &= ParserHelper.resolveActionType(definitionsService,
action);
@@ -196,7 +200,7 @@ public class ParserHelper {
public void visit(Condition condition) {
conditionTypeStack.push(condition.getConditionTypeId());
- if ("eventTypeCondition".equals(condition.getConditionTypeId())) {
+ if ("eventTypeCondition".equals(condition.getConditionTypeId())) {
String eventTypeId = (String)
condition.getParameter("eventTypeId");
if (eventTypeId == null) {
logger.warn("Null eventTypeId found!");
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..d87e036 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
@@ -58,6 +58,7 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
private ActionExecutorDispatcher actionExecutorDispatcher;
private List<Rule> allRules;
+ private final Set<String> invalidRulesId = new HashSet<>();
private Map<String, RuleStatistics> allRuleStatistics = new
ConcurrentHashMap<>();
@@ -278,9 +279,17 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
private List<Rule> getAllRules() {
List<Rule> rules = persistenceService.getAllItems(Rule.class, 0, -1,
"priority").getList();
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,
invalidRulesId.contains(rule.getItemId()));
+ // check if rule status has changed
+ if (!isValid) {
+ invalidRulesId.add(rule.getItemId());
+ } else {
+ invalidRulesId.remove(rule.getItemId());
+ }
}
+
return rules;
}
@@ -377,7 +386,7 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
Rule rule = persistenceService.load(ruleId, Rule.class);
if (rule != null) {
ParserHelper.resolveConditionType(definitionsService,
rule.getCondition(), "rule " + rule.getItemId());
- ParserHelper.resolveActionTypes(definitionsService, rule);
+ ParserHelper.resolveActionTypes(definitionsService, rule,
invalidRulesId.contains(rule.getItemId()));
}
return rule;
}
@@ -390,6 +399,8 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
if (condition != null) {
if (rule.getMetadata().isEnabled() &&
!rule.getMetadata().isMissingPlugins()) {
ParserHelper.resolveConditionType(definitionsService,
condition, "rule " + rule.getItemId());
+ ParserHelper.resolveActionTypes(definitionsService, rule,
invalidRulesId.contains(rule.getItemId()));
+ // Check rule's condition validity, throws an exception if not
set properly.
definitionsService.extractConditionBySystemTag(condition,
"eventCondition");
}
}
@@ -412,19 +423,19 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
}
} else if (
trackedCondition.getConditionType() != null &&
- trackedCondition.getConditionType().getParameters() !=
null &&
-
trackedCondition.getConditionType().getParameters().size() > 0
+
trackedCondition.getConditionType().getParameters() != null &&
+
trackedCondition.getConditionType().getParameters().size() > 0
) {
// lookup for track parameters
Map<String, Object> trackedParameters = new HashMap<>();
trackedCondition.getConditionType().getParameters().forEach(parameter -> {
try {
- if (TRACKED_PARAMETER.equals(parameter.getId())) {
-
Arrays.stream(StringUtils.split(parameter.getDefaultValue(),
",")).forEach(trackedParameter -> {
+ if (TRACKED_PARAMETER.equals(parameter.getId())) {
+
Arrays.stream(StringUtils.split(parameter.getDefaultValue(),
",")).forEach(trackedParameter -> {
String[] param =
StringUtils.split(StringUtils.trim(trackedParameter), ":");
trackedParameters.put(StringUtils.trim(param[1]),
trackedCondition.getParameter(StringUtils.trim(param[0])));
- });
- }
+ });
+ }
} catch (Exception e) {
logger.warn("Unable to parse tracked parameter
from {} for condition type {}", parameter,
trackedCondition.getConditionType().getItemId());
}
@@ -590,5 +601,4 @@ public class RulesServiceImpl implements RulesService,
EventListenerService, Syn
rulesByEventType.put(eventTypeId, rules);
}
}
-
}