--- /dev/null
+---
+project: 'holmes-engine-management'
+project_creation_date: '2017-01-17'
+lifecycle_state: 'Incubation'
+project_lead: &onap_releng_ptl
+ name: 'Guangrong Fu'
+ email: 'fu.guangrong@zte.com.cn'
+ id: 'GuangrongFu'
+ company: 'ZTE'
+ timezone: 'China/Chengdu'
+project_category: ''
+primary_contact: *onap_releng_ptl
+issue_tracking:
+ type: 'jira'
+ url: 'https://jira.onap.org/projects/HOLMES'
+ key: 'HOLMES'
+mailing_list:
+ type: 'groups.io'
+ url: 'lists.onap.org'
+ tag: '<[sub-project_name]>'
+realtime_discussion: ''
+meetings:
+ - type: 'zoom'
+ agenda: 'https://wiki.onap.org/pages/viewpage.action?pageId=8231935'
+ url: 'https://wiki.onap.org/pages/viewpage.action?pageId=8231935'
+ server: 'n/a'
+ channel: 'n/a'
+ repeats: 'weekly'
+ time: '12:00 UTC'
+repositories:
+ - 'holmes-common'
+ - 'holmes-engine-management'
+ - 'holmes-rule-management'
+committers:
+ - <<: *onap_releng_ptl
+ - name: 'Tang Peng'
+ email: 'tang.peng5@zte.com.cn'
+ company: 'ZTE'
+ id: 'tangpeng'
+ timezone: 'China/Beijing'
+tsc:
+ approval: 'https://lists.onap.org/pipermail/onap-tsc'
/**\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