From 22400a9e86aba3aece2ad21dc6f74fa1a14aab42 Mon Sep 17 00:00:00 2001 From: lukai Date: Fri, 27 Dec 2019 10:02:14 +0800 Subject: add periodic fetch configuration Issue-ID: DCAEGEN2-2007 Signed-off-by: Kai Lu Change-Id: Iab1c329534e37323eb7d0f1227b2d5c16e1cb50c --- dcae-analytics/dcae-analytics-model/pom.xml | 52 ++++++++- .../ConfigBindingServiceConstants.java | 4 +- .../supplier/ConfigBindingServiceJsonSupplier.java | 128 --------------------- 3 files changed, 51 insertions(+), 133 deletions(-) delete mode 100644 dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/util/supplier/ConfigBindingServiceJsonSupplier.java (limited to 'dcae-analytics/dcae-analytics-model') diff --git a/dcae-analytics/dcae-analytics-model/pom.xml b/dcae-analytics/dcae-analytics-model/pom.xml index b16958a..337dcb4 100644 --- a/dcae-analytics/dcae-analytics-model/pom.xml +++ b/dcae-analytics/dcae-analytics-model/pom.xml @@ -38,9 +38,11 @@ DCAE Analytics Model Contains models (e.g. Common Event Format) which are common to DCAE Analytics - - ${project.parent.basedir} - + + ${project.parent.basedir} + 1.1.6 + 2.7.1 + @@ -75,6 +77,48 @@ dcae-analytics-test - + + org.onap.dcaegen2.services.sdk.rest.services + cbs-client + ${sdk.version} + + + org.onap.dcaegen2.services.sdk.rest.services + dmaap-client + ${sdk.version} + + + org.onap.dcaegen2.services.sdk.rest.services + common-dependency + ${sdk.version} + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-webflux + + + org.springframework.boot + spring-boot-autoconfigure + + + javax.validation + validation-api + + + org.immutables + value + ${immutable.version} + provided + + + diff --git a/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/configbindingservice/ConfigBindingServiceConstants.java b/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/configbindingservice/ConfigBindingServiceConstants.java index 786765f..9776d70 100644 --- a/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/configbindingservice/ConfigBindingServiceConstants.java +++ b/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/configbindingservice/ConfigBindingServiceConstants.java @@ -34,6 +34,7 @@ public abstract class ConfigBindingServiceConstants { // ================== CONFIG SERVICE CONSTANTS ============================== // public static final String CONSUL_HOST_ENV_VARIABLE_KEY = "CONSUL_HOST"; + public static final Integer DEFAULT_CONSUL_PORT_ENV_VARIABLE_VALUE = 8500; public static final String CONSUL_HOST_ENV_VARIABLE_VALUE = System.getenv(CONSUL_HOST_ENV_VARIABLE_KEY); public static final String CONFIG_BINDING_SERVICE_ENV_VARIABLE_KEY = "CONFIG_BINDING_SERVICE"; public static final String CONFIG_BINDING_SERVICE_ENV_VARIABLE_VALUE = @@ -47,12 +48,13 @@ public abstract class ConfigBindingServiceConstants { public static final String CONFIG_BINDING_SERVICE_PROPERTIES_KEY = "config-binding-service"; - public static final Set SPRING_RESERVED_PROPERTIES_KEY_PREFIXES = Stream.of("spring", "endpoints", "server", "logging", "management").collect(Collectors.toSet()); public static final String CONFIG_SERVICE_MESSAGE_ROUTER_VALUE = "message_router"; // CONVERT JSON TO MAP public static final String KEY_SEPARATOR = "."; + public static final String CONFIG = "config"; + public static final int CONFIG_SERVICE_REFRESHPERIOD = 1; // ============== CONFIG BINDING SERVICE UTILS ========================= // /** diff --git a/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/util/supplier/ConfigBindingServiceJsonSupplier.java b/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/util/supplier/ConfigBindingServiceJsonSupplier.java deleted file mode 100644 index b882bb0..0000000 --- a/dcae-analytics/dcae-analytics-model/src/main/java/org/onap/dcae/analytics/model/util/supplier/ConfigBindingServiceJsonSupplier.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * ================================================================================ - * Copyright (c) 2018 AT&T 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.dcae.analytics.model.util.supplier; - - -import java.util.List; -import java.util.Optional; -import java.util.function.Function; -import java.util.function.Supplier; - -import org.onap.dcae.analytics.model.configbindingservice.ConfigBindingServiceConstants; -import org.onap.dcae.analytics.model.configbindingservice.ConsulConfigBindingServiceQueryResponse; -import org.onap.dcae.analytics.model.util.function.StringToURLFunction; -import org.onap.dcae.analytics.model.util.function.URLToHttpGetFunction; -import org.onap.dcae.analytics.model.util.json.AnalyticsModelJsonConversion; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A Function which fetches ApplicationProperties configuration from - * Config Binding Service when deployed via docker, typically during application startup time. - * - * @author Rajiv Singla - */ -public class ConfigBindingServiceJsonSupplier implements Supplier> { - - private static final Logger logger = LoggerFactory.getLogger(ConfigBindingServiceJsonSupplier.class); - - private final Function> fetchUrlContentFunction; - - public ConfigBindingServiceJsonSupplier(final Function> fetchUrlContentFunction) { - this.fetchUrlContentFunction = fetchUrlContentFunction; - } - - public ConfigBindingServiceJsonSupplier() { - fetchUrlContentFunction = (String s) -> new StringToURLFunction().apply(s).flatMap(new URLToHttpGetFunction()); - } - - @Override - public Optional get() { - - logger.info("Consul Host Environment Variable: {}", - ConfigBindingServiceConstants.CONSUL_HOST_ENV_VARIABLE_VALUE); - logger.info("Config Binding Service Environment Variable: {}", - ConfigBindingServiceConstants.CONFIG_BINDING_SERVICE_ENV_VARIABLE_VALUE); - logger.info("Service Name Environment Variable: {}", - ConfigBindingServiceConstants.SERVICE_NAME_ENV_VARIABLE_VALUE); - - if (ConfigBindingServiceConstants.CONSUL_HOST_ENV_VARIABLE_VALUE == null || - ConfigBindingServiceConstants.CONFIG_BINDING_SERVICE_ENV_VARIABLE_VALUE == null || - ConfigBindingServiceConstants.SERVICE_NAME_ENV_VARIABLE_VALUE == null) { - logger.error("Environment variables required to query Config Binding Service are not present"); - return Optional.empty(); - } - - return Optional.of(ConfigBindingServiceConstants.CONSUL_QUERY_URL_STRING) - // Step 1: Query CONSUL to get the IP/PORT of CONFIG BINDING SERVICE - .flatMap(fetchUrlContentFunction) - // Step 2: Fetch the generated configurations from CONFIG BINDING SERVICE - .flatMap(ConfigBindingServiceJsonSupplier::parseConsulConfigBindingServiceQueryResponseJson) - // Step 3: create url from service address and service port - .flatMap(ConfigBindingServiceJsonSupplier::createConfigServiceURL) - // Step 4: Fetch final config binding service generated application configuration json string - .flatMap(fetchUrlContentFunction); - } - - /** - * Creates URL using config binding service ip address and port - * - * @param consulConfigBindingServiceQueryResponse consul config binding service query response containing config - * binding service address and service port - * - * @return config service url to fetch service configuration - */ - private static Optional createConfigServiceURL(final ConsulConfigBindingServiceQueryResponse - consulConfigBindingServiceQueryResponse) { - final String configBindingServiceAddress = consulConfigBindingServiceQueryResponse.getServiceAddress(); - final Integer configServicePort = consulConfigBindingServiceQueryResponse.getServicePort(); - - if (configBindingServiceAddress == null && configServicePort == null) { - logger.error("Config Binding Service Address & Port are not present."); - return Optional.empty(); - } - - return Optional.of(String.format(ConfigBindingServiceConstants.CONFIG_SERVICE_QUERY_URL_STRING, - configBindingServiceAddress, configServicePort, - ConfigBindingServiceConstants.SERVICE_NAME_ENV_VARIABLE_VALUE)); - - } - - private static Optional - parseConsulConfigBindingServiceQueryResponseJson(final String configBindingServiceQueryResponseJson) { - // parse json - final Optional> configBindingServiceQueryResponseOptional = - AnalyticsModelJsonConversion.CONFIG_BINDING_SERVICE_LIST_JSON_FUNCTION - .apply(configBindingServiceQueryResponseJson); - - // check parsing is successful and at least 1 config binding query response is present - if (!configBindingServiceQueryResponseOptional.isPresent() || - configBindingServiceQueryResponseOptional.get().isEmpty()) { - logger.error("No Consul config binding service information found in JSON: {} ", - configBindingServiceQueryResponseJson); - return Optional.empty(); - } - - // return first consul query response - return Optional.of(configBindingServiceQueryResponseOptional.get().get(0)); - } - - -} -- cgit 1.2.3-korg