in services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java [507:564]
private void syncRuleStatistics() {
List<RuleStatistics> allPersistedRuleStatisticsList = persistenceService.getAllItems(RuleStatistics.class);
Map<String, RuleStatistics> allPersistedRuleStatistics = new HashMap<>();
for (RuleStatistics ruleStatistics : allPersistedRuleStatisticsList) {
allPersistedRuleStatistics.put(ruleStatistics.getItemId(), ruleStatistics);
}
// first we iterate over the rules we have in memory
for (RuleStatistics ruleStatistics : allRuleStatistics.values()) {
boolean mustPersist = false;
if (allPersistedRuleStatistics.containsKey(ruleStatistics.getItemId())) {
// we must sync with the data coming from the persistence service.
RuleStatistics persistedRuleStatistics = allPersistedRuleStatistics.get(ruleStatistics.getItemId());
ruleStatistics.setExecutionCount(persistedRuleStatistics.getExecutionCount() + ruleStatistics.getLocalExecutionCount());
if (ruleStatistics.getLocalExecutionCount() > 0) {
ruleStatistics.setLocalExecutionCount(0);
mustPersist = true;
}
ruleStatistics.setConditionsTime(persistedRuleStatistics.getConditionsTime() + ruleStatistics.getLocalConditionsTime());
if (ruleStatistics.getLocalConditionsTime() > 0) {
ruleStatistics.setLocalConditionsTime(0);
mustPersist = true;
}
ruleStatistics.setActionsTime(persistedRuleStatistics.getActionsTime() + ruleStatistics.getLocalActionsTime());
if (ruleStatistics.getLocalActionsTime() > 0) {
ruleStatistics.setLocalActionsTime(0);
mustPersist = true;
}
ruleStatistics.setLastSyncDate(new Date());
} else {
ruleStatistics.setExecutionCount(ruleStatistics.getExecutionCount() + ruleStatistics.getLocalExecutionCount());
if (ruleStatistics.getLocalExecutionCount() > 0) {
ruleStatistics.setLocalExecutionCount(0);
mustPersist = true;
}
ruleStatistics.setConditionsTime(ruleStatistics.getConditionsTime() + ruleStatistics.getLocalConditionsTime());
if (ruleStatistics.getLocalConditionsTime() > 0) {
ruleStatistics.setLocalConditionsTime(0);
mustPersist = true;
}
ruleStatistics.setActionsTime(ruleStatistics.getActionsTime() + ruleStatistics.getLocalActionsTime());
if (ruleStatistics.getLocalActionsTime() > 0) {
ruleStatistics.setLocalActionsTime(0);
mustPersist = true;
}
ruleStatistics.setLastSyncDate(new Date());
}
allRuleStatistics.put(ruleStatistics.getItemId(), ruleStatistics);
if (mustPersist) {
persistenceService.save(ruleStatistics, null, true);
}
}
// now let's iterate over the rules coming from the persistence service, as we may have new ones.
for (RuleStatistics ruleStatistics : allPersistedRuleStatistics.values()) {
if (!allRuleStatistics.containsKey(ruleStatistics.getItemId())) {
allRuleStatistics.put(ruleStatistics.getItemId(), ruleStatistics);
}
}
}