From c4bd70c1f74cd04c441f76de4359e166a089660a Mon Sep 17 00:00:00 2001 From: GuangrongFu Date: Sat, 18 Dec 2021 15:08:14 +0800 Subject: [PATCH] Switched from Dropwizard to Springboot Issue-ID: HOLMES-511 Signed-off-by: GuangrongFu Change-Id: I72b53ad4073e0a07a4c6a234781dc0d139584dda --- engine-d-standalone/pom.xml | 6 +- engine-d-standalone/src/main/assembly/bin/run.sh | 31 +-- .../src/main/assembly/conf/application.yaml | 23 ++ engine-d/pom.xml | 60 +++++- .../holmes/dsa/dmaappolling/DMaaPResponseUtil.java | 14 +- .../onap/holmes/dsa/dmaappolling/Subscriber.java | 8 +- .../org/onap/holmes/engine/EngineDActiveApp.java | 32 ++- .../org/onap/holmes/engine/EngineDAppConfig.java | 51 ----- .../java/org/onap/holmes/engine/Initializer.java | 22 +- ...{AlarmInfoDao.java => AlarmInfoDaoService.java} | 132 ++++++------ .../engine/db/CorrelationRuleDaoService.java | 35 +++ .../org/onap/holmes/engine/db/DaoProvider.java | 37 ++++ .../onap/holmes/engine/db/jdbi/AlarmInfoDao.java | 43 ++++ .../engine/db/{ => jdbi}/CorrelationRuleDao.java | 29 ++- .../holmes/engine/dcae/ConfigFileScanningTask.java | 8 +- .../engine/dcae/DcaeConfigurationPolling.java | 15 +- .../holmes/engine/dmaap/DMaaPAlarmPolling.java | 13 +- .../onap/holmes/engine/dmaap/SubscriberAction.java | 33 +-- .../onap/holmes/engine/manager/DroolsEngine.java | 40 ++-- .../manager/status/EntityStatusRefreshTask.java | 8 +- .../holmes/engine/request/CompileRuleRequest.java | 11 +- .../holmes/engine/request/DeployRuleRequest.java | 14 +- .../holmes/engine/request/DmaapConfigRequest.java | 3 +- .../resources/DmaapConfigurationService.java | 52 ++--- .../holmes/engine/resources/EngineResources.java | 92 +++----- .../onap/holmes/engine/resources/HealthCheck.java | 23 +- .../holmes/engine/resources/SwaggerResource.java | 24 +-- .../engine/response/CorrelationRuleResponse.java | 8 +- .../org/onap/holmes/engine/utils/AlarmUtil.java | 27 ++- .../onap/holmes/engine/wrapper/RuleMgtWrapper.java | 30 +-- engine-d/src/main/resources/logback-spring.xml | 59 +++++ .../dsa/dmaappolling/DMaaPResponseUtilTest.java | 1 - .../holmes/dsa/dmaappolling/SubscriberTest.java | 26 +-- .../onap/holmes/engine/EnginedAppConfigTest.java | 60 ------ .../org/onap/holmes/engine/InitializerTest.java | 5 +- .../onap/holmes/engine/db/AlarmInfoDaoTest.java | 14 +- .../holmes/engine/db/CorrelationRuleDaoTest.java | 1 + .../engine/dcae/ConfigFileScanningTaskTest.java | 19 +- .../holmes/engine/dmaap/DMaaPAlarmPollingTest.java | 33 +-- .../holmes/engine/manager/DroolsEngineTest.java | 156 +++++++------- .../engine/resources/EngineResourcesTest.java | 33 +-- .../holmes/engine/wrapper/RuleMgtWrapperTest.java | 29 +-- pom.xml | 239 +++++++++++---------- 43 files changed, 829 insertions(+), 770 deletions(-) create mode 100644 engine-d-standalone/src/main/assembly/conf/application.yaml delete mode 100644 engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java rename engine-d/src/main/java/org/onap/holmes/engine/db/{AlarmInfoDao.java => AlarmInfoDaoService.java} (55%) create mode 100644 engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDaoService.java create mode 100644 engine-d/src/main/java/org/onap/holmes/engine/db/DaoProvider.java create mode 100644 engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/AlarmInfoDao.java rename engine-d/src/main/java/org/onap/holmes/engine/db/{ => jdbi}/CorrelationRuleDao.java (58%) create mode 100644 engine-d/src/main/resources/logback-spring.xml delete mode 100644 engine-d/src/test/java/org/onap/holmes/engine/EnginedAppConfigTest.java diff --git a/engine-d-standalone/pom.xml b/engine-d-standalone/pom.xml index 5a56c18..e5a84e0 100644 --- a/engine-d-standalone/pom.xml +++ b/engine-d-standalone/pom.xml @@ -22,7 +22,7 @@ org.onap.holmes.engine-management holmes-engine-parent - 1.3.7-SNAPSHOT + 1.3.8-SNAPSHOT holmes-engine-d-standalone @@ -60,6 +60,7 @@ ${linux64outputdir}/lib + true runtime @@ -87,6 +88,9 @@ ../engine-d/src/main/resources + + logback-spring.xml + false diff --git a/engine-d-standalone/src/main/assembly/bin/run.sh b/engine-d-standalone/src/main/assembly/bin/run.sh index 55f58dd..2c58d35 100644 --- a/engine-d-standalone/src/main/assembly/bin/run.sh +++ b/engine-d-standalone/src/main/assembly/bin/run.sh @@ -47,13 +47,19 @@ if [ -z ${DB_NAME} ]; then echo "No database is name is specified. Use the default value \"$DB_NAME\"." fi +export DB_PORT=5432 +if [ ! -z ${URL_JDBC} ] && [ `expr index $URL_JDBC :` != 0 ]; then + export DB_PORT="${URL_JDBC##*:}" +fi +echo DB_PORT=$DB_PORT + # if deployed using helm, use the helm-generated configuration file. if [ -d /opt/hemconfig ]; then - cp /opt/hemconfig/engine-d.yml "$main_path/conf/engine-d.yml" + cp /opt/hemconfig/application.yaml "$main_path/conf/application.yaml" else - sed -i "s|url:.*|url: jdbc:postgresql://$URL_JDBC/$DB_NAME|" "$main_path/conf/engine-d.yml" - sed -i "s|user:.*|user: $JDBC_USERNAME|" "$main_path/conf/engine-d.yml" - sed -i "s|password:.*|password: $JDBC_PASSWORD|" "$main_path/conf/engine-d.yml" + sed -i "s|url:.*|url: jdbc:postgresql://$URL_JDBC:$DB_PORT/$DB_NAME|" "$main_path/conf/application.yaml" + sed -i "s|username:.*|username: $JDBC_USERNAME|" "$main_path/conf/application.yaml" + sed -i "s|password:.*|password: $JDBC_PASSWORD|" "$main_path/conf/application.yaml" fi export SERVICE_IP=`hostname -i | awk '{print $1}'` @@ -65,18 +71,12 @@ else export HOSTNAME=${SERVICE_IP}:9102 fi -export DB_PORT=5432 -if [ ! -z ${URL_JDBC} ] && [ `expr index $URL_JDBC :` != 0 ]; then - export DB_PORT="${URL_JDBC##*:}" -fi -echo DB_PORT=$DB_PORT - if [ -z ${ENABLE_ENCRYPT} ]; then export ENABLE_ENCRYPT=true fi echo ENABLE_ENCRYPT=$ENABLE_ENCRYPT -KEY_PATH="/opt/onap/conf/holmes.keystore" +KEY_PATH="$main_path/conf/holmes.keystore" KEY_PASSWORD="holmes" if [ -f "/opt/app/osaaf/local/org.onap.holmes-engine-mgmt.p12" ]; then @@ -88,8 +88,8 @@ echo "KEY_PATH=$KEY_PATH" echo "KEY_PASS=$KEY_PASSWORD" #HTTPS Configurations -sed -i "s|keyStorePath:.*|keyStorePath: $KEY_PATH|" "$main_path/conf/engine-d.yml" -sed -i "s|keyStorePassword:.*|keyStorePassword: $KEY_PASSWORD|" "$main_path/conf/engine-d.yml" +sed -i "s|key-store:.*|key-store: $KEY_PATH|" "$main_path/conf/application.yaml" +sed -i "s|key-store-password:.*|key-store-password: $KEY_PASSWORD|" "$main_path/conf/application.yaml" if [ "${ENABLE_ENCRYPT}"x = "true"x ]; then sed -i "s|type:\s*https\?$|type: https|" "$main_path/conf/engine-d.yml" @@ -105,9 +105,10 @@ else sed -i "s|#\?validatePeers|#validatePeers|" "$main_path/conf/engine-d.yml" fi -cat "$main_path/conf/engine-d.yml" +cat "$main_path/conf/application.yaml" ${RUNHOME}/initDB.sh "$JDBC_USERNAME" "$JDBC_PASSWORD" "$DB_NAME" "$DB_PORT" "${URL_JDBC%:*}" -"$JAVA" $JAVA_OPTS -classpath "$class_path" org.onap.holmes.engine.EngineDActiveApp server "$main_path/conf/engine-d.yml" +JAR=`ls -lt $main_path/lib | grep -e "holmes-engine-.*jar$" | awk '{print $9}'` +"$JAVA" $JAVA_OPTS -jar "$main_path/lib/$JAR" -classpath "$class_path" --spring.config.location="$main_path/conf/application.yaml" diff --git a/engine-d-standalone/src/main/assembly/conf/application.yaml b/engine-d-standalone/src/main/assembly/conf/application.yaml new file mode 100644 index 0000000..ed760ed --- /dev/null +++ b/engine-d-standalone/src/main/assembly/conf/application.yaml @@ -0,0 +1,23 @@ +server: + port: 9102 + servlet: + context-path: /api/holmes-engine-mgmt/v1 + ssl: + key-store: /opt/onap/conf/holmes.keystore + key-store-password: holmes + #PKCS12 + key-store-type: JKS + +logging: + config: classpath:logback-spring.xml + +spring: + application: + name: Holmes Engine Management + datasource: + dirver-class-name: org.postgresql.Driver + url: jdbc:postgresql://localhost:5432/holmes + username: holmes + password: holmespwd + mvc: + throw-exception-if-no-handler-found: true \ No newline at end of file diff --git a/engine-d/pom.xml b/engine-d/pom.xml index 6fc236f..1ff46dc 100644 --- a/engine-d/pom.xml +++ b/engine-d/pom.xml @@ -22,13 +22,17 @@ org.onap.holmes.engine-management holmes-engine-parent - 1.3.7-SNAPSHOT + 1.3.8-SNAPSHOT holmes-engine-d holmes-engine-d-service jar + + org.onap.holmes.engine.EngineDActiveApp + + @@ -39,8 +43,61 @@ src/main/resources + + swagger.json + + + + org.springframework.boot + spring-boot-maven-plugin + ${springboot.version} + + + + repackage + + + + + ${main-class} + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 8 + 8 + 11 + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + prepare-agent + + prepare-agent + + + + report + + report + + + ${project.build.directory}/code-coverage/jacoco.exec + ${project.reporting.outputDirectory}/jacoco-ut + + + + + @@ -53,7 +110,6 @@ 1.5.0 - diff --git a/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtil.java b/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtil.java index 394dc08..4abf296 100644 --- a/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtil.java +++ b/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtil.java @@ -15,22 +15,18 @@ */ package org.onap.holmes.dsa.dmaappolling; +import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.jvnet.hk2.annotations.Service; -import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.common.api.stat.AlarmAdditionalField; -import com.google.gson.Gson; +import org.onap.holmes.common.api.stat.VesAlarm; +import org.springframework.stereotype.Component; -import java.util.Map; -import java.util.TimeZone; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; +import java.util.*; import static org.onap.holmes.common.utils.GsonUtil.*; -@Service +@Component public class DMaaPResponseUtil { public VesAlarm convertJsonToVesAlarm(String responseJson) { diff --git a/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/Subscriber.java b/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/Subscriber.java index af772fb..4fd52ef 100644 --- a/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/Subscriber.java +++ b/engine-d/src/main/java/org/onap/holmes/dsa/dmaappolling/Subscriber.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,11 +20,10 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.onap.holmes.common.api.stat.VesAlarm; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.JerseyClient; +import org.onap.holmes.common.utils.SpringContextUtil; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -34,8 +33,7 @@ import java.util.UUID; @Slf4j public class Subscriber { - private DMaaPResponseUtil dMaaPResponseUtil = ServiceLocatorHolder.getLocator() - .getService(DMaaPResponseUtil.class); + private DMaaPResponseUtil dMaaPResponseUtil = SpringContextUtil.getBean(DMaaPResponseUtil.class); /** * The number of milliseconds to wait for messages if none are immediately available. This diff --git a/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java b/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java index b1cc335..f5d6d8a 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java @@ -1,5 +1,5 @@ /** - * Copyright 2017-2021 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,40 +15,36 @@ */ package org.onap.holmes.engine; -import io.dropwizard.setup.Environment; import lombok.extern.slf4j.Slf4j; import org.onap.holmes.common.ConfigFileScanner; -import org.onap.holmes.common.dropwizard.ioc.bundle.IOCApplication; -import org.onap.holmes.common.utils.transactionid.TransactionIdFilter; import org.onap.holmes.engine.dcae.ConfigFileScanningTask; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.context.annotation.ComponentScan; -import javax.servlet.DispatcherType; -import java.util.EnumSet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @Slf4j -public class EngineDActiveApp extends IOCApplication { - - public static void main(String[] args) throws Exception { - new EngineDActiveApp().run(args); +@SpringBootApplication +@ServletComponentScan +@ComponentScan(basePackages = {"org.onap.holmes"}) +public class EngineDActiveApp implements ApplicationRunner { + public static void main(String[] args) { + SpringApplication.run(EngineDActiveApp.class, args); } @Override - public void run(EngineDAppConfig configuration, Environment environment) throws Exception { - super.run(configuration, environment); - - + public void run(ApplicationArguments args) { ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleAtFixedRate( new ConfigFileScanningTask(new ConfigFileScanner()), 60L, ConfigFileScanningTask.POLLING_PERIOD, TimeUnit.SECONDS); - - environment.servlets().addFilter("logFilter", new TransactionIdFilter()).addMappingForUrlPatterns(EnumSet - .allOf(DispatcherType.class), true, "/*"); - Initializer.setReadyForMsbReg(true); } } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java b/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java deleted file mode 100644 index 836912f..0000000 --- a/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright 2017 ZTE Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onap.holmes.engine; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.dropwizard.Configuration; -import io.dropwizard.db.DataSourceFactory; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import org.jvnet.hk2.annotations.Service; - -@Service -public class EngineDAppConfig extends Configuration { - - private String apidescription = "Holmes rule management rest API"; - - @Valid - @NotNull - private DataSourceFactory database = new DataSourceFactory(); - - @JsonProperty("database") - public DataSourceFactory getDataSourceFactory() { - return database; - } - - @JsonProperty("database") - public void setDataSourceFactory(DataSourceFactory dataSourceFactory) { - this.database = dataSourceFactory; - } - - public String getApidescription() { - return apidescription; - } - - public void setApidescription(String apidescription) { - this.apidescription = apidescription; - } -} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/Initializer.java b/engine-d/src/main/java/org/onap/holmes/engine/Initializer.java index 4474fec..60869a1 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/Initializer.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/Initializer.java @@ -1,5 +1,5 @@ /** - * Copyright 2017-2018 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.onap.holmes.engine; -import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.CommonUtils; import org.onap.holmes.common.utils.MsbRegister; @@ -24,32 +23,33 @@ import org.onap.msb.sdk.discovery.entity.MicroServiceInfo; import org.onap.msb.sdk.discovery.entity.Node; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +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.HashSet; import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import static org.onap.holmes.common.config.MicroServiceConfig.POD_IP; import static org.onap.holmes.common.config.MicroServiceConfig.getMicroServiceIpAndPort; import static org.onap.holmes.common.utils.CommonUtils.getEnv; import static org.onap.holmes.common.utils.CommonUtils.isIpAddress; -@Service -public class Initializer { +@Component +public class Initializer implements ApplicationRunner { private static final Logger logger = LoggerFactory.getLogger(Initializer.class); private volatile static boolean readyForMsbReg = false; private MsbRegister msbRegister; - @Inject + @Autowired public Initializer(MsbRegister msbRegister) { this.msbRegister = msbRegister; } - @PostConstruct - private void init() { + @Override + public void run(ApplicationArguments args) { Executors.newSingleThreadExecutor().execute(() -> { waitUntilReady(); try { @@ -93,7 +93,7 @@ public class Initializer { msinfo.setEnable_ssl(CommonUtils.isHttpsEnabled()); Set nodes = new HashSet<>(); Node node = new Node(); - node.setIp(isIpAddress(serviceIpAndPort[0]) ? serviceIpAndPort[0] : getEnv(POD_IP)); + node.setIp(isIpAddress(serviceIpAndPort[0]) ? serviceIpAndPort[0] : getEnv("HOLMES_ENGINE_MGMT_SERVICE_HOST")); node.setPort("9102"); /* Following codes will cause an unregistration from MSB (due to MSB malfunction), comment them for now String msbAddrTemplate = (CommonUtils.isHttpsEnabled() ? "https" : "http") diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java b/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDaoService.java similarity index 55% rename from engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java rename to engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDaoService.java index 83fa3f6..5c3444e 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDaoService.java @@ -1,70 +1,62 @@ -/** - * Copyright 2017 ZTE Corporation. - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onap.holmes.engine.db; - -import org.onap.holmes.common.api.entity.AlarmInfo; -import org.onap.holmes.common.exception.AlarmInfoException; -import org.onap.holmes.common.utils.AlarmInfoMapper; -import org.skife.jdbi.v2.sqlobject.*; -import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper; - -import java.util.List; - -@RegisterMapper(AlarmInfoMapper.class) -public abstract class AlarmInfoDao { - - @GetGeneratedKeys - @SqlUpdate("INSERT INTO ALARM_INFO (EVENTID,EVENTNAME,STARTEPOCHMICROSEC,SOURCEID,SOURCENAME,SEQUENCE,ALARMISCLEARED,ROOTFLAG,LASTEPOCHMICROSEC) VALUES (:eventId,:eventName,:startEpochMicroSec,:sourceId,:sourceName,:sequence,:alarmIsCleared,:rootFlag,:lastEpochMicroSec)") - protected abstract String addAlarm(@BindBean AlarmInfo alarmInfo); - - @SqlQuery("SELECT * FROM ALARM_INFO") - protected abstract List queryAlarm(); - - @SqlUpdate("DELETE FROM ALARM_INFO WHERE EVENTNAME=:eventName AND SOURCEID=:sourceId AND SOURCENAME=:sourceName") - protected abstract int deleteAlarmByAlarmIsCleared(@Bind("eventName") String eventName, - @Bind("sourceId") String sourceId, - @Bind("sourceName") String sourceName); - - public AlarmInfo saveAlarm(AlarmInfo alarmInfo) throws AlarmInfoException { - try { - addAlarm(alarmInfo); - return alarmInfo; - } catch (Exception e) { - throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e); - } - } - - public List queryAllAlarm() throws AlarmInfoException { - try { - return queryAlarm(); - } catch (Exception e) { - throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e); - } - } - - public void deleteAlarm(AlarmInfo alarmInfo) { - if (alarmInfo.getAlarmIsCleared() != 1) { - return; - } - - String sourceId = alarmInfo.getSourceId(); - String sourceName = alarmInfo.getSourceName(); - String eventName = alarmInfo.getEventName(); - eventName = eventName.substring(0, eventName.lastIndexOf("Cleared")); - - deleteAlarmByAlarmIsCleared(eventName, sourceId, sourceName); - } -} +/** + * Copyright 2021-2022 ZTE Corporation. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.holmes.engine.db; + +import org.onap.holmes.common.api.entity.AlarmInfo; +import org.onap.holmes.common.exception.AlarmInfoException; +import org.onap.holmes.engine.db.jdbi.AlarmInfoDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service + +public class AlarmInfoDaoService { + + @Autowired + private AlarmInfoDao alarmInfoDao; + + public AlarmInfo saveAlarm(AlarmInfo alarmInfo) throws AlarmInfoException { + try { + alarmInfoDao.addAlarm(alarmInfo); + return alarmInfo; + } catch (Exception e) { + throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e); + } + } + + public List queryAllAlarm() throws AlarmInfoException { + try { + return alarmInfoDao.queryAlarm(); + } catch (Exception e) { + throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e); + } + } + + public void deleteAlarm(AlarmInfo alarmInfo) { + if (alarmInfo.getAlarmIsCleared() != 1) { + return; + } + + String sourceId = alarmInfo.getSourceId(); + String sourceName = alarmInfo.getSourceName(); + String eventName = alarmInfo.getEventName(); + eventName = eventName.substring(0, eventName.lastIndexOf("Cleared")); + + alarmInfoDao.deleteAlarmByAlarmIsCleared(eventName, sourceId, sourceName); + } +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDaoService.java b/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDaoService.java new file mode 100644 index 0000000..a80a255 --- /dev/null +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDaoService.java @@ -0,0 +1,35 @@ +/** + * Copyright 2021 ZTE Corporation. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.holmes.engine.db; + +import org.onap.holmes.common.api.entity.CorrelationRule; +import org.onap.holmes.engine.db.jdbi.CorrelationRuleDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CorrelationRuleDaoService { + + @Autowired + private CorrelationRuleDao correlationRuleDao; + + public List queryRuleByRuleEnable(int enable) { + return correlationRuleDao.queryRuleByEnable(enable); + } +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/DaoProvider.java b/engine-d/src/main/java/org/onap/holmes/engine/db/DaoProvider.java new file mode 100644 index 0000000..3a52fd0 --- /dev/null +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/DaoProvider.java @@ -0,0 +1,37 @@ +/** + * Copyright 2022 ZTE Corporation. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.holmes.engine.db; + +import org.jdbi.v3.core.Jdbi; +import org.onap.holmes.engine.db.jdbi.AlarmInfoDao; +import org.onap.holmes.engine.db.jdbi.CorrelationRuleDao; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DaoProvider { + + @Bean + public AlarmInfoDao alarmInfoDao(Jdbi jdbi) { + return jdbi.onDemand(AlarmInfoDao.class); + } + + @Bean + public CorrelationRuleDao correlationRuleDao(Jdbi jdbi) { + return jdbi.onDemand(CorrelationRuleDao.class); + } +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/AlarmInfoDao.java b/engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/AlarmInfoDao.java new file mode 100644 index 0000000..e4b2f1a --- /dev/null +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/AlarmInfoDao.java @@ -0,0 +1,43 @@ +/** + * Copyright 2017-2022 ZTE Corporation. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.holmes.engine.db.jdbi; + +import org.jdbi.v3.sqlobject.config.RegisterRowMapper; +import org.jdbi.v3.sqlobject.customizer.Bind; +import org.jdbi.v3.sqlobject.customizer.BindBean; +import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys; +import org.jdbi.v3.sqlobject.statement.SqlQuery; +import org.jdbi.v3.sqlobject.statement.SqlUpdate; +import org.onap.holmes.common.api.entity.AlarmInfo; +import org.onap.holmes.common.utils.AlarmInfoMapper; + +import java.util.List; + +@RegisterRowMapper(AlarmInfoMapper.class) +public interface AlarmInfoDao { + + @GetGeneratedKeys + @SqlUpdate("INSERT INTO ALARM_INFO (EVENTID,EVENTNAME,STARTEPOCHMICROSEC,SOURCEID,SOURCENAME,SEQUENCE,ALARMISCLEARED,ROOTFLAG,LASTEPOCHMICROSEC) VALUES (:eventId,:eventName,:startEpochMicroSec,:sourceId,:sourceName,:sequence,:alarmIsCleared,:rootFlag,:lastEpochMicroSec)") + String addAlarm(@BindBean AlarmInfo alarmInfo); + + @SqlQuery("SELECT * FROM ALARM_INFO") + List queryAlarm(); + + @SqlUpdate("DELETE FROM ALARM_INFO WHERE EVENTNAME=:eventName AND SOURCEID=:sourceId AND SOURCENAME=:sourceName") + int deleteAlarmByAlarmIsCleared(@Bind("eventName") String eventName, + @Bind("sourceId") String sourceId, + @Bind("sourceName") String sourceName); +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java b/engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/CorrelationRuleDao.java similarity index 58% rename from engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java rename to engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/CorrelationRuleDao.java index 8cd61ef..bb0f128 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/jdbi/CorrelationRuleDao.java @@ -1,37 +1,32 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onap.holmes.engine.db; +package org.onap.holmes.engine.db.jdbi; -import java.util.List; +import org.jdbi.v3.sqlobject.config.RegisterRowMapper; +import org.jdbi.v3.sqlobject.customizer.Bind; +import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.onap.holmes.common.api.entity.CorrelationRule; import org.onap.holmes.common.utils.CorrelationRuleMapper; -import org.skife.jdbi.v2.sqlobject.Bind; -import org.skife.jdbi.v2.sqlobject.SqlQuery; -import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper; - -@RegisterMapper(CorrelationRuleMapper.class) -public abstract class CorrelationRuleDao { +import java.util.List; +@RegisterRowMapper(CorrelationRuleMapper.class) +public interface CorrelationRuleDao { @SqlQuery("SELECT * FROM APLUS_RULE WHERE enable=:enable") - public abstract List queryRuleByEnable(@Bind("enable") int enable); - - public List queryRuleByRuleEnable(int enable) { - return queryRuleByEnable(enable); - } + public List queryRuleByEnable(@Bind("enable") int enable); } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dcae/ConfigFileScanningTask.java b/engine-d/src/main/java/org/onap/holmes/engine/dcae/ConfigFileScanningTask.java index 15cb327..85e4a74 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dcae/ConfigFileScanningTask.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dcae/ConfigFileScanningTask.java @@ -20,14 +20,15 @@ import org.onap.holmes.common.ConfigFileScanner; import org.onap.holmes.common.dcae.DcaeConfigurationsCache; import org.onap.holmes.common.dcae.entity.DcaeConfigurations; import org.onap.holmes.common.dcae.utils.DcaeConfigurationParser; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.Md5Util; +import org.onap.holmes.common.utils.SpringContextUtil; import org.onap.holmes.dsa.dmaappolling.Subscriber; import org.onap.holmes.engine.dmaap.SubscriberAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.HashMap; import java.util.Map; public class ConfigFileScanningTask implements Runnable { @@ -35,7 +36,7 @@ public class ConfigFileScanningTask implements Runnable { final private static Logger LOGGER = LoggerFactory.getLogger(ConfigFileScanningTask.class); private String configFile = "/opt/hemtopics/cfy.json"; private ConfigFileScanner configFileScanner; - private String prevConfigMd5 = Md5Util.md5(null); + private String prevConfigMd5 = Md5Util.md5(new HashMap()); public ConfigFileScanningTask(ConfigFileScanner configFileScanner) { this.configFileScanner = configFileScanner; @@ -76,8 +77,7 @@ public class ConfigFileScanningTask implements Runnable { } private void addSubscribers(DcaeConfigurations dcaeConfigurations) { - SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() - .getService(SubscriberAction.class); + SubscriberAction subscriberAction = SpringContextUtil.getBean(SubscriberAction.class); for (String key : dcaeConfigurations.getSubKeys()) { Subscriber subscriber = new Subscriber(); subscriber.setTopic(key); diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dcae/DcaeConfigurationPolling.java b/engine-d/src/main/java/org/onap/holmes/engine/dcae/DcaeConfigurationPolling.java index 15d77d6..6009b20 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dcae/DcaeConfigurationPolling.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dcae/DcaeConfigurationPolling.java @@ -1,12 +1,12 @@ /** * Copyright 2017 - 2021 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,9 +19,9 @@ import lombok.extern.slf4j.Slf4j; import org.onap.holmes.common.dcae.DcaeConfigurationQuery; import org.onap.holmes.common.dcae.DcaeConfigurationsCache; import org.onap.holmes.common.dcae.entity.DcaeConfigurations; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.Md5Util; +import org.onap.holmes.common.utils.SpringContextUtil; import org.onap.holmes.dsa.dmaappolling.Subscriber; import org.onap.holmes.engine.dmaap.SubscriberAction; @@ -45,7 +45,7 @@ public class DcaeConfigurationPolling implements Runnable { try { dcaeConfigurations = DcaeConfigurationQuery.getDcaeConfigurations(hostname); String md5 = Md5Util.md5(dcaeConfigurations); - if (prevConfigMd5.equals(md5)){ + if (prevConfigMd5.equals(md5)) { log.info("Operation aborted due to identical Configurations."); return; } @@ -62,8 +62,7 @@ public class DcaeConfigurationPolling implements Runnable { } private void addSubscribers(DcaeConfigurations dcaeConfigurations) { - SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() - .getService(SubscriberAction.class); + SubscriberAction subscriberAction = SpringContextUtil.getBean(SubscriberAction.class); for (String key : dcaeConfigurations.getSubKeys()) { Subscriber subscriber = new Subscriber(); subscriber.setTopic(key); diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java index e2ad89c..5e8da83 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java @@ -21,10 +21,9 @@ import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.common.exception.AlarmInfoException; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.dsa.dmaappolling.Subscriber; -import org.onap.holmes.engine.db.AlarmInfoDao; +import org.onap.holmes.engine.db.AlarmInfoDaoService; import org.onap.holmes.engine.manager.DroolsEngine; -import java.util.ArrayList; import java.util.List; @Slf4j @@ -33,13 +32,13 @@ public class DMaaPAlarmPolling implements Runnable { private Subscriber subscriber; private DroolsEngine droolsEngine; private volatile boolean isAlive = true; - private AlarmInfoDao alarmInfoDao; + private AlarmInfoDaoService alarmInfoDaoService; - public DMaaPAlarmPolling(Subscriber subscriber, DroolsEngine droolsEngine, AlarmInfoDao alarmInfoDao) { + public DMaaPAlarmPolling(Subscriber subscriber, DroolsEngine droolsEngine, AlarmInfoDaoService alarmInfoDaoService) { this.subscriber = subscriber; this.droolsEngine = droolsEngine; - this.alarmInfoDao = alarmInfoDao; + this.alarmInfoDaoService = alarmInfoDaoService; } public void run() { @@ -51,9 +50,9 @@ public class DMaaPAlarmPolling implements Runnable { try { AlarmInfo alarmInfo = getAlarmInfo(vesAlarm); if (alarmInfo.getAlarmIsCleared() != 1) { - alarmInfoDao.saveAlarm(alarmInfo); + alarmInfoDaoService.saveAlarm(alarmInfo); } else { - alarmInfoDao.deleteAlarm(alarmInfo); + alarmInfoDaoService.deleteAlarm(alarmInfo); } droolsEngine.putRaisedIntoStream(vesAlarm); diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java index 1297f11..21f5961 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 - 2021 ZTE Corporation. + * Copyright 2017 - 2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,26 +15,31 @@ */ package org.onap.holmes.engine.dmaap; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import javax.annotation.PreDestroy; -import javax.inject.Inject; +import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; -import org.onap.holmes.common.utils.DbDaoUtil; +import org.onap.holmes.common.database.DbDaoUtil; import org.onap.holmes.dsa.dmaappolling.Subscriber; -import org.onap.holmes.engine.db.AlarmInfoDao; +import org.onap.holmes.engine.db.AlarmInfoDaoService; +import org.onap.holmes.engine.db.jdbi.AlarmInfoDao; import org.onap.holmes.engine.manager.DroolsEngine; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; -@Service +@Component @Slf4j public class SubscriberAction { - @Inject + @Autowired private DroolsEngine droolsEngine; - @Inject + @Autowired private DbDaoUtil daoUtil; + @Autowired + private AlarmInfoDaoService alarmInfoDaoService; + private HashMap pollingTasks = new HashMap<>(); public synchronized void addSubscriber(Subscriber subscriber) { @@ -44,7 +49,7 @@ public class SubscriberAction { removeSubscriber(subscriber); } AlarmInfoDao alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class); - DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine, alarmInfoDao); + DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine, alarmInfoDaoService); Thread thread = new Thread(pollingTask); thread.start(); pollingTasks.put(topic, pollingTask); @@ -67,7 +72,7 @@ public class SubscriberAction { public void stopPollingTasks() { Iterator iterator = pollingTasks.entrySet().iterator(); while (iterator.hasNext()) { - Map.Entry entry = (Map.Entry)iterator.next(); + Map.Entry entry = (Map.Entry) iterator.next(); String key = (String) entry.getKey(); pollingTasks.get(key).stopTask(); } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java index cbda858..5970b59 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java @@ -18,7 +18,6 @@ package org.onap.holmes.engine.manager; 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; @@ -37,14 +36,15 @@ 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; @@ -52,15 +52,13 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Slf4j -@Service -public class DroolsEngine { - +@Component +public class DroolsEngine implements ApplicationRunner { private final static int ENABLE = 1; private final Map deployed = new ConcurrentHashMap<>(); private RuleMgtWrapper ruleMgtWrapper; - private DbDaoUtil daoUtil; private ClosedLoopControlNameCache closedLoopControlNameCache; - private AlarmInfoDao alarmInfoDao; + 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"); @@ -68,24 +66,23 @@ public class DroolsEngine { private KieSession session; private String instanceIp; - @Inject - public void setRuleMgtWrapper(RuleMgtWrapper ruleMgtWrapper) { - this.ruleMgtWrapper = ruleMgtWrapper; + @Autowired + public void setAlarmInfoDaoService(AlarmInfoDaoService alarmInfoDaoService) { + this.alarmInfoDaoService = alarmInfoDaoService; } - @Inject - public void setDaoUtil(DbDaoUtil daoUtil) { - this.daoUtil = daoUtil; + @Autowired + public void setRuleMgtWrapper(RuleMgtWrapper ruleMgtWrapper) { + this.ruleMgtWrapper = ruleMgtWrapper; } - @Inject + @Autowired public void setClosedLoopControlNameCache(ClosedLoopControlNameCache closedLoopControlNameCache) { this.closedLoopControlNameCache = closedLoopControlNameCache; } - @PostConstruct - private void init() { - alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class); + @Override + public void run(ApplicationArguments args) { instanceIp = MicroServiceConfig.getMicroServiceIpAndPort()[0]; try { log.info("Drools engine initializing..."); @@ -146,7 +143,7 @@ public class DroolsEngine { } 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 { @@ -330,5 +327,4 @@ public class DroolsEngine { Resource jarRes = ks.getResources().newByteArrayResource(jar); return ks.getRepository().addKieModule(jarRes); } - } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/manager/status/EntityStatusRefreshTask.java b/engine-d/src/main/java/org/onap/holmes/engine/manager/status/EntityStatusRefreshTask.java index 0b15999..0e65a28 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/manager/status/EntityStatusRefreshTask.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/manager/status/EntityStatusRefreshTask.java @@ -16,22 +16,22 @@ package org.onap.holmes.engine.manager.status; -import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.config.MicroServiceConfig; import org.onap.holmes.common.engine.entity.EngineEntity; import org.onap.holmes.common.engine.service.EngineEntityService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; -import javax.inject.Inject; import java.util.Optional; import java.util.Timer; import java.util.TimerTask; import static java.util.concurrent.TimeUnit.SECONDS; -@Service +@Component public class EntityStatusRefreshTask extends TimerTask { private static final Logger logger = LoggerFactory.getLogger(EntityStatusRefreshTask.class); private final long INTERVAL = SECONDS.toMillis(15); @@ -39,7 +39,7 @@ public class EntityStatusRefreshTask extends TimerTask { private Timer timer = new Timer("EntityStatusRefreshTimer", true); private EngineEntityService engineEntityService; - @Inject + @Autowired public EntityStatusRefreshTask(EngineEntityService engineEntityService) { this.engineEntityService = engineEntityService; } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/request/CompileRuleRequest.java b/engine-d/src/main/java/org/onap/holmes/engine/request/CompileRuleRequest.java index b38ee5f..1baa8ad 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/request/CompileRuleRequest.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/request/CompileRuleRequest.java @@ -1,12 +1,12 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,10 +15,11 @@ */ package org.onap.holmes.engine.request; -import javax.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import javax.validation.constraints.NotNull; + @Getter @Setter public class CompileRuleRequest { diff --git a/engine-d/src/main/java/org/onap/holmes/engine/request/DeployRuleRequest.java b/engine-d/src/main/java/org/onap/holmes/engine/request/DeployRuleRequest.java index f2ef369..3e1b6ca 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/request/DeployRuleRequest.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/request/DeployRuleRequest.java @@ -1,12 +1,12 @@ /** - * Copyright 2017 ZTE Corporation. - * + * Copyright 2017-2021 ZTE Corporation. + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,10 +15,11 @@ */ package org.onap.holmes.engine.request; -import javax.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import javax.validation.constraints.NotNull; + @Getter @Setter public class DeployRuleRequest { @@ -26,6 +27,7 @@ public class DeployRuleRequest { @NotNull private String content; + @NotNull private String engineId; @NotNull diff --git a/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java b/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java index 6fa1928..ede1d71 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java @@ -16,10 +16,11 @@ package org.onap.holmes.engine.request; -import javax.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import javax.validation.constraints.NotNull; + @Getter @Setter public class DmaapConfigRequest { diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java index 548b9b2..576170f 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,45 +18,35 @@ package org.onap.holmes.engine.resources; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.DELETE; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.dcae.DcaeConfigurationsCache; import org.onap.holmes.common.dcae.entity.SecurityInfo; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; +import org.onap.holmes.common.utils.SpringContextUtil; import org.onap.holmes.dsa.dmaappolling.Subscriber; import org.onap.holmes.engine.dmaap.SubscriberAction; import org.onap.holmes.engine.request.DmaapConfigRequest; +import org.springframework.web.bind.annotation.*; -@Service @Slf4j -//@Api(tags = {"DMaaP Configurations"}) -@Path("/dmaap") +@RestController +@RequestMapping("/dmaap") public class DmaapConfigurationService { - @PUT - @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "Subscribe to a new topic. " + "If the topic already exists, it is replaced with the new configuration.") - @Path("/sub") + @RequestMapping(value = "/sub", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON) public String addSubInfo( - @ApiParam (value = "A JSON object with the fields named name" - + " and url. Both fields are required.") DmaapConfigRequest config, - @Context HttpServletRequest request){ + @ApiParam(value = "A JSON object with the fields named name" + + " and url. Both fields are required.") + @RequestBody DmaapConfigRequest config) { String url = config.getUrl(); if (url.startsWith("http://") || url.startsWith("https://")) { Subscriber subscriber = new Subscriber(); subscriber.setTopic(config.getName()); subscriber.setUrl(url); - SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() - .getService(SubscriberAction.class); + SubscriberAction subscriberAction = SpringContextUtil.getBean(SubscriberAction.class); subscriberAction.removeSubscriber(subscriber); subscriberAction.addSubscriber(subscriber); @@ -67,30 +57,26 @@ public class DmaapConfigurationService { return "{\"message\": \"Only the HTTP or HTTPS protocol is supported!\"}"; } - @DELETE @Path("/sub/{topic}") @ApiOperation(value = "Unsubscribe a topic from DMaaP.") - @Produces(MediaType.APPLICATION_JSON) - public String removeSubInfo(@PathParam("topic") String topic){ + @RequestMapping(value = "/sub/{topic}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON) + public String removeSubInfo(@PathVariable("topic") String topic) { Subscriber subscriber = new Subscriber(); subscriber.setTopic(topic); - SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() - .getService(SubscriberAction.class); + SubscriberAction subscriberAction = SpringContextUtil.getBean(SubscriberAction.class); subscriberAction.removeSubscriber(subscriber); return "{\"message\": \"Topic unsubscribed.\"}"; } - @PUT - @Produces(MediaType.APPLICATION_JSON) - @Path("/pub") @ApiOperation(value = "Add/Update a publishing topic. " + "If the topic already exists, it is replaced with the new configuration.") + @RequestMapping(value = "/pub", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON) public String updatePubInfo( - @ApiParam (value = "A JSON object with the fields named name" - + " and url. Both fields are required.") DmaapConfigRequest config, - @Context HttpServletRequest request){ + @ApiParam(value = "A JSON object with the fields named name" + + " and url. Both fields are required.") + @RequestBody DmaapConfigRequest config) { String url = config.getUrl(); if (url.startsWith("http://") || url.startsWith("https://")) { SecurityInfo securityInfo = new SecurityInfo(); diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java index 0aa3a59..cb41533 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java @@ -1,12 +1,12 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + *

