diff options
Diffstat (limited to 'prh-app-server/src/main/java')
8 files changed, 140 insertions, 140 deletions
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/MainApp.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/MainApp.java index 5ea07e0a..6ce5d64a 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/MainApp.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/MainApp.java @@ -25,6 +25,7 @@ import static org.onap.dcaegen2.services.prh.model.logging.MdcVariables.REQUEST_ import java.util.Map; import java.util.UUID; +import org.onap.dcaegen2.services.prh.configuration.ConsulConfigFileReader; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.providers.CloudConfigurationClient; import org.slf4j.MDC; import org.springframework.boot.SpringApplication; @@ -65,4 +66,9 @@ public class MainApp { CloudConfigurationClient getCloudConfigurationClient(){ return new CloudConfigurationClient(); } + + @Bean + ConsulConfigFileReader getConfigFileLoader(){ + return new ConsulConfigFileReader(); + } } diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AaiHttpClientConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AaiHttpClientConfig.java index c90fd9e3..6df9c4ac 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AaiHttpClientConfig.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AaiHttpClientConfig.java @@ -42,7 +42,7 @@ import java.util.function.BiFunction; @Configuration public class AaiHttpClientConfig { @Autowired - private CloudConfiguration cloudConfig; + private ConsulConfiguration consulConfiguration; @Bean public AaiHttpClient<AaiModel, HttpResponse> getPatchClientFactory() { @@ -68,8 +68,8 @@ public class AaiHttpClientConfig { final BiFunction<AaiClientConfiguration, CloudHttpClient, AaiHttpClient<T, U>> factoryMethod) { return x -> factoryMethod.apply( - cloudConfig.getAaiClientConfiguration(), - new AaiHttpClientFactory(cloudConfig.getAaiClientConfiguration()).build() + consulConfiguration.getAaiClientConfiguration(), + new AaiHttpClientFactory(consulConfiguration.getAaiClientConfiguration()).build() ).getAaiResponse(x); } } diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java index 21495740..8ac1d9c0 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java @@ -36,7 +36,6 @@ import org.springframework.context.annotation.Configuration; /** * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18 */ - @Configuration @EnableConfigurationProperties public class AppConfig extends PrhAppConfig { diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigFileReader.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigFileReader.java new file mode 100644 index 00000000..f11d9ff6 --- /dev/null +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigFileReader.java @@ -0,0 +1,78 @@ +/* + * ============LICENSE_START======================================================= + * PNF-REGISTRATION-HANDLER + * ================================================================================ + * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.dcaegen2.services.prh.configuration; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Optional; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.ImmutableEnvProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import reactor.core.publisher.Mono; + +@Configuration +public class ConsulConfigFileReader { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConsulConfigFileReader.class); + private static final int DEFAULT_CONSUL_PORT = 8500; + private ImmutableEnvProperties jsonEnvProperties; + + @Value("classpath:consul_config.json") + private Resource consulConfig; + + public Mono<EnvProperties> evaluate() { + initFileStreamReader(); + EnvProperties envProperties = ImmutableEnvProperties.builder() + .consulHost(jsonEnvProperties.consulHost()) + .consulPort(Optional.ofNullable(jsonEnvProperties.consulPort()).orElse(DEFAULT_CONSUL_PORT)) + .cbsName(jsonEnvProperties.cbsName()) + .appName(jsonEnvProperties.appName()) + .build(); + LOGGER.info("Evaluated variables: {}", envProperties); + return Mono.just(envProperties); + } + + private void initFileStreamReader() { + LOGGER.debug("Loading configuration from configuration file"); + Gson gson = new Gson(); + try (InputStream inputStream = consulConfig.getInputStream()) { + JsonElement rootElement = getJsonElement(inputStream); + if (rootElement.isJsonObject()) { + jsonEnvProperties = gson.fromJson(rootElement, ImmutableEnvProperties.class); + } + } catch (IOException e) { + LOGGER.warn("Failed to load/parse file", e); + } + } + + private JsonElement getJsonElement(InputStream inputStream) { + return new JsonParser().parse(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + } +} diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfiguration.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfiguration.java index 10ece50b..3d58f01e 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfiguration.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfiguration.java @@ -23,97 +23,99 @@ package org.onap.dcaegen2.services.prh.configuration; import com.google.gson.JsonObject; import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration; import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.ImmutableAaiClientConfiguration; - +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClientFactory; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.providers.CloudConfigurationClient; import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.config.DmaapConsumerConfiguration; import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.config.DmaapPublisherConfiguration; +import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.scheduling.annotation.EnableScheduling; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.util.Optional; -import java.util.Properties; -/** - * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 8/9/18 - */ @Configuration @ComponentScan("org.onap.dcaegen2.services.sdk.rest.services.cbs.client.providers") @EnableConfigurationProperties @EnableScheduling @Primary -public class CloudConfiguration extends AppConfig { - - private static final Logger LOGGER = LoggerFactory.getLogger(CloudConfiguration.class); - private CloudConfigurationClient prhConfigurationProvider; - - private AaiClientConfiguration aaiClientCloudConfiguration; - private DmaapPublisherConfiguration dmaapPublisherCloudConfiguration; - private DmaapPublisherConfiguration dmaapUpdatePublisherCloudConfiguration; - private DmaapConsumerConfiguration dmaapConsumerCloudConfiguration; - - @Value("#{systemEnvironment}") - private Properties systemEnvironment; +public class ConsulConfiguration extends PrhAppConfig { + private static final Logger LOGGER = LoggerFactory.getLogger(ConsulConfiguration.class); + private AaiClientConfiguration aaiClientCBSConfiguration; + private DmaapPublisherConfiguration dmaapPublisherCBSConfiguration; + private DmaapConsumerConfiguration dmaapConsumerCBSConfiguration; + private DmaapPublisherConfiguration dmaapUpdatePublisherCBSConfiguration; @Autowired - public void setThreadPoolTaskScheduler(CloudConfigurationClient prhConfigurationProvider) { - this.prhConfigurationProvider = prhConfigurationProvider; - } + private ConsulConfigFileReader consulConfigFileReader; public void runTask() { - Flux.defer(() -> EnvironmentProcessor.evaluate(systemEnvironment)) + Flux.defer(this::resolveEnvProperties) .subscribeOn(Schedulers.parallel()) .subscribe(this::parsingConfigSuccess, this::parsingConfigError); } - private void parsingConfigError(Throwable throwable) { - LOGGER.warn("Failed to process system environments", throwable); - } - - private void cloudConfigError(Throwable throwable) { - LOGGER.warn("Failed to gather configuration from ConfigBindingService/Consul", throwable); + private Mono<EnvProperties> resolveEnvProperties() { + try { + return Mono.just(EnvProperties.fromEnvironment()); + } catch(Exception e){ + parsingConfigError(e); + return consulConfigFileReader.evaluate(); + } } private void parsingConfigSuccess(EnvProperties envProperties) { - LOGGER.debug("Fetching PRH configuration from ConfigBindingService/Consul"); - prhConfigurationProvider.callForServiceConfigurationReactive(envProperties) - .subscribe(this::parseCloudConfig, this::cloudConfigError); + LOGGER.debug("Fetching PRH configuration from Consul"); + CbsClientFactory.createCbsClient(envProperties) + .flatMap(cbsClient -> cbsClient.get(CbsRequests.getAll(RequestDiagnosticContext.create()))) + .subscribe(this::parseCBSConfig, this::cbsConfigError); } - private void parseCloudConfig(JsonObject jsonObject) { + private void parseCBSConfig(JsonObject jsonObject) { LOGGER.info("Received application configuration: {}", jsonObject); - CloudConfigParser cloudConfigParser = new CloudConfigParser(jsonObject); - dmaapPublisherCloudConfiguration = cloudConfigParser.getDmaapPublisherConfig(); - dmaapUpdatePublisherCloudConfiguration = cloudConfigParser.getDmaapUpdatePublisherConfig(); - aaiClientCloudConfiguration = ImmutableAaiClientConfiguration.copyOf(cloudConfigParser.getAaiClientConfig()) + ConsulConfigurationParser consulConfigurationParser = new ConsulConfigurationParser(jsonObject); + dmaapPublisherCBSConfiguration = consulConfigurationParser.getDmaapPublisherConfig(); + dmaapUpdatePublisherCBSConfiguration = consulConfigurationParser.getDmaapUpdatePublisherConfig(); + aaiClientCBSConfiguration = ImmutableAaiClientConfiguration.copyOf(consulConfigurationParser.getAaiClientConfig()) .withAaiHeaders(aaiClientConfiguration.aaiHeaders()); - dmaapConsumerCloudConfiguration = cloudConfigParser.getDmaapConsumerConfig(); + dmaapConsumerCBSConfiguration = consulConfigurationParser.getDmaapConsumerConfig(); + } + + private void parsingConfigError(Throwable throwable) { + LOGGER.warn("Failed to process system environments", throwable); + } + + private void cbsConfigError(Throwable throwable) { + LOGGER.warn("Failed to gather configuration from ConfigBindingService/Consul", throwable); } @Override public DmaapPublisherConfiguration getDmaapPublisherConfiguration() { - return Optional.ofNullable(dmaapPublisherCloudConfiguration).orElse(super.getDmaapPublisherConfiguration()); + return Optional.ofNullable(dmaapPublisherCBSConfiguration).orElse(super.getDmaapPublisherConfiguration()); } @Override public DmaapPublisherConfiguration getDmaapUpdatePublisherConfiguration() { - return Optional.ofNullable(dmaapUpdatePublisherCloudConfiguration).orElse(super.getDmaapPublisherConfiguration()); + return Optional.ofNullable(dmaapUpdatePublisherCBSConfiguration).orElse(super.getDmaapPublisherConfiguration()); } @Override public AaiClientConfiguration getAaiClientConfiguration() { - return Optional.ofNullable(aaiClientCloudConfiguration).orElse(super.getAaiClientConfiguration()); + return Optional.ofNullable(aaiClientCBSConfiguration).orElse(super.getAaiClientConfiguration()); } @Override public DmaapConsumerConfiguration getDmaapConsumerConfiguration() { - return Optional.ofNullable(dmaapConsumerCloudConfiguration).orElse(super.getDmaapConsumerConfiguration()); + return Optional.ofNullable(dmaapConsumerCBSConfiguration).orElse(super.getDmaapConsumerConfiguration()); } } diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfigParser.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigurationParser.java index ec01ff50..b05c0324 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/CloudConfigParser.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/ConsulConfigurationParser.java @@ -31,16 +31,16 @@ import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.config.Immutabl /** * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 8/21/18 */ -class CloudConfigParser { - +class ConsulConfigurationParser { private static final String SECURITY_TRUST_STORE_PATH = "security.trustStorePath"; private static final String SECURITY_TRUST_STORE_PASS_PATH = "security.trustStorePasswordPath"; private static final String SECURITY_KEY_STORE_PATH = "security.keyStorePath"; private static final String SECURITY_KEY_STORE_PASS_PATH = "security.keyStorePasswordPath"; + private static final String CONFIG = "config"; private final JsonObject jsonObject; - CloudConfigParser(JsonObject jsonObject) { - this.jsonObject = jsonObject; + ConsulConfigurationParser(JsonObject jsonObject) { + this.jsonObject = jsonObject.getAsJsonObject(CONFIG); } DmaapPublisherConfiguration getDmaapPublisherConfig() { diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/EnvironmentProcessor.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/EnvironmentProcessor.java deleted file mode 100644 index 3d765bde..00000000 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/EnvironmentProcessor.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * PNF-REGISTRATION-HANDLER - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.dcaegen2.services.prh.configuration; - -import org.onap.dcaegen2.services.prh.exceptions.EnvironmentLoaderException; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties; -import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.ImmutableEnvProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import reactor.core.publisher.Mono; - -import java.util.Optional; -import java.util.Properties; - -/** - * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 8/10/18 - */ -final class EnvironmentProcessor { - - private static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentProcessor.class); - private static final int DEFAULT_CONSUL_PORT = 8500; - - private EnvironmentProcessor() { - } - - static Mono<EnvProperties> evaluate(Properties systemEnvironment) { - LOGGER.debug("Loading configuration from system environment variables"); - EnvProperties envProperties; - try { - envProperties = ImmutableEnvProperties.builder().consulHost(getConsulHost(systemEnvironment)) - .consulPort(getConsultPort(systemEnvironment)).cbsName(getConfigBindingService(systemEnvironment)) - .appName(getService(systemEnvironment)).build(); - } catch (EnvironmentLoaderException e) { - return Mono.error(e); - } - LOGGER.info("Evaluated system environment variables: {}", envProperties); - return Mono.just(envProperties); - } - - private static String getConsulHost(Properties systemEnvironments) throws EnvironmentLoaderException { - return Optional.ofNullable(systemEnvironments.getProperty("CONSUL_HOST")) - .orElseThrow(() -> new EnvironmentLoaderException("$CONSUL_HOST environment has not been defined")); - } - - private static Integer getConsultPort(Properties systemEnvironments) { - return Optional.ofNullable(systemEnvironments.getProperty("CONSUL_PORT")).map(Integer::valueOf) - .orElseGet(EnvironmentProcessor::getDefaultPortOfConsul); - } - - private static String getConfigBindingService(Properties systemEnvironments) throws EnvironmentLoaderException { - return Optional.ofNullable(systemEnvironments.getProperty("CONFIG_BINDING_SERVICE")) - .orElseThrow( - () -> new EnvironmentLoaderException("$CONFIG_BINDING_SERVICE environment has not been defined")); - } - - private static String getService(Properties systemEnvironments) throws EnvironmentLoaderException { - return Optional.ofNullable(Optional.ofNullable(systemEnvironments.getProperty("HOSTNAME")) - .orElse(systemEnvironments.getProperty("SERVICE_NAME"))) - .orElseThrow(() -> new EnvironmentLoaderException( - "Neither $HOSTNAME/$SERVICE_NAME have not been defined as system environment")); - } - - private static Integer getDefaultPortOfConsul() { - LOGGER.warn("$CONSUL_PORT environment has not been defined, using default port: {}", DEFAULT_CONSUL_PORT); - return DEFAULT_CONSUL_PORT; - } -} diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasksRunner.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasksRunner.java index 956ffead..e20e25d8 100644 --- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasksRunner.java +++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasksRunner.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.concurrent.ScheduledFuture; import javax.annotation.PostConstruct; -import org.onap.dcaegen2.services.prh.configuration.CloudConfiguration; +import org.onap.dcaegen2.services.prh.configuration.ConsulConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; @@ -57,15 +57,15 @@ public class ScheduledTasksRunner { private final TaskScheduler taskScheduler; private final ScheduledTasks scheduledTask; - private final CloudConfiguration cloudConfiguration; + private final ConsulConfiguration consulConfiguration; @Autowired public ScheduledTasksRunner(TaskScheduler taskScheduler, ScheduledTasks scheduledTask, - CloudConfiguration cloudConfiguration) { + ConsulConfiguration consulConfiguration) { this.taskScheduler = taskScheduler; this.scheduledTask = scheduledTask; - this.cloudConfiguration = cloudConfiguration; + this.consulConfiguration = consulConfiguration; } /** @@ -94,7 +94,7 @@ public class ScheduledTasksRunner { LOGGER.info(ENTRY, "Start scheduling PRH workflow"); if (scheduledPrhTaskFutureList.isEmpty()) { scheduledPrhTaskFutureList.add(taskScheduler - .scheduleAtFixedRate(cloudConfiguration::runTask, Instant.now(), + .scheduleAtFixedRate(consulConfiguration::runTask, Instant.now(), Duration.ofMinutes(SCHEDULING_REQUEST_FOR_CONFIGURATION_DELAY))); scheduledPrhTaskFutureList.add(taskScheduler .scheduleWithFixedDelay(scheduledTask::scheduleMainPrhEventTask, |