bugfix - engines cannot get ip when deploy rules during init
[holmes/engine-management.git] / engine-d / src / main / java / org / onap / holmes / engine / manager / DroolsEngine.java
index c397b28..cbda858 100644 (file)
@@ -22,6 +22,10 @@ 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.KieBaseModel;
+import org.kie.api.builder.model.KieModuleModel;
+import org.kie.api.builder.model.KieSessionModel;
+import org.kie.api.conf.EqualityBehaviorOption;
 import org.kie.api.io.Resource;
 import org.kie.api.runtime.KieContainer;
 import org.kie.api.runtime.KieSession;
@@ -29,7 +33,8 @@ 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;
@@ -50,23 +55,38 @@ import java.util.stream.Collectors;
 @Service
 public class DroolsEngine {
 
-    @Inject
+    private final static int ENABLE = 1;
+    private final Map<String, String> deployed = new ConcurrentHashMap<>();
     private RuleMgtWrapper ruleMgtWrapper;
-    @Inject
     private DbDaoUtil daoUtil;
-
-    private final static int ENABLE = 1;
+    private ClosedLoopControlNameCache closedLoopControlNameCache;
     private AlarmInfoDao alarmInfoDao;
-    private final Map<String, String> deployed = new ConcurrentHashMap<>();
     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;
+
+    @Inject
+    public void setRuleMgtWrapper(RuleMgtWrapper ruleMgtWrapper) {
+        this.ruleMgtWrapper = ruleMgtWrapper;
+    }
+
+    @Inject
+    public void setDaoUtil(DbDaoUtil daoUtil) {
+        this.daoUtil = daoUtil;
+    }
+
+    @Inject
+    public void setClosedLoopControlNameCache(ClosedLoopControlNameCache closedLoopControlNameCache) {
+        this.closedLoopControlNameCache = closedLoopControlNameCache;
+    }
 
     @PostConstruct
     private void init() {
         alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class);
+        instanceIp = MicroServiceConfig.getMicroServiceIpAndPort()[0];
         try {
             log.info("Drools engine initializing...");
             initEngine();
@@ -106,7 +126,11 @@ public class DroolsEngine {
     }
 
     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;
         }
@@ -114,7 +138,7 @@ public class DroolsEngine {
         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());
             }
         }
 
@@ -271,7 +295,15 @@ public class DroolsEngine {
     }
 
     private byte[] createJar(KieServices ks, ReleaseId releaseId, List<String> drls) throws CorrelationException {
-        KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML(releaseId);
+        KieModuleModel kieModuleModel = ks.newKieModuleModel();
+        KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("KBase")
+                .setDefault(true)
+                .setEqualsBehavior(EqualityBehaviorOption.EQUALITY);
+        kieBaseModel.newKieSessionModel("KSession")
+                .setDefault(true)
+                .setType(KieSessionModel.KieSessionType.STATEFUL);
+        KieFileSystem kfs = ks.newKieFileSystem().writeKModuleXML(kieModuleModel.toXML()).generateAndWritePomXML(releaseId);
+
         int i = 0;
         for (String drl : drls) {
             if (!StringUtils.isEmpty(drl)) {