/**\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
@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
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
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);
}
});
}
}
}
+
private AlarmInfo getAlarmInfo(VesAlarm vesAlarm) {
AlarmInfo alarmInfo = new AlarmInfo();
alarmInfo.setAlarmIsCleared(vesAlarm.getAlarmIsCleared());
*/
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;
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 {
} 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();
}
public void syncAlarms() throws AlarmInfoException {
- alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> alarmInfoDao.deleteClearedAlarm(alarmInfo));
alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> putRaisedIntoStream(convertAlarmInfo2VesAlarm(alarmInfo)));
}
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();
}
.collect(Collectors.toList());
}
-
-
private VesAlarm convertAlarmInfo2VesAlarm(AlarmInfo alarmInfo) {
VesAlarm vesAlarm = new VesAlarm();
vesAlarm.setEventId(alarmInfo.getEventId());
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
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
}\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