Remove Alarm Info from DB when alarms are cleared 44/83844/2
authorGuangrongFu <fu.guangrong@zte.com.cn>
Mon, 1 Apr 2019 09:10:26 +0000 (17:10 +0800)
committerGuangrongFu <fu.guangrong@zte.com.cn>
Mon, 1 Apr 2019 09:26:26 +0000 (17:26 +0800)
Change-Id: If3350d64a6d2a104bc001b433ed98c410b9bb5a9
Issue-ID: HOLMES-204
Signed-off-by: GuangrongFu <fu.guangrong@zte.com.cn>
engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java
engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java
engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java
engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java

index c7094c3..bab3084 100644 (file)
@@ -1,12 +1,12 @@
 /**\r
  * Copyright 2017 ZTE Corporation.\r
- *\r
+ * <p>\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
  * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
+ * <p>\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * <p>\r
  * Unless required by applicable law or agreed to in writing, software\r
  * distributed under the License is distributed on an "AS IS" BASIS,\r
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
@@ -33,14 +33,16 @@ public abstract class AlarmInfoDao {
     @SqlQuery("SELECT * FROM ALARM_INFO")\r
     protected abstract List<AlarmInfo> queryAlarm();\r
 \r
-    @SqlUpdate("DELETE FROM ALARM_INFO WHERE ALARMISCLEARED=:alarmiscleared")\r
-    protected abstract int deleteAlarmByAlarmIsCleared(@Bind("alarmiscleared") int alarmIsCleared);\r
+    @SqlUpdate("DELETE FROM ALARM_INFO WHERE EVENTNAME=:eventName AND SOURCEID=:sourceId AND SOURCENAME=:sourceName")\r
+    protected abstract int deleteAlarmByAlarmIsCleared(@Bind("eventName") String eventName,\r
+                                                       @Bind("sourceId") String sourceId,\r
+                                                       @Bind("sourceName") String sourceName);\r
 \r
     public AlarmInfo saveAlarm(AlarmInfo alarmInfo) throws AlarmInfoException {\r
         try {\r
             addAlarm(alarmInfo);\r
             return alarmInfo;\r
-        } catch(Exception e) {\r
+        } catch (Exception e) {\r
             throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e);\r
         }\r
     }\r
@@ -48,15 +50,21 @@ public abstract class AlarmInfoDao {
     public List<AlarmInfo> queryAllAlarm() throws AlarmInfoException {\r
         try {\r
             return queryAlarm();\r
-        } catch(Exception e) {\r
+        } catch (Exception e) {\r
             throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e);\r
         }\r
     }\r
 \r
-    public void deleteClearedAlarm(AlarmInfo alarmInfo) {\r
-       int alarmIsCleared = alarmInfo.getAlarmIsCleared();\r
-        if(alarmIsCleared == 1) {\r
-           deleteAlarmByAlarmIsCleared(alarmIsCleared);\r
-       }\r
+    public void deleteAlarm(AlarmInfo alarmInfo) {\r
+        if (alarmInfo.getAlarmIsCleared() != 1) {\r
+            return;\r
+        }\r
+\r
+        String sourceId = alarmInfo.getSourceId();\r
+        String sourceName = alarmInfo.getSourceName();\r
+        String eventName = alarmInfo.getEventName();\r
+        eventName = eventName.substring(0, eventName.lastIndexOf("Cleared"));\r
+\r
+        deleteAlarmByAlarmIsCleared(eventName, sourceId, sourceName);\r
     }\r
 }\r
index 1446b14..99ba3d7 100644 (file)
@@ -49,9 +49,15 @@ public class DMaaPAlarmPolling implements Runnable {
                 vesAlarmList = subscriber.subscribe();
                 vesAlarmList.forEach(vesAlarm -> {
                     try {
-                        alarmInfoDao.saveAlarm(getAlarmInfo(vesAlarm));
+                        AlarmInfo alarmInfo = getAlarmInfo(vesAlarm);
+                        if (alarmInfo.getAlarmIsCleared() != 1) {
+                            alarmInfoDao.saveAlarm(alarmInfo);
+                        } else {
+                            alarmInfoDao.deleteAlarm(alarmInfo);
+                        }
                         droolsEngine.putRaisedIntoStream(vesAlarm);
-                    } catch(AlarmInfoException e) {
+
+                    } catch (AlarmInfoException e) {
                         log.error("Failed to save alarm to database", e);
                     }
                 });
@@ -74,6 +80,7 @@ public class DMaaPAlarmPolling implements Runnable {
             }
         }
     }
+
     private AlarmInfo getAlarmInfo(VesAlarm vesAlarm) {
         AlarmInfo alarmInfo = new AlarmInfo();
         alarmInfo.setAlarmIsCleared(vesAlarm.getAlarmIsCleared());
index b474e69..c397b28 100644 (file)
  */
 package org.onap.holmes.engine.manager;
 
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
 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;
@@ -33,20 +26,26 @@ import org.kie.api.io.Resource;
 import org.kie.api.runtime.KieContainer;
 import org.kie.api.runtime.KieSession;
 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.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.request.DeployRuleRequest;
-import org.onap.holmes.common.api.entity.CorrelationRule;
-import org.onap.holmes.common.exception.CorrelationException;
-import org.onap.holmes.common.utils.ExceptionUtil;
 import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
 
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Service
 public class DroolsEngine {
@@ -99,8 +98,8 @@ public class DroolsEngine {
         } catch (Exception e) {
             log.error("Failed to initialize the engine service module.", e);
         }
-        if(null!=km) {
-               container = ks.newKieContainer(km.getReleaseId());
+        if (null != km) {
+            container = ks.newKieContainer(km.getReleaseId());
         }
         session = container.newKieSession();
         deployed.clear();
@@ -123,7 +122,6 @@ public class DroolsEngine {
     }
 
     public void syncAlarms() throws AlarmInfoException {
-        alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> alarmInfoDao.deleteClearedAlarm(alarmInfo));
         alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> putRaisedIntoStream(convertAlarmInfo2VesAlarm(alarmInfo)));
     }
 
@@ -209,14 +207,10 @@ public class DroolsEngine {
                 alarm.setRootFlag(((VesAlarm) obj).getRootFlag());
             }
             this.session.delete(factHandle);
-
-            if (alarm.getAlarmIsCleared() == 1) {
-                alarmInfoDao.deleteClearedAlarm(convertVesAlarm2AlarmInfo(alarm));
-            }
-        } else {
-            this.session.insert(alarm);
         }
 
+        this.session.insert(alarm);
+
         this.session.fireAllRules();
     }
 
@@ -227,8 +221,6 @@ public class DroolsEngine {
                 .collect(Collectors.toList());
     }
 
-
-
     private VesAlarm convertAlarmInfo2VesAlarm(AlarmInfo alarmInfo) {
         VesAlarm vesAlarm = new VesAlarm();
         vesAlarm.setEventId(alarmInfo.getEventId());
index 4ad9107..8da4910 100644 (file)
@@ -17,7 +17,6 @@
 package org.onap.holmes.engine.manager;\r
 \r
 import org.junit.Before;\r
-import org.junit.BeforeClass;\r
 import org.junit.Rule;\r
 import org.junit.Test;\r
 import org.junit.rules.ExpectedException;\r
@@ -32,12 +31,11 @@ import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
 import org.powermock.api.easymock.PowerMock;\r
 import org.powermock.reflect.Whitebox;\r
 \r
-import java.lang.reflect.InvocationTargetException;\r
-import java.lang.reflect.Method;\r
-import java.util.*;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.UUID;\r
 import java.util.stream.Collectors;\r
 \r
-import static org.easymock.EasyMock.anyObject;\r
 import static org.hamcrest.CoreMatchers.is;\r
 import static org.hamcrest.core.IsEqual.equalTo;\r
 import static org.junit.Assert.assertThat;\r
@@ -295,17 +293,18 @@ class AlarmInfoDaoStub extends AlarmInfoDao {
     }\r
 \r
     @Override\r
-    protected int deleteAlarmByAlarmIsCleared(int alarmIsCleared) {\r
+    protected int deleteAlarmByAlarmIsCleared(String alarmName, String sourceName, String sourceId) {\r
         return 1;\r
     }\r
 }\r
 \r
 class DbDaoUtilStub extends DbDaoUtil {\r
     private AlarmInfoDao dao = new AlarmInfoDaoStub();\r
+\r
     @Override\r
     public <T> T getJdbiDaoByOnDemand(Class<T> daoClazz) {\r
 \r
-        return (T)dao;\r
+        return (T) dao;\r
 \r
     }\r
 }\r