import lombok.extern.slf4j.Slf4j;
import org.drools.compiler.kie.builder.impl.InternalKieModule;
import org.drools.core.util.StringUtils;
-import org.jvnet.hk2.annotations.Service;
import org.kie.api.KieServices;
import org.kie.api.builder.*;
import org.kie.api.builder.Message.Level;
import org.kie.api.builder.model.KieModuleModel;
import org.kie.api.builder.model.KieSessionModel;
import org.kie.api.conf.EqualityBehaviorOption;
-import org.kie.api.conf.EventProcessingOption;
import org.kie.api.io.Resource;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
-import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.api.runtime.rule.FactHandle;
import org.onap.holmes.common.api.entity.AlarmInfo;
import org.onap.holmes.common.api.entity.CorrelationRule;
import org.onap.holmes.common.api.stat.VesAlarm;
-import org.onap.holmes.common.dmaap.DmaapService;
+import org.onap.holmes.common.config.MicroServiceConfig;
+import org.onap.holmes.common.dmaap.store.ClosedLoopControlNameCache;
import org.onap.holmes.common.exception.AlarmInfoException;
import org.onap.holmes.common.exception.CorrelationException;
-import org.onap.holmes.common.utils.DbDaoUtil;
import org.onap.holmes.common.utils.ExceptionUtil;
-import org.onap.holmes.engine.db.AlarmInfoDao;
+import org.onap.holmes.engine.db.AlarmInfoDaoService;
import org.onap.holmes.engine.request.DeployRuleRequest;
import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
-@Service
-public class DroolsEngine {
-
- @Inject
- private RuleMgtWrapper ruleMgtWrapper;
- @Inject
- private DbDaoUtil daoUtil;
-
+@Component
+public class DroolsEngine implements ApplicationRunner {
private final static int ENABLE = 1;
- private AlarmInfoDao alarmInfoDao;
private final Map<String, String> deployed = new ConcurrentHashMap<>();
+ private RuleMgtWrapper ruleMgtWrapper;
+ private ClosedLoopControlNameCache closedLoopControlNameCache;
+ private AlarmInfoDaoService alarmInfoDaoService;
private KieServices ks = KieServices.Factory.get();
private ReleaseId releaseId = ks.newReleaseId("org.onap.holmes", "rules", "1.0.0-SNAPSHOT");
private ReleaseId compilationRelease = ks.newReleaseId("org.onap.holmes", "compilation", "1.0.0-SNAPSHOT");
private KieContainer container;
private KieSession session;
+ private String instanceIp;
- @PostConstruct
- private void init() {
- alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class);
+ @Autowired
+ public void setAlarmInfoDaoService(AlarmInfoDaoService alarmInfoDaoService) {
+ this.alarmInfoDaoService = alarmInfoDaoService;
+ }
+
+ @Autowired
+ public void setRuleMgtWrapper(RuleMgtWrapper ruleMgtWrapper) {
+ this.ruleMgtWrapper = ruleMgtWrapper;
+ }
+
+ @Autowired
+ public void setClosedLoopControlNameCache(ClosedLoopControlNameCache closedLoopControlNameCache) {
+ this.closedLoopControlNameCache = closedLoopControlNameCache;
+ }
+
+ @Override
+ public void run(ApplicationArguments args) {
+ instanceIp = MicroServiceConfig.getMicroServiceIpAndPort()[0];
try {
log.info("Drools engine initializing...");
initEngine();
}
private void initRules() throws CorrelationException {
- List<CorrelationRule> rules = ruleMgtWrapper.queryRuleByEnable(ENABLE);
+ List<CorrelationRule> rules = ruleMgtWrapper.queryRuleByEnable(ENABLE)
+ .stream()
+ .filter(r -> r.getEngineInstance().equals(instanceIp))
+ .collect(Collectors.toList());
+
if (rules.isEmpty()) {
return;
}
for (CorrelationRule rule : rules) {
if (!StringUtils.isEmpty(rule.getContent())) {
deployRule(rule.getContent());
- DmaapService.loopControlNames.put(rule.getPackageName(), rule.getClosedControlLoopName());
+ closedLoopControlNameCache.put(rule.getPackageName(), rule.getClosedControlLoopName());
}
}
}
public void syncAlarms() throws AlarmInfoException {
- alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> putRaisedIntoStream(convertAlarmInfo2VesAlarm(alarmInfo)));
+ alarmInfoDaoService.queryAllAlarm().forEach(alarmInfo -> putRaisedIntoStream(convertAlarmInfo2VesAlarm(alarmInfo)));
}
public String deployRule(DeployRuleRequest rule) throws CorrelationException {
Resource jarRes = ks.getResources().newByteArrayResource(jar);
return ks.getRepository().addKieModule(jarRes);
}
-
}