diff options
Diffstat (limited to 'rest-services')
12 files changed, 359 insertions, 20 deletions
diff --git a/rest-services/cbs-client/pom.xml b/rest-services/cbs-client/pom.xml index 02bfb75e..071763c5 100644 --- a/rest-services/cbs-client/pom.xml +++ b/rest-services/cbs-client/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.onap.dcaegen2.services.sdk</groupId> <artifactId>dcaegen2-services-sdk-rest-services</artifactId> - <version>1.8.4-SNAPSHOT</version> + <version>1.8.5-SNAPSHOT</version> </parent> <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId> diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/CbsClientFactory.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/CbsClientFactory.java index f1e49bb7..00dbf8a0 100644 --- a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/CbsClientFactory.java +++ b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/CbsClientFactory.java @@ -3,6 +3,7 @@ * DCAEGEN2-SERVICES-SDK * ================================================================================ * Copyright (C) 2019-2021 Nokia. All rights reserved. + * Copyright (C) 2021 Wipro Limited. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,7 +68,8 @@ public class CbsClientFactory { private static Mono<CbsClient> createCbsClientMono(RxHttpClient httpClient, CbsClientConfiguration configuration) { - CbsClientConfigMap cbsClientConfigMap = new CbsClientConfigMap(configuration.configMapFilePath()); + CbsClientConfigMap cbsClientConfigMap = new CbsClientConfigMap(configuration.configMapFilePath(), + configuration.policySyncFilePath(), configuration.appName()); return cbsClientConfigMap.verifyConfigMapFile() ? Mono.just(cbsClientConfigMap) : getConfigFromCBS(httpClient, configuration); } @@ -76,4 +78,4 @@ public class CbsClientFactory { return new CbsLookup().lookup(configuration) .map(addr ->new CbsClientRest(httpClient, configuration.appName(), addr, configuration.protocol())); } -}
\ No newline at end of file +} diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMap.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMap.java index 42f53616..75577318 100644 --- a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMap.java +++ b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMap.java @@ -3,6 +3,7 @@ * DCAEGEN2-SERVICES-SDK * ================================================================================ * Copyright (C) 2021 Nokia. All rights reserved. + * Copyright (C) 2021 Wipro Limited. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,11 +18,15 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; + +import java.util.LinkedHashMap; + import org.jetbrains.annotations.NotNull; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsRequest; @@ -30,23 +35,33 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; import reactor.core.publisher.Mono; -import java.util.LinkedHashMap; public class CbsClientConfigMap implements CbsClient { private static final Logger LOGGER = LoggerFactory.getLogger(CbsClientConfigMap.class); private final String configMapFilePath; + private String policySyncFilePath = ""; + private String appName = ""; + public CbsClientConfigMap(String configMapFilePath) { + this.configMapFilePath = configMapFilePath; + } - public CbsClientConfigMap (String configMapFilePath) { + public CbsClientConfigMap(String configMapFilePath, String policySyncFilePath, String appName) { this.configMapFilePath = configMapFilePath; + this.policySyncFilePath = policySyncFilePath; + this.appName = appName; } @Override public @NotNull Mono<JsonObject> get(CbsRequest request) { - return Mono.just(this.loadConfigMapFile()) - .map(CbsClientEnvironmentParsing::processEnvironmentVariables) - .doOnNext(this::logConfigMapOutput); + Mono<JsonObject> configJsonMono = + Mono.just(this.loadConfigMapFile()).map(CbsClientEnvironmentParsing::processEnvironmentVariables); + if (this.shouldReadPolicySyncFile(request)) { + + return configJsonMono.map(this::loadPolicySyncFile).doOnNext(this::logConfigMapOutput); + } + return configJsonMono.doOnNext(this::logConfigMapOutput); } public boolean verifyConfigMapFile() { @@ -54,7 +69,7 @@ public class CbsClientConfigMap implements CbsClient { LOGGER.info("Trying to load configuration from configMap file: {}", configMapFilePath); this.loadConfigMapFile().isJsonObject(); return true; - } catch(Exception ex) { + } catch (Exception ex) { this.logConfigMapError(ex); return false; } @@ -69,8 +84,6 @@ public class CbsClientConfigMap implements CbsClient { return new Yaml().load(new FileReader(configMapFilePath).getContent()); } - - private void logConfigMapOutput(JsonObject jsonObject) { LOGGER.info("Got successful output from ConfigMap file"); LOGGER.debug("ConfigMap output: {}", jsonObject); @@ -79,4 +92,44 @@ public class CbsClientConfigMap implements CbsClient { private void logConfigMapError(Exception ex) { LOGGER.error("Error loading configuration from configMap file: {}", ex.getMessage()); } -}
\ No newline at end of file + + private boolean shouldReadPolicySyncFile(CbsRequest request) { + try { + return request.requestPath() + .getForService(appName) + .contains("service_component_all"); + } catch (Exception ex) { + LOGGER.error("Error finding requestPath", ex.getMessage()); + return false; + } + } + + private JsonObject loadPolicySyncFile(JsonObject configJsonObject) { + + try { + + if (new FileReader(policySyncFilePath).doesFileExists()) { + LOGGER.info("PolicySync file is present"); + Gson gson = new GsonBuilder().create(); + JsonObject policyJsonObject = gson.fromJson(this.loadJsonStringPolicySyncFile(), JsonObject.class); + policyJsonObject.add("config", configJsonObject); + return policyJsonObject; + } + LOGGER.info("PolicySync file does not exist"); + JsonObject policyJsonObject = new JsonObject(); + policyJsonObject.add("config", configJsonObject); + return policyJsonObject; + + } catch (Exception ex) { + LOGGER.error("PolicySync file does not contain a valid json"); + JsonObject policyJsonObject = new JsonObject(); + policyJsonObject.add("config", configJsonObject); + return policyJsonObject; + } + + } + + private String loadJsonStringPolicySyncFile() { + return new FileReader(policySyncFilePath).getContent(); + } +} diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/model/CbsClientConfiguration.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/model/CbsClientConfiguration.java index 0a3b9657..41848855 100644 --- a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/model/CbsClientConfiguration.java +++ b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/model/CbsClientConfiguration.java @@ -3,6 +3,7 @@ * DCAEGEN2-SERVICES-SDK * ========================================================= * Copyright (C) 2019-2021 Nokia. All rights reserved. + * Copyright (C) 2021 Wipro Limited. * ========================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -130,6 +131,10 @@ public interface CbsClientConfiguration { default String configMapFilePath() { return "/app-config/application_config.yaml"; } + @Value.Default + default String policySyncFilePath() { + return "/etc/policies/policies.json"; + } /** * Creates CbsClientConfiguration from system environment variables. diff --git a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMapTest.java b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMapTest.java index a9d8407b..aa5655fc 100644 --- a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMapTest.java +++ b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsClientConfigMapTest.java @@ -3,6 +3,7 @@ * DCAEGEN2-SERVICES-SDK * ========================================================= * Copyright (C) 2021 Nokia. All rights reserved. + * Copyright (C) 2021 Wipro Limited. * ========================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,25 +18,31 @@ * limitations under the License. * ============LICENSE_END===================================== */ + package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl; +import static org.assertj.core.api.Assertions.assertThat; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.stream.JsonReader; + +import java.io.FileNotFoundException; +import java.io.FileReader; + import org.junit.Rule; import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.junit.jupiter.api.Test; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsClient; import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests; import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext; -import java.io.FileNotFoundException; -import java.io.FileReader; -import static org.assertj.core.api.Assertions.assertThat; public class CbsClientConfigMapTest { private static final String SAMPLE_EXPECTED_CONFIG = "src/test/resources/sample_expected_service_config.json"; + private static final String SAMPLE_EXPECTED_POLICY_CONFIG = "src/test/resources/sample_expected_policy_config.json"; + private static final String SAMPLE_EXPECTED_ALL_CONFIG = "src/test/resources/sample_expected_all_config.json"; @Rule public final EnvironmentVariables envs = new EnvironmentVariables(); @@ -45,7 +52,9 @@ public class CbsClientConfigMapTest { envs.set("AAF_USER", "admin"); envs.set("AAF_PASSWORD", "admin_secret"); String configMapFilePath = "src/test/resources/application_config.yaml"; - final CbsClient cut = new CbsClientConfigMap(configMapFilePath); + String policySyncFilePath = "src/test/resources/policies.json"; + String requestPath = "/service_component/app-name"; + final CbsClient cut = new CbsClientConfigMap(configMapFilePath, policySyncFilePath, requestPath); RequestDiagnosticContext diagnosticContext = RequestDiagnosticContext.create(); @@ -57,8 +66,49 @@ public class CbsClientConfigMapTest { assertThat(result).isEqualTo(convertToJson(new JsonReader(new FileReader(SAMPLE_EXPECTED_CONFIG)))); } + @Test + void shouldFetchUsingConfigMapFileAndPolicySyncFile() throws FileNotFoundException { + // given + envs.set("AAF_USER", "admin"); + envs.set("AAF_PASSWORD", "admin_secret"); + String configMapFilePath = "src/test/resources/application_config.yaml"; + String policySyncFilePath = "src/test/resources/policies.json"; + String requestPath = "/service_component_all/app-name"; + final CbsClient cut = new CbsClientConfigMap(configMapFilePath, policySyncFilePath, requestPath); + + RequestDiagnosticContext diagnosticContext = RequestDiagnosticContext.create(); + + // when + final JsonObject result = cut.get(CbsRequests.getConfiguration(diagnosticContext)).block(); + + // then + assertThat(result).isNotNull(); + assertThat(result).isEqualTo(convertToJson(new JsonReader(new FileReader(SAMPLE_EXPECTED_POLICY_CONFIG)))); + } + + @Test + void shouldFetchUsingConfigMapFileWhenPolicySyncFileAbsent() throws FileNotFoundException { + // given + envs.set("AAF_USER", "admin"); + envs.set("AAF_PASSWORD", "admin_secret"); + String configMapFilePath = "src/test/resources/application_config.yaml"; + String policySyncFilePath = ""; + String requestPath = "/service_component_all/app-name"; + final CbsClient cut = new CbsClientConfigMap(configMapFilePath, policySyncFilePath, requestPath); + + RequestDiagnosticContext diagnosticContext = RequestDiagnosticContext.create(); + + // when + final JsonObject result = cut.get(CbsRequests.getConfiguration(diagnosticContext)).block(); + + // then + assertThat(result).isNotNull(); + assertThat(result).isEqualTo(convertToJson(new JsonReader(new FileReader(SAMPLE_EXPECTED_ALL_CONFIG)))); + } + private JsonObject convertToJson(JsonReader jsonReader) { Gson gson = new GsonBuilder().create(); return gson.fromJson(jsonReader, JsonObject.class); } } + diff --git a/rest-services/cbs-client/src/test/resources/policies.json b/rest-services/cbs-client/src/test/resources/policies.json new file mode 100644 index 00000000..657cdbe9 --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/policies.json @@ -0,0 +1,58 @@ +{ + "policies":{ + "items":[ + { + "type":"onap.policies.monitoring.tcagen2", + "type_version":"1.0.0", + "name":"onap.vfirewall.tca", + "version":"1.0.0", + "metadata":{ + "policy-id":"onap.vfirewall.tca", + "policy-version":"1.0.0" + }, + "policyName":"onap.vfirewall.tca.1-0-0.xml", + "policyVersion":"1.0.0", + "config":{ + "tca.policy":{ + "domain":"measurementsForVfScaling", + "metricsPerEventName":[ + { + "eventName":"vFirewallBroadcastPackets", + "controlLoopSchemaType":"VM", + "policyScope":"DCAE", + "policyName":"DCAE.Config_tca-hi-lo", + "policyVersion":"v0.0.1", + "thresholds":[ + { + "closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "version":"1.0.2", + "fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "thresholdValue":300, + "direction":"LESS_OR_EQUAL", + "severity":"MAJOR", + "closedLoopEventStatus":"ONSET" + }, + { + "closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "version":"1.0.2", + "fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "thresholdValue":700, + "direction":"GREATER_OR_EQUAL", + "severity":"CRITICAL", + "closedLoopEventStatus":"ONSET" + } + ] + } + ] + } + } + } + ] + }, + "event":{ + "action":"gathered", + "timestamp":"2021-04-19T23:37:19.709Z", + "update_id":"379fb01a-cfe2-4c06-8f6b-d51f3c8504af", + "policies_count":1 + } +} diff --git a/rest-services/cbs-client/src/test/resources/sample_expected_all_config.json b/rest-services/cbs-client/src/test/resources/sample_expected_all_config.json new file mode 100644 index 00000000..641c4817 --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/sample_expected_all_config.json @@ -0,0 +1,54 @@ +{ + "config": { + "keystore.path": "/var/run/security/keystore.p12", + "streams_publishes": { + "perf3gpp": { + "testArray": [ + { + "testPrimitiveArray": ["admin", "admin_secret", {"nestedArray": ["admin"]}], + "testPrimitive": "admin", + "aaf_credentials": { + "username": "admin", + "password": "admin_secret" + } + } + ], + "type": "kafka", + "kafka_info": { + "bootstrap_servers": "dmaap-mr-kafka:6060", + "topic_name": "HVVES_PERF3GPP" + } + }, + "pnf_ready": { + "aaf_credentials": { + "username": "admin", + "password": "admin_secret" + }, + "type": "message_router", + "dmaap_info": { + "topic_url": "http://message-router:3904/events/VES_PNF_READY" + } + }, + "call_trace": { + "aaf_credentials": { + "username": "admin", + "password": "admin_secret" + }, + "type": "kafka", + "kafka_info": { + "bootstrap_servers": "dmaap-mr-kafka:6060", + "topic_name": "HVVES_TRACE" + } + } + }, + "streams_subscribes": { + "measurements": { + "type": "message_router", + "dmaap_info": { + "topic_url": "http://message-router:3904/events/VES_MEASUREMENT" + } + } + } + } +} + diff --git a/rest-services/cbs-client/src/test/resources/sample_expected_policy_config.json b/rest-services/cbs-client/src/test/resources/sample_expected_policy_config.json new file mode 100644 index 00000000..aeb3ca32 --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/sample_expected_policy_config.json @@ -0,0 +1,117 @@ +{ + "policies":{ + "items":[ + { + "type":"onap.policies.monitoring.tcagen2", + "type_version":"1.0.0", + "name":"onap.vfirewall.tca", + "version":"1.0.0", + "metadata":{ + "policy-id":"onap.vfirewall.tca", + "policy-version":"1.0.0" + }, + "policyName":"onap.vfirewall.tca.1-0-0.xml", + "policyVersion":"1.0.0", + "config":{ + "tca.policy":{ + "domain":"measurementsForVfScaling", + "metricsPerEventName":[ + { + "eventName":"vFirewallBroadcastPackets", + "controlLoopSchemaType":"VM", + "policyScope":"DCAE", + "policyName":"DCAE.Config_tca-hi-lo", + "policyVersion":"v0.0.1", + "thresholds":[ + { + "closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "version":"1.0.2", + "fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "thresholdValue":300, + "direction":"LESS_OR_EQUAL", + "severity":"MAJOR", + "closedLoopEventStatus":"ONSET" + }, + { + "closedLoopControlName":"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a", + "version":"1.0.2", + "fieldPath":"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta", + "thresholdValue":700, + "direction":"GREATER_OR_EQUAL", + "severity":"CRITICAL", + "closedLoopEventStatus":"ONSET" + } + ] + } + ] + } + } + } + ] + }, + "event":{ + "action":"gathered", + "timestamp":"2021-04-19T23:37:19.709Z", + "update_id":"379fb01a-cfe2-4c06-8f6b-d51f3c8504af", + "policies_count":1 + }, + "config":{ + "keystore.path":"/var/run/security/keystore.p12", + "streams_publishes":{ + "perf3gpp":{ + "testArray":[ + { + "testPrimitiveArray":[ + "admin", + "admin_secret", + { + "nestedArray":[ + "admin" + ] + } + ], + "testPrimitive":"admin", + "aaf_credentials":{ + "username":"admin", + "password":"admin_secret" + } + } + ], + "type":"kafka", + "kafka_info":{ + "bootstrap_servers":"dmaap-mr-kafka:6060", + "topic_name":"HVVES_PERF3GPP" + } + }, + "pnf_ready":{ + "aaf_credentials":{ + "username":"admin", + "password":"admin_secret" + }, + "type":"message_router", + "dmaap_info":{ + "topic_url":"http://message-router:3904/events/VES_PNF_READY" + } + }, + "call_trace":{ + "aaf_credentials":{ + "username":"admin", + "password":"admin_secret" + }, + "type":"kafka", + "kafka_info":{ + "bootstrap_servers":"dmaap-mr-kafka:6060", + "topic_name":"HVVES_TRACE" + } + } + }, + "streams_subscribes":{ + "measurements":{ + "type":"message_router", + "dmaap_info":{ + "topic_url":"http://message-router:3904/events/VES_MEASUREMENT" + } + } + } + } +} diff --git a/rest-services/dmaap-client/pom.xml b/rest-services/dmaap-client/pom.xml index cb1d811f..f3a612a6 100644 --- a/rest-services/dmaap-client/pom.xml +++ b/rest-services/dmaap-client/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.onap.dcaegen2.services.sdk</groupId> <artifactId>dcaegen2-services-sdk-rest-services</artifactId> - <version>1.8.4-SNAPSHOT</version> + <version>1.8.5-SNAPSHOT</version> </parent> <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId> diff --git a/rest-services/http-client/pom.xml b/rest-services/http-client/pom.xml index ffb93b3c..3669aabe 100644 --- a/rest-services/http-client/pom.xml +++ b/rest-services/http-client/pom.xml @@ -28,7 +28,7 @@ <parent> <groupId>org.onap.dcaegen2.services.sdk</groupId> <artifactId>dcaegen2-services-sdk-rest-services</artifactId> - <version>1.8.4-SNAPSHOT</version> + <version>1.8.5-SNAPSHOT</version> </parent> <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId> diff --git a/rest-services/model/pom.xml b/rest-services/model/pom.xml index 0c009030..ea018c1f 100644 --- a/rest-services/model/pom.xml +++ b/rest-services/model/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>org.onap.dcaegen2.services.sdk</groupId> <artifactId>dcaegen2-services-sdk-rest-services</artifactId> - <version>1.8.4-SNAPSHOT</version> + <version>1.8.5-SNAPSHOT</version> </parent> <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId> diff --git a/rest-services/pom.xml b/rest-services/pom.xml index ddc6c25e..e4190868 100644 --- a/rest-services/pom.xml +++ b/rest-services/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.onap.dcaegen2.services</groupId> <artifactId>sdk</artifactId> - <version>1.8.4-SNAPSHOT</version> + <version>1.8.5-SNAPSHOT</version> </parent> <groupId>org.onap.dcaegen2.services.sdk</groupId> |