* http://www.apache.org/licenses/LICENSE-2.0 - * + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -16,64 +16,59 @@ package org.onap.holmes.engine.resources; -import com.codahale.metrics.annotation.Timed; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.dmaap.store.ClosedLoopControlNameCache; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.ExceptionUtil; -import org.onap.holmes.common.utils.LanguageUtil; import org.onap.holmes.engine.manager.DroolsEngine; import org.onap.holmes.engine.request.CompileRuleRequest; import org.onap.holmes.engine.request.DeployRuleRequest; import org.onap.holmes.engine.response.CorrelationRuleResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import java.util.Locale; +import jakarta.ws.rs.core.MediaType; import java.util.regex.Matcher; import java.util.regex.Pattern; -@Service -@Path("/rule") -@Api(tags = {"Holmes Engine Management"}) -@Produces(MediaType.APPLICATION_JSON) @Slf4j +@RestController +@RequestMapping("/rule") +@Api(tags = {"Holmes Engine Management"}) public class EngineResources { - @Inject - DroolsEngine droolsEngine; - private Pattern packagePattern = Pattern.compile("package[\\s]+([^;]+)[;\\s]*"); + private Pattern packagePattern = Pattern.compile("package[\\s]+([^;]+)[;\\s]*"); private ClosedLoopControlNameCache closedLoopControlNameCache; + private DroolsEngine droolsEngine; + + @Autowired + public void setDroolsEngine(DroolsEngine droolsEngine) { + this.droolsEngine = droolsEngine; + } - @Inject + @Autowired public void setClosedLoopControlNameCache(ClosedLoopControlNameCache closedLoopControlNameCache) { this.closedLoopControlNameCache = closedLoopControlNameCache; } - @PUT - @Produces(MediaType.APPLICATION_JSON) - @Timed + @ResponseBody + @PutMapping(produces = MediaType.APPLICATION_JSON) public CorrelationRuleResponse deployRule( @ApiParam(value = "The request entity of the HTTP call, which comprises three " + "fields: \"content\" , \"loopControlName\" and \"engineId\". " + "The \"content\" should be a valid Drools rule string and the \"engineId\" " - + "has to be \"engine-d\" in the Amsterdam release.", required = true) DeployRuleRequest deployRuleRequest, - @Context HttpServletRequest httpRequest) { + + "has to be \"engine-d\" in the Amsterdam release.", required = true) + @RequestBody DeployRuleRequest deployRuleRequest) { CorrelationRuleResponse crResponse = new CorrelationRuleResponse(); - Locale locale = LanguageUtil.getLocale(httpRequest); try { String packageName = getPackageName(deployRuleRequest.getContent()); - if(packageName == null) { - throw new CorrelationException("Could not find package name in rule: "+deployRuleRequest.getContent()); + if (packageName == null) { + throw new CorrelationException("Could not find package name in rule: " + deployRuleRequest.getContent()); } - + closedLoopControlNameCache .put(packageName, deployRuleRequest.getLoopControlName()); String packageNameRet = droolsEngine.deployRule(deployRuleRequest); @@ -97,15 +92,8 @@ public class EngineResources { return crResponse; } - @DELETE - @Produces(MediaType.APPLICATION_JSON) - @Timed - @Path("/{packageName}") - public boolean undeployRule(@PathParam("packageName") String packageName, - @Context HttpServletRequest httpRequest) { - - Locale locale = LanguageUtil.getLocale(httpRequest); - + @DeleteMapping(value = "/{packageName}") + public void undeployRule(@PathVariable("packageName") String packageName) { try { droolsEngine.undeployRule(packageName); closedLoopControlNameCache.remove(packageName); @@ -113,36 +101,26 @@ public class EngineResources { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); } - - return true; } - - @POST + @PostMapping @ApiOperation(value = "Check the validity of a rule.") - @Produces(MediaType.APPLICATION_JSON) - @Timed - public boolean compileRule(CompileRuleRequest compileRuleRequest, - @Context HttpServletRequest httpRequest) { - - Locale locale = LanguageUtil.getLocale(httpRequest); - + public void compileRule(@RequestBody CompileRuleRequest compileRuleRequest) { try { droolsEngine.compileRule(compileRuleRequest.getContent()); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); } - return true; } - - private String getPackageName(String contents){ + + private String getPackageName(String contents) { Matcher m = packagePattern.matcher(contents); - - if (m.find( )) { - return m.group(1); - }else { - return null; + + if (m.find()) { + return m.group(1); + } else { + return null; } } } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/HealthCheck.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/HealthCheck.java index c86bf06..44d238a 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/HealthCheck.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/HealthCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,24 +19,17 @@ package org.onap.holmes.engine.resources; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.SwaggerDefinition; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -@Service +@RestController @SwaggerDefinition -@Path("/healthcheck") +@RequestMapping("/healthcheck") @Api(tags = {"Health Check"}) -@Produces(MediaType.TEXT_PLAIN) -@Slf4j public class HealthCheck { - @GET - @Produces(MediaType.TEXT_PLAIN) + @GetMapping @ApiOperation(value = "Interface for the health check of the engine management module for Holmes") - public boolean healthCheck(){ - return true; + public void healthCheck() { } } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/SwaggerResource.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/SwaggerResource.java index 6743b8e..494df77 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/SwaggerResource.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/SwaggerResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,27 +16,25 @@ package org.onap.holmes.engine.resources; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.ws.rs.core.MediaType; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.net.URLDecoder; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; -@Service -@Path("/swagger.json") -@Produces(MediaType.APPLICATION_JSON) @Slf4j +@RestController +@RequestMapping("/swagger.json") public class SwaggerResource { - @GET - @Produces(MediaType.APPLICATION_JSON) + @GetMapping(produces = MediaType.APPLICATION_JSON) public String getSwaggerJson() { URL url = SwaggerResource.class.getResource("/swagger.json"); String ret = "{}"; @@ -54,7 +52,7 @@ public class SwaggerResource { return ret; } - try(BufferedReader br = new BufferedReader(new FileReader(file))) { + try (BufferedReader br = new BufferedReader(new FileReader(file))) { StringBuffer buffer = new StringBuffer(); String line = " "; while ((line = br.readLine()) != null) { diff --git a/engine-d/src/main/java/org/onap/holmes/engine/response/CorrelationRuleResponse.java b/engine-d/src/main/java/org/onap/holmes/engine/response/CorrelationRuleResponse.java index 306bd7f..96913a2 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/response/CorrelationRuleResponse.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/response/CorrelationRuleResponse.java @@ -1,12 +1,12 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/engine-d/src/main/java/org/onap/holmes/engine/utils/AlarmUtil.java b/engine-d/src/main/java/org/onap/holmes/engine/utils/AlarmUtil.java index c7eb02b..19d6f38 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/utils/AlarmUtil.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/utils/AlarmUtil.java @@ -1,12 +1,12 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,12 +15,11 @@ */ package org.onap.holmes.engine.utils; +import org.onap.holmes.common.api.stat.Alarm; + import java.util.HashMap; import java.util.Map; -import org.jvnet.hk2.annotations.Service; -import org.onap.holmes.common.api.stat.Alarm; -@Service public class AlarmUtil { private final static AlarmUtil alarmUtil = new AlarmUtil(); @@ -28,7 +27,7 @@ public class AlarmUtil { * Map> */ private final Map> rootPriorityMap = - new HashMap>(); + new HashMap>(); /** * Map */ @@ -49,7 +48,7 @@ public class AlarmUtil { String[] probableCauseStrs = probableCauseStr.replace(" ", "").split(","); for (int i = 0; i < probableCauseStrs.length; i++) { if (alarm.getProbableCause() == Long.parseLong(probableCauseStrs[i]) - && alarm.getEquipType().equals(equipTypes[i])) { + && alarm.getEquipType().equals(equipTypes[i])) { return true; } } @@ -57,10 +56,10 @@ public class AlarmUtil { } public Integer getPriority(String ruleId, String probableCauseStr, String rootAlarmFeatureStr, - String equipTypeStr, Alarm alarm) { + String equipTypeStr, Alarm alarm) { if (rootPriorityMap.containsKey(ruleId)) { if (!saveRuleMsg.get(ruleId) - .equals(probableCauseStr + equipTypeStr + rootAlarmFeatureStr)) { + .equals(probableCauseStr + equipTypeStr + rootAlarmFeatureStr)) { setPriority(ruleId, probableCauseStr, rootAlarmFeatureStr, equipTypeStr); } } else { @@ -68,7 +67,7 @@ public class AlarmUtil { } Integer priority = - rootPriorityMap.get(ruleId).get(alarm.getProbableCause() + "-" + alarm.getEquipType()); + rootPriorityMap.get(ruleId).get(alarm.getProbableCause() + "-" + alarm.getEquipType()); if (priority == null) { priority = 0; } @@ -76,7 +75,7 @@ public class AlarmUtil { } private void setPriority(String ruleId, String probableCauseStr, String rootAlarmFeatureStr, - String equipTypeStr) { + String equipTypeStr) { saveRuleMsg.put(ruleId, probableCauseStr + equipTypeStr + rootAlarmFeatureStr); Map map = new HashMap(); @@ -85,7 +84,7 @@ public class AlarmUtil { String[] equipTypes = equipTypeStr.replace(" ", "").split(","); for (int i = 0; i < rootAlarmFeatureStrs.length; i++) { map.put(probableCauseStrs[i] + "-" + equipTypes[i], - Integer.parseInt(rootAlarmFeatureStrs[i])); + Integer.parseInt(rootAlarmFeatureStrs[i])); } rootPriorityMap.put(ruleId, map); diff --git a/engine-d/src/main/java/org/onap/holmes/engine/wrapper/RuleMgtWrapper.java b/engine-d/src/main/java/org/onap/holmes/engine/wrapper/RuleMgtWrapper.java index 1fbbfe7..08ec63e 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/wrapper/RuleMgtWrapper.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/wrapper/RuleMgtWrapper.java @@ -1,12 +1,12 @@ /** * Copyright 2017 ZTE Corporation. - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,29 +15,29 @@ */ package org.onap.holmes.engine.wrapper; -import java.util.List; -import javax.inject.Inject; -import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; -import org.jvnet.hk2.annotations.Service; -import org.onap.holmes.engine.db.CorrelationRuleDao; import org.onap.holmes.common.api.entity.CorrelationRule; import org.onap.holmes.common.exception.CorrelationException; -import org.onap.holmes.common.utils.DbDaoUtil; +import org.onap.holmes.engine.db.CorrelationRuleDaoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; @Service -@Singleton @Slf4j public class RuleMgtWrapper { + private CorrelationRuleDaoService correlationRuleDaoService; - @Inject - private DbDaoUtil daoUtil; + @Autowired + public RuleMgtWrapper(CorrelationRuleDaoService correlationRuleDaoService) { + this.correlationRuleDaoService = correlationRuleDaoService; + } public List queryRuleByEnable(int enable) throws CorrelationException { - List ruleTemp = daoUtil.getJdbiDaoByOnDemand(CorrelationRuleDao.class) - .queryRuleByRuleEnable(enable); + List ruleTemp = correlationRuleDaoService.queryRuleByRuleEnable(enable); return ruleTemp; } } diff --git a/engine-d/src/main/resources/logback-spring.xml b/engine-d/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..197057e --- /dev/null +++ b/engine-d/src/main/resources/logback-spring.xml @@ -0,0 +1,59 @@ + + + + + + + + ${LOG_PATTERN} + UTF-8 + + + debug + + + + + ${LOG_HOME}/holmes-engine-mgmt-debug.log + + ${LOG_HOME}/archived/holmes-engine-mgmt-debug-%d{yyyy-MM-dd}.%i.log.gz + 15 + + 100MB + + + + ${LOG_PATTERN} + UTF-8 + + + info + + + + + ${LOG_HOME}/holmes-engine-mgmt-error.log + + ${LOG_HOME}/archived/holmes-engine-mgmt-error-%d{yyyy-MM-dd}.%i.log.gz + 15 + + 10MB + + + + ${LOG_PATTERN} + UTF-8 + + + error + deny + accept + + + + + + + + + \ No newline at end of file diff --git a/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtilTest.java b/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtilTest.java index ded50b0..9f5fd0f 100644 --- a/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtilTest.java +++ b/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/DMaaPResponseUtilTest.java @@ -19,7 +19,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.onap.holmes.common.api.stat.AlarmAdditionalField; import org.onap.holmes.common.api.stat.VesAlarm; import org.powermock.core.classloader.annotations.PrepareForTest; diff --git a/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/SubscriberTest.java b/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/SubscriberTest.java index 339a23e..96794ce 100644 --- a/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/SubscriberTest.java +++ b/engine-d/src/test/java/org/onap/holmes/dsa/dmaappolling/SubscriberTest.java @@ -15,25 +15,23 @@ */ package org.onap.holmes.dsa.dmaappolling; -import org.glassfish.hk2.api.ServiceLocator; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; -import org.onap.holmes.common.api.stat.AlarmAdditionalField; import org.onap.holmes.common.api.stat.VesAlarm; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.JerseyClient; +import org.onap.holmes.common.utils.SpringContextUtil; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; -import java.util.List; import java.util.HashMap; +import java.util.List; import java.util.Map; import static org.easymock.EasyMock.*; @@ -41,7 +39,7 @@ import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; @RunWith(PowerMockRunner.class) -@PrepareForTest({ServiceLocatorHolder.class, JerseyClient.class}) +@PrepareForTest({SpringContextUtil.class, JerseyClient.class}) @PowerMockIgnore("javax.net.ssl.*") public class SubscriberTest { @@ -52,10 +50,8 @@ public class SubscriberTest { @Before public void init() { - PowerMock.mockStatic(ServiceLocatorHolder.class); - ServiceLocator serviceLocator = PowerMock.createMock(ServiceLocator.class); - expect(ServiceLocatorHolder.getLocator()).andReturn(serviceLocator).anyTimes(); - expect(serviceLocator.getService(DMaaPResponseUtil.class)).andReturn(util).anyTimes(); + PowerMock.mockStatic(SpringContextUtil.class); + expect(SpringContextUtil.getBean(DMaaPResponseUtil.class)).andReturn(util).anyTimes(); } @Test @@ -77,9 +73,9 @@ public class SubscriberTest { vesAlarm.setStartEpochMicrosec(500L); vesAlarm.setVersion("4.0"); Map alarmAdditionalFields = new HashMap(); - alarmAdditionalFields.put("addInfo", "addInfo"); - vesAlarm.setAlarmAdditionalInformation(alarmAdditionalFields); - vesAlarm.setAlarmCondition("alarmCondition"); + alarmAdditionalFields.put("addInfo", "addInfo"); + vesAlarm.setAlarmAdditionalInformation(alarmAdditionalFields); + vesAlarm.setAlarmCondition("alarmCondition"); vesAlarm.setAlarmInterfaceA("alarmInterfaceA"); vesAlarm.setEventCategory("eventCategory"); vesAlarm.setEventSeverity("eventSeverity"); @@ -161,9 +157,9 @@ public class SubscriberTest { vesAlarm.setStartEpochMicrosec(500L); vesAlarm.setVersion("4.0"); Map alarmAdditionalFields = new HashMap(); - alarmAdditionalFields.put("addInfo", "addInfo"); - vesAlarm.setAlarmAdditionalInformation(alarmAdditionalFields); - vesAlarm.setAlarmCondition("alarmCondition"); + alarmAdditionalFields.put("addInfo", "addInfo"); + vesAlarm.setAlarmAdditionalInformation(alarmAdditionalFields); + vesAlarm.setAlarmCondition("alarmCondition"); vesAlarm.setAlarmInterfaceA("alarmInterfaceA"); vesAlarm.setEventCategory("eventCategory"); vesAlarm.setEventSeverity("eventSeverity"); diff --git a/engine-d/src/test/java/org/onap/holmes/engine/EnginedAppConfigTest.java b/engine-d/src/test/java/org/onap/holmes/engine/EnginedAppConfigTest.java deleted file mode 100644 index c550b37..0000000 --- a/engine-d/src/test/java/org/onap/holmes/engine/EnginedAppConfigTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright 2017 ZTE Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onap.holmes.engine; - -import io.dropwizard.db.DataSourceFactory; -import org.hamcrest.core.IsEqual; -import org.hamcrest.core.IsNull; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.powermock.api.easymock.PowerMock; - -public class EnginedAppConfigTest { - - private EngineDAppConfig engineAppConfig; - - @Before - public void setUp() { - engineAppConfig = new EngineDAppConfig(); - } - - @Test - public void getDataSourceFactory() { - Assert.assertThat(engineAppConfig.getDataSourceFactory(), IsNull.notNullValue()); - } - - @Test - public void setDataSourceFactory() { - DataSourceFactory database = new DataSourceFactory(); - engineAppConfig.setDataSourceFactory(database); - Assert.assertThat(engineAppConfig.getDataSourceFactory(), IsEqual.equalTo(database)); - } - - @Test - public void getApidescription() { - final String apidescription = "Holmes rule management rest API"; - Assert.assertThat(engineAppConfig.getApidescription(), IsEqual.equalTo(apidescription)); - } - - @Test - public void setApidescription() { - final String apidescription = "set api description"; - engineAppConfig.setApidescription(apidescription); - Assert.assertThat(engineAppConfig.getApidescription(), IsEqual.equalTo(apidescription)); - } -} diff --git a/engine-d/src/test/java/org/onap/holmes/engine/InitializerTest.java b/engine-d/src/test/java/org/onap/holmes/engine/InitializerTest.java index 788c3ae..4dec23d 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/InitializerTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/InitializerTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2020 ZTE Corporation. + * Copyright 2020-2022 ZTE Corporation. *

* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at @@ -23,7 +23,6 @@ import org.onap.msb.sdk.discovery.entity.MicroServiceInfo; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.internal.WhiteboxImpl; import java.util.concurrent.TimeUnit; @@ -47,7 +46,7 @@ public class InitializerTest { setReadyFlagAfter(3); - WhiteboxImpl.invokeMethod(initializer, "init"); + initializer.run(null); TimeUnit.SECONDS.sleep(6); diff --git a/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java b/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java index 9945322..0eb9049 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2022 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,15 +17,11 @@ package org.onap.holmes.engine.db; import org.easymock.EasyMock; -import org.hamcrest.core.IsNot; import org.hamcrest.core.IsNull; import org.junit.Assert; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.onap.holmes.common.api.entity.AlarmInfo; -import org.onap.holmes.common.exception.AlarmInfoException; import org.powermock.api.easymock.PowerMock; import java.util.ArrayList; @@ -34,20 +30,20 @@ import java.util.List; public class AlarmInfoDaoTest { - private AlarmInfoDao alarmInfoDao; + private AlarmInfoDaoService alarmInfoDaoService; @Before public void setUp() { - alarmInfoDao = PowerMock.createMock(AlarmInfoDao.class); + alarmInfoDaoService = PowerMock.createMock(AlarmInfoDaoService.class); } @Test public void queryAllAlarm() throws Exception { - EasyMock.expect(alarmInfoDao.queryAllAlarm()).andReturn(new ArrayList()); + EasyMock.expect(alarmInfoDaoService.queryAllAlarm()).andReturn(new ArrayList()); PowerMock.replayAll(); - List alarmInfoList = alarmInfoDao.queryAllAlarm(); + List alarmInfoList = alarmInfoDaoService.queryAllAlarm(); PowerMock.verifyAll(); Assert.assertThat(alarmInfoList, IsNull.>notNullValue()); } diff --git a/engine-d/src/test/java/org/onap/holmes/engine/db/CorrelationRuleDaoTest.java b/engine-d/src/test/java/org/onap/holmes/engine/db/CorrelationRuleDaoTest.java index 128f58a..01fb585 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/db/CorrelationRuleDaoTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/db/CorrelationRuleDaoTest.java @@ -22,6 +22,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.onap.holmes.common.api.entity.CorrelationRule; +import org.onap.holmes.engine.db.jdbi.CorrelationRuleDao; import org.powermock.api.easymock.PowerMock; import java.util.ArrayList; diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dcae/ConfigFileScanningTaskTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dcae/ConfigFileScanningTaskTest.java index b663133..7f01aa4 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/dcae/ConfigFileScanningTaskTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/dcae/ConfigFileScanningTaskTest.java @@ -17,15 +17,15 @@ package org.onap.holmes.engine.dcae; import org.easymock.EasyMock; -import org.glassfish.hk2.api.ServiceLocator; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.holmes.common.dcae.DcaeConfigurationsCache; -import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; +import org.onap.holmes.common.utils.SpringContextUtil; import org.onap.holmes.dsa.dmaappolling.DMaaPResponseUtil; import org.onap.holmes.dsa.dmaappolling.Subscriber; import org.onap.holmes.engine.dmaap.SubscriberAction; import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; @@ -33,16 +33,16 @@ import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; @RunWith(PowerMockRunner.class) +@PrepareForTest({SpringContextUtil.class}) public class ConfigFileScanningTaskTest { @Test public void run() { - ServiceLocator mockedSl = PowerMock.createMock(ServiceLocator.class); + PowerMock.mockStatic(SpringContextUtil.class); SubscriberAction mockedSa = PowerMock.createMock(SubscriberAction.class); - ServiceLocatorHolder.setLocator(mockedSl); - EasyMock.expect(mockedSl.getService(SubscriberAction.class)).andReturn(mockedSa); + EasyMock.expect(SpringContextUtil.getBean(SubscriberAction.class)).andReturn(mockedSa); // This is invoked while executing new Subscriber(). - EasyMock.expect(mockedSl.getService(DMaaPResponseUtil.class)).andReturn(new DMaaPResponseUtil()); + EasyMock.expect(SpringContextUtil.getBean(DMaaPResponseUtil.class)).andReturn(new DMaaPResponseUtil()); mockedSa.addSubscriber(EasyMock.anyObject(Subscriber.class)); EasyMock.expectLastCall(); @@ -60,13 +60,12 @@ public class ConfigFileScanningTaskTest { @Test public void run_config_not_changed() { - ServiceLocator mockedSl = PowerMock.createMock(ServiceLocator.class); + PowerMock.mockStatic(SpringContextUtil.class); SubscriberAction mockedSa = PowerMock.createMock(SubscriberAction.class); - ServiceLocatorHolder.setLocator(mockedSl); // mocked objects will be only used once - EasyMock.expect(mockedSl.getService(SubscriberAction.class)).andReturn(mockedSa); + EasyMock.expect(SpringContextUtil.getBean(SubscriberAction.class)).andReturn(mockedSa); // This is invoked while executing new Subscriber(). - EasyMock.expect(mockedSl.getService(DMaaPResponseUtil.class)).andReturn(new DMaaPResponseUtil()); + EasyMock.expect(SpringContextUtil.getBean(DMaaPResponseUtil.class)).andReturn(new DMaaPResponseUtil()); mockedSa.addSubscriber(EasyMock.anyObject(Subscriber.class)); EasyMock.expectLastCall(); diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java index 74765f5..e809cd8 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java @@ -1,12 +1,12 @@ /** - * Copyright 2017 ZTE Corporation. - * + * Copyright 2017-2021 ZTE Corporation. + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,39 +15,40 @@ */ package org.onap.holmes.engine.dmaap; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.*; - -import java.lang.reflect.Field; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.holmes.common.api.entity.AlarmInfo; import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.dsa.dmaappolling.Subscriber; -import org.onap.holmes.engine.db.AlarmInfoDao; +import org.onap.holmes.engine.db.AlarmInfoDaoService; import org.onap.holmes.engine.manager.DroolsEngine; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; -@PrepareForTest({Subscriber.class, DroolsEngine.class,DMaaPAlarmPolling.class}) +import java.lang.reflect.Field; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.assertThat; + +@PrepareForTest({Subscriber.class, DroolsEngine.class, DMaaPAlarmPolling.class}) @RunWith(PowerMockRunner.class) public class DMaaPAlarmPollingTest { private DMaaPAlarmPolling dMaaPAlarmPolling; private Subscriber subscriber; private DroolsEngine droolsEngine; - private AlarmInfoDao alarmInfoDao; + private AlarmInfoDaoService alarmInfoDaoService; @Before public void setUp() { subscriber = PowerMock.createMock(Subscriber.class); droolsEngine = PowerMock.createMock(DroolsEngine.class); - alarmInfoDao = PowerMock.createMock(AlarmInfoDao.class); - dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine,alarmInfoDao); + alarmInfoDaoService = PowerMock.createMock(AlarmInfoDaoService.class); + dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine, alarmInfoDaoService); PowerMock.replayAll(); } @@ -72,7 +73,7 @@ public class DMaaPAlarmPollingTest { vesAlarm.setRootFlag(0); PowerMock.replayAll(); - AlarmInfo alarmInfo = Whitebox.invokeMethod(dMaaPAlarmPolling,"getAlarmInfo",vesAlarm); + AlarmInfo alarmInfo = Whitebox.invokeMethod(dMaaPAlarmPolling, "getAlarmInfo", vesAlarm); PowerMock.verifyAll(); assertThat(alarmInfo.getAlarmIsCleared(), is(1)); diff --git a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java index cb28faa..31f1817 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017-2020 ZTE Corporation. + * Copyright 2017-2021 ZTE Corporation. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.onap.holmes.engine.manager; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -26,11 +25,10 @@ import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.common.config.MicroServiceConfig; import org.onap.holmes.common.dmaap.store.ClosedLoopControlNameCache; import org.onap.holmes.common.exception.CorrelationException; -import org.onap.holmes.common.utils.DbDaoUtil; -import org.onap.holmes.engine.db.AlarmInfoDao; +import org.onap.holmes.engine.db.AlarmInfoDaoService; +import org.onap.holmes.engine.db.CorrelationRuleDaoService; import org.onap.holmes.engine.request.DeployRuleRequest; import org.onap.holmes.engine.wrapper.RuleMgtWrapper; -import org.powermock.api.easymock.PowerMock; import org.powermock.reflect.Whitebox; import java.util.ArrayList; @@ -47,33 +45,31 @@ public class DroolsEngineTest { @Rule public ExpectedException thrown = ExpectedException.none(); - private RuleMgtWrapper ruleMgtWrapper; + private RuleMgtWrapper ruleMgtWrapperMock; private DroolsEngine droolsEngine; - private DbDaoUtil dbDaoUtilStub; + private AlarmInfoDaoService alarmInfoDaoServiceStub; + + private CorrelationRuleDaoService correlationRuleDaoServiceStub; private ClosedLoopControlNameCache closedLoopControlNameCache; public DroolsEngineTest() throws Exception { System.setProperty(MicroServiceConfig.HOSTNAME, "127.0.0.1:80"); droolsEngine = new DroolsEngine(); - ruleMgtWrapper = new RuleMgtWrapperStub(); - dbDaoUtilStub = new DbDaoUtilStub(); + alarmInfoDaoServiceStub = new AlarmInfoDaoServiceStub(); + droolsEngine.setAlarmInfoDaoService(alarmInfoDaoServiceStub); + correlationRuleDaoServiceStub = new CorrelationRuleDaoServiceStub(); + ruleMgtWrapperMock = new RuleMgtWrapperStub(correlationRuleDaoServiceStub); closedLoopControlNameCache = new ClosedLoopControlNameCache(); droolsEngine.setClosedLoopControlNameCache(closedLoopControlNameCache); - droolsEngine.setDaoUtil(dbDaoUtilStub); - droolsEngine.setRuleMgtWrapper(ruleMgtWrapper); + droolsEngine.setRuleMgtWrapper(ruleMgtWrapperMock); - Whitebox.invokeMethod(droolsEngine, "init"); + Whitebox.invokeMethod(droolsEngine, "run", null); System.clearProperty(MicroServiceConfig.HOSTNAME); } - @Before - public void setUp() throws Exception { - PowerMock.resetAll(); - } - @Test public void deployRule_rule_is_null() throws CorrelationException { thrown.expect(NullPointerException.class); @@ -241,78 +237,74 @@ public class DroolsEngineTest { assertThat(packages.contains("packageCheck"), is(true)); } -} - -class RuleMgtWrapperStub extends RuleMgtWrapper { - private List rules; - - public RuleMgtWrapperStub() { - rules = new ArrayList<>(); - CorrelationRule rule = new CorrelationRule(); - rule.setEnabled(1); - rule.setContent("package org.onap.holmes;"); - rule.setPackageName("UT"); - rule.setClosedControlLoopName(UUID.randomUUID().toString()); - rule.setEngineInstance("127.0.0.1"); - rules.add(rule); - } - - public List getRules() { - return rules; - } - - public void setRules(List rules) { - this.rules = rules; - } - @Override - public List queryRuleByEnable(int enabled) throws CorrelationException { - return rules.stream().filter(rule -> rule.getEnabled() == enabled).collect(Collectors.toList()); + class RuleMgtWrapperStub extends RuleMgtWrapper { + private List rules; + + public RuleMgtWrapperStub(CorrelationRuleDaoService correlationRuleDaoService) { + super(correlationRuleDaoService); + rules = new ArrayList<>(); + CorrelationRule rule = new CorrelationRule(); + rule.setEnabled(1); + rule.setContent("package org.onap.holmes;"); + rule.setPackageName("UT"); + rule.setClosedControlLoopName(UUID.randomUUID().toString()); + rule.setEngineInstance("127.0.0.1"); + rules.add(rule); + } + + public List getRules() { + return rules; + } + + public void setRules(List rules) { + this.rules = rules; + } + + @Override + public List queryRuleByEnable(int enabled) throws CorrelationException { + return rules.stream().filter(rule -> rule.getEnabled() == enabled).collect(Collectors.toList()); + } } -} -class AlarmInfoDaoStub extends AlarmInfoDao { - - private List alarms; - - public AlarmInfoDaoStub() { - alarms = new ArrayList<>(); - AlarmInfo info = new AlarmInfo(); - info.setEventId("eventId"); - info.setEventName("eventName"); - info.setStartEpochMicroSec(1L); - info.setLastEpochMicroSec(1L); - info.setSourceId("sourceId"); - info.setSourceName("sourceName"); - info.setRootFlag(0); - info.setAlarmIsCleared(1); - alarms.add(info); + class AlarmInfoDaoServiceStub extends AlarmInfoDaoService { + + private List alarms; + + public AlarmInfoDaoServiceStub() { + alarms = new ArrayList<>(); + AlarmInfo info = new AlarmInfo(); + info.setEventId("eventId"); + info.setEventName("eventName"); + info.setStartEpochMicroSec(1L); + info.setLastEpochMicroSec(1L); + info.setSourceId("sourceId"); + info.setSourceName("sourceName"); + info.setRootFlag(0); + info.setAlarmIsCleared(1); + alarms.add(info); + } + + @Override + public AlarmInfo saveAlarm(AlarmInfo alarmInfo) { + alarms.add(alarmInfo); + return alarmInfo; + } + + @Override + public List queryAllAlarm() { + return alarms; + } + + @Override + public void deleteAlarm(AlarmInfo alarmInfo) { + + } } - @Override - protected String addAlarm(AlarmInfo alarmInfo) { - alarms.add(alarmInfo); - return null; - } - - @Override - protected List queryAlarm() { - return alarms; - } + class CorrelationRuleDaoServiceStub extends CorrelationRuleDaoService { - @Override - protected int deleteAlarmByAlarmIsCleared(String alarmName, String sourceName, String sourceId) { - return 1; } } -class DbDaoUtilStub extends DbDaoUtil { - private AlarmInfoDao dao = new AlarmInfoDaoStub(); - @Override - public T getJdbiDaoByOnDemand(Class daoClazz) { - - return (T) dao; - - } -} diff --git a/engine-d/src/test/java/org/onap/holmes/engine/resources/EngineResourcesTest.java b/engine-d/src/test/java/org/onap/holmes/engine/resources/EngineResourcesTest.java index aa2052d..f4ad483 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/resources/EngineResourcesTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/resources/EngineResourcesTest.java @@ -26,11 +26,8 @@ import org.onap.holmes.engine.manager.DroolsEngine; import org.onap.holmes.engine.request.CompileRuleRequest; import org.onap.holmes.engine.request.DeployRuleRequest; import org.powermock.api.easymock.PowerMock; -import org.powermock.reflect.Whitebox; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; -import java.util.Locale; +import jakarta.ws.rs.WebApplicationException; import static org.easymock.EasyMock.*; @@ -47,23 +44,20 @@ public class EngineResourcesTest { closedLoopControlNameCache = new ClosedLoopControlNameCache(); engineResources = new EngineResources(); engineResources.setClosedLoopControlNameCache(closedLoopControlNameCache); - - Whitebox.setInternalState(engineResources,"droolsEngine", droolsEngine); + engineResources.setDroolsEngine(droolsEngine); PowerMock.resetAll(); } @Test public void deployRule_exception() throws CorrelationException { DeployRuleRequest deployRuleRequest = new DeployRuleRequest(); - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); thrown.expect(WebApplicationException.class); - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); expect(droolsEngine.deployRule(anyObject(DeployRuleRequest.class))). andThrow(new CorrelationException("")); PowerMock.replayAll(); - engineResources.deployRule(deployRuleRequest, httpRequest); + engineResources.deployRule(deployRuleRequest); PowerMock.verifyAll(); } @@ -72,66 +66,55 @@ public class EngineResourcesTest { DeployRuleRequest deployRuleRequest = new DeployRuleRequest(); deployRuleRequest.setContent("package packageName;\n\nimport xxx.xxx.xxx;"); deployRuleRequest.setLoopControlName("loopControlName"); - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); expect(droolsEngine.deployRule(anyObject(DeployRuleRequest.class))).andReturn("packageName"); PowerMock.replayAll(); - engineResources.deployRule(deployRuleRequest, httpRequest); + engineResources.deployRule(deployRuleRequest); PowerMock.verifyAll(); } @Test public void undeployRule_exception() throws CorrelationException { String packageName = "packageName"; - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); thrown.expect(WebApplicationException.class); - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); droolsEngine.undeployRule(anyObject(String.class)); expectLastCall().andThrow(new CorrelationException("")); PowerMock.replayAll(); - engineResources.undeployRule(packageName, httpRequest); + engineResources.undeployRule(packageName); PowerMock.verifyAll(); } @Test public void undeployRule_normal() throws CorrelationException { String packageName = "packageName"; - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); droolsEngine.undeployRule(anyObject(String.class)); PowerMock.replayAll(); - engineResources.undeployRule(packageName, httpRequest); + engineResources.undeployRule(packageName); PowerMock.verifyAll(); } @Test public void compileRule_exception() throws CorrelationException { CompileRuleRequest compileRuleRequest = new CompileRuleRequest(); - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); thrown.expect(WebApplicationException.class); - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); droolsEngine.compileRule(anyObject(String.class)); expectLastCall().andThrow(new CorrelationException("")); PowerMock.replayAll(); - engineResources.compileRule(compileRuleRequest, httpRequest); + engineResources.compileRule(compileRuleRequest); PowerMock.verifyAll(); } @Test public void compileRule_normal() throws CorrelationException { CompileRuleRequest compileRuleRequest = new CompileRuleRequest(); - HttpServletRequest httpRequest = PowerMock.createMock(HttpServletRequest.class); - - expect(httpRequest.getHeader("language-option")).andReturn("en_US"); droolsEngine.compileRule(anyObject(String.class)); PowerMock.replayAll(); - engineResources.compileRule(compileRuleRequest, httpRequest); + engineResources.compileRule(compileRuleRequest); PowerMock.verifyAll(); } } diff --git a/engine-d/src/test/java/org/onap/holmes/engine/wrapper/RuleMgtWrapperTest.java b/engine-d/src/test/java/org/onap/holmes/engine/wrapper/RuleMgtWrapperTest.java index cd7aff4..05fb7b5 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/wrapper/RuleMgtWrapperTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/wrapper/RuleMgtWrapperTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2021 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,45 +16,38 @@ package org.onap.holmes.engine.wrapper; -import static org.easymock.EasyMock.anyInt; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.expect; - -import java.util.ArrayList; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.onap.holmes.common.api.entity.CorrelationRule; import org.onap.holmes.common.exception.CorrelationException; -import org.onap.holmes.common.utils.DbDaoUtil; -import org.onap.holmes.engine.db.CorrelationRuleDao; +import org.onap.holmes.engine.db.CorrelationRuleDaoService; import org.powermock.api.easymock.PowerMock; -import org.powermock.reflect.Whitebox; + +import java.util.ArrayList; + +import static org.easymock.EasyMock.anyInt; +import static org.easymock.EasyMock.expect; public class RuleMgtWrapperTest { @Rule public ExpectedException thrown = ExpectedException.none(); - private DbDaoUtil daoUtil; + private CorrelationRuleDaoService correlationRuleDaoService; private RuleMgtWrapper ruleMgtWrapper; @Before public void setUp() { - daoUtil = PowerMock.createMock(DbDaoUtil.class); - ruleMgtWrapper = new RuleMgtWrapper(); + correlationRuleDaoService = PowerMock.createMock(CorrelationRuleDaoService.class); + ruleMgtWrapper = new RuleMgtWrapper(correlationRuleDaoService); - Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", daoUtil); PowerMock.resetAll(); } @Test public void queryRuleByEnable_normal() throws CorrelationException { int enable = 3; - - CorrelationRuleDao correlationRuleDao = PowerMock.createMock(CorrelationRuleDao.class); - expect(daoUtil.getJdbiDaoByOnDemand(anyObject(Class.class))).andReturn(correlationRuleDao); - expect(correlationRuleDao.queryRuleByRuleEnable(anyInt())).andReturn(new ArrayList()); + expect(correlationRuleDaoService.queryRuleByRuleEnable(anyInt())).andReturn(new ArrayList()); PowerMock.replayAll(); ruleMgtWrapper.queryRuleByEnable(enable); PowerMock.verifyAll(); diff --git a/pom.xml b/pom.xml index 831dbb8..83a1104 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ @@ -299,6 +337,12 @@ powermock-classloading-xstream ${powermock.version} test + + + xstream + com.thoughtworks.xstream + + org.hamcrest @@ -330,6 +374,19 @@ ${powermock.version} test + + org.mockito + mockito-core + 2.28.2 + test + + + org.powermock + powermock-api-support + 2.0.7 + test + + org.powermock powermock-api-easymock @@ -345,47 +402,9 @@ junit junit - 4.8.2 + 4.13.2 test - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 - - 1.8 - 1.8 - 11 - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - prepare-agent - - prepare-agent - - - - report - - report - - - ${project.build.directory}/code-coverage/jacoco.exec - ${project.reporting.outputDirectory}/jacoco-ut - - - - - - -- 2.16.6