summaryrefslogtreecommitdiffstats
path: root/participant/participant-impl
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2021-06-15 13:43:54 +0000
committerGerrit Code Review <gerrit@onap.org>2021-06-15 13:43:54 +0000
commit399e86d983057304673f701a22b172a69d5aa7dc (patch)
tree6faf2b7c40c62b890d28ba76b054f4bafe564642 /participant/participant-impl
parente1f7d046af9845f6cd0cff97f3f91f2a7b0aa454 (diff)
parent0655a5a4adad158173fcbac1ab02e21a2c2cb18c (diff)
Merge "Make policy participant interact with Policy API"
Diffstat (limited to 'participant/participant-impl')
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/AbstractHttpClient.java75
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyApiHttpClient.java84
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java16
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java27
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java4
-rw-r--r--participant/participant-impl/participant-impl-policy/src/main/resources/config/PolicyParticipantConfig.json66
-rw-r--r--participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestParameters.json16
7 files changed, 228 insertions, 60 deletions
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/AbstractHttpClient.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/AbstractHttpClient.java
new file mode 100644
index 000000000..4b6686156
--- /dev/null
+++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/AbstractHttpClient.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.controlloop.participant.policy.client;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
+import org.onap.policy.common.endpoints.http.client.HttpClient;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractHttpClient implements Closeable {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AbstractHttpClient.class);
+ private final HttpClient httpclient;
+
+
+ /**
+ * Constructor.
+ */
+ protected AbstractHttpClient(BusTopicParams policyApiParameters) {
+ try {
+ httpclient = HttpClientFactoryInstance.getClientFactory().build(policyApiParameters);
+ } catch (final Exception e) {
+ throw new ControlLoopRuntimeException(Status.INTERNAL_SERVER_ERROR, " Client failed to start", e);
+ }
+ }
+
+ protected Response executePost(String path, final Entity<?> entity) {
+ Response response = httpclient.post(path, entity, Map.of(HttpHeaders.ACCEPT,
+ MediaType.APPLICATION_JSON, HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON));
+ if (response.getStatus() / 100 != 2) {
+ LOGGER.error(
+ "Invocation of path {} failed for entity {}. Response status: {}, Response status info: {}",
+ path, entity, response.getStatus(), response.getStatusInfo());
+ }
+ return response;
+ }
+
+ protected Response executeDelete(String path) {
+ return httpclient.delete(path, Collections.emptyMap());
+ }
+
+ @Override
+ public void close() throws IOException {
+ httpclient.shutdown();
+ }
+} \ No newline at end of file
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyApiHttpClient.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyApiHttpClient.java
new file mode 100644
index 000000000..3d1047ce4
--- /dev/null
+++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyApiHttpClient.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.controlloop.participant.policy.client;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.ParticipantPolicyParameters;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PolicyApiHttpClient extends AbstractHttpClient {
+
+ private static final String POLICY_URI = "/policy/api/v1/";
+
+ /**
+ * Constructor.
+ */
+ public PolicyApiHttpClient(ParticipantPolicyParameters parameters) {
+ super(parameters.getPolicyApiParameters());
+ }
+
+ /**
+ * Create Policy Types.
+ *
+ * @param toscaServiceTemplate the whole ToscaServiceTemplate
+ * @return Response
+ */
+ public Response createPolicyType(ToscaServiceTemplate toscaServiceTemplate) throws PfModelException {
+ return executePost(POLICY_URI + "policytypes", Entity.entity(toscaServiceTemplate, MediaType.APPLICATION_JSON));
+ }
+
+ /**
+ * Create Policies.
+ *
+ * @param toscaServiceTemplate the whole ToscaServiceTemplate
+ * @return Response
+ */
+ public Response createPolicy(final ToscaServiceTemplate toscaServiceTemplate) {
+ return executePost(POLICY_URI + "policies", Entity.entity(toscaServiceTemplate, MediaType.APPLICATION_JSON));
+ }
+
+ /**
+ * Delete Policies.
+ *
+ * @param policyName the name of the policy to be deleted
+ * @param policyVersion the version of the policy to be deleted
+ * @return Response
+ */
+ public Response deletePolicy(final String policyName, final String policyVersion) {
+ return executeDelete(POLICY_URI + "policies/" + policyName + "/versions/" + policyVersion);
+ }
+
+ /**
+ * Delete Policy types.
+ *
+ * @param policyTypeName the name of the policy to be deleted
+ * @param policyTypeVersion the version of the policy to be deleted
+ * @return Response
+ */
+ public Response deletePolicyType(final String policyTypeName, final String policyTypeVersion) {
+ return executeDelete(POLICY_URI + "policytypes/" + policyTypeName + "/versions/" + policyTypeVersion);
+ }
+}
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java
index afef1a5d2..3b8324151 100644
--- a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java
+++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java
@@ -24,9 +24,6 @@ import org.onap.policy.clamp.controlloop.participant.intermediary.api.Participan
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryFactory;
import org.onap.policy.clamp.controlloop.participant.policy.main.handler.ControlLoopElementHandler;
import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.ParticipantPolicyParameters;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.provider.PolicyModelsProvider;
-import org.onap.policy.models.provider.PolicyModelsProviderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -49,17 +46,4 @@ public class ParticipantConfig {
controlLoopElementHandler.setIntermediaryApi(intermediaryApi);
return intermediaryApi;
}
-
- /**
- * Create PolicyModelsProvider.
- *
- * @param parameters the Participant Policy Parameters
- * @return PolicyModelsProvider
- * @throws PfModelException in case of an exception
- */
- @Bean
- public PolicyModelsProvider databaseProvider(ParticipantPolicyParameters parameters) throws PfModelException {
- return new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters.getDatabaseProviderParameters());
- }
-
}
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java
index 5b07568da..1b176f076 100644
--- a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java
+++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java
@@ -32,9 +32,9 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyApiHttpClient;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
@@ -52,7 +52,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
private final Map<String, String> policyTypeMap = new LinkedHashMap<>();
private final Map<String, String> policyMap = new LinkedHashMap<>();
- private final PolicyModelsProvider databaseProvider;
+ private final PolicyApiHttpClient apiHttpClient;
@Setter
private ParticipantIntermediaryApi intermediaryApi;
@@ -60,10 +60,10 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
/**
* constructor.
*
- * @param databaseProvider the Policy Models Provider
+ * @param apiHttpClient the Policy Api Http Client
*/
- public ControlLoopElementHandler(PolicyModelsProvider databaseProvider) {
- this.databaseProvider = databaseProvider;
+ public ControlLoopElementHandler(PolicyApiHttpClient apiHttpClient) {
+ this.apiHttpClient = apiHttpClient;
}
/**
@@ -82,7 +82,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
try {
deletePolicyData(controlLoopElementId, newState);
} catch (PfModelRuntimeException e) {
- LOGGER.debug("Delete policytpes failed", e);
+ LOGGER.debug("Deleting policy data failed", e);
}
break;
case PASSIVE:
@@ -100,12 +100,12 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
private void deletePolicyData(UUID controlLoopElementId, ControlLoopOrderedState newState) throws PfModelException {
// Delete all policies of this controlLoop from policy framework
for (Entry<String, String> policy : policyMap.entrySet()) {
- databaseProvider.deletePolicy(policy.getKey(), policy.getValue());
+ apiHttpClient.deletePolicy(policy.getKey(), policy.getValue());
}
policyMap.clear();
// Delete all policy types of this control loop from policy framework
for (Entry<String, String> policyType : policyTypeMap.entrySet()) {
- databaseProvider.deletePolicyType(policyType.getKey(), policyType.getValue());
+ apiHttpClient.deletePolicyType(policyType.getKey(), policyType.getValue());
}
policyTypeMap.clear();
intermediaryApi.updateControlLoopElementState(controlLoopElementId, newState, ControlLoopState.UNINITIALISED);
@@ -127,17 +127,20 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
for (ToscaPolicyType policyType : controlLoopDefinition.getPolicyTypes().values()) {
policyTypeMap.put(policyType.getName(), policyType.getVersion());
}
- databaseProvider.createPolicyTypes(controlLoopDefinition);
+ LOGGER.debug("Found Policy Types in control loop definition: {} , Creating Policy Types",
+ controlLoopDefinition.getName());
+ apiHttpClient.createPolicyType(controlLoopDefinition);
}
if (controlLoopDefinition.getToscaTopologyTemplate().getPolicies() != null) {
for (Map<String, ToscaPolicy> foundPolicyMap : controlLoopDefinition.getToscaTopologyTemplate()
.getPolicies()) {
- for (Entry<String, ToscaPolicy> policyEntry : foundPolicyMap.entrySet()) {
- ToscaPolicy policy = policyEntry.getValue();
+ for (ToscaPolicy policy : foundPolicyMap.values()) {
policyMap.put(policy.getName(), policy.getVersion());
}
}
- databaseProvider.createPolicies(controlLoopDefinition);
+ LOGGER.debug("Found Policies in control loop definition: {} , Creating Policies",
+ controlLoopDefinition.getName());
+ apiHttpClient.createPolicy(controlLoopDefinition);
}
}
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java
index 13d89faba..490722a45 100644
--- a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java
+++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java
@@ -23,9 +23,9 @@ package org.onap.policy.clamp.controlloop.participant.policy.main.parameters;
import javax.validation.constraints.NotBlank;
import lombok.Getter;
import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
import org.onap.policy.common.parameters.ParameterGroupImpl;
import org.onap.policy.common.parameters.annotations.NotNull;
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;
/**
* Class to hold all parameters needed for the policy participant.
@@ -36,7 +36,7 @@ import org.onap.policy.models.provider.PolicyModelsProviderParameters;
@Getter
public class ParticipantPolicyParameters extends ParameterGroupImpl {
private ParticipantIntermediaryParameters intermediaryParameters;
- private PolicyModelsProviderParameters databaseProviderParameters;
+ private BusTopicParams policyApiParameters;
/**
* Create the policy participant parameter group.
diff --git a/participant/participant-impl/participant-impl-policy/src/main/resources/config/PolicyParticipantConfig.json b/participant/participant-impl/participant-impl-policy/src/main/resources/config/PolicyParticipantConfig.json
index e6b3c8eb1..bf458fae9 100644
--- a/participant/participant-impl/participant-impl-policy/src/main/resources/config/PolicyParticipantConfig.json
+++ b/participant/participant-impl/participant-impl-policy/src/main/resources/config/PolicyParticipantConfig.json
@@ -1,31 +1,53 @@
{
- "name":"ParticipantParameterGroup",
- "participantStatusParameters":{
- "timeIntervalMs":10000,
- "description":"Participant Status",
- "participantId":{
- "name": "PolicyParticipant0",
- "version":"1.0.0"
- },
+ "name": "ControlLoopParticipantGroup",
+ "intermediaryParameters": {
+ "name": "Participant parameters",
+ "reportingTimeInterval": 120000,
+ "description": "Participant Description",
"participantType":{
"name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
"version":"2.3.1"
},
- "participantDefinition":{
- "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
- "version":"2.3.1"
+ "participantId": {
+ "name": "org.onap.PM_Policy",
+ "version": "1.0.0"
+ },
+ "clampControlLoopTopics": {
+ "topicSources": [
+ {
+ "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+ "servers": [
+ "message-router"
+ ],
+ "topicCommInfrastructure": "dmaap",
+ "fetchTimeout": 15000
+ }
+ ],
+ "topicSinks": [
+ {
+ "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+ "servers": [
+ "message-router"
+ ],
+ "topicCommInfrastructure": "dmaap"
+ },
+ {
+ "topic": "POLICY-NOTIFICATION",
+ "servers": [
+ "message-router"
+ ],
+ "topicCommInfrastructure": "dmaap"
+ }
+ ]
}
},
- "topicParameterGroup": {
- "topicSources" : [{
- "topic" : "POLICY-CLRUNTIME-PARTICIPANT",
- "servers" : [ "127.0.0.1:3904" ],
- "topicCommInfrastructure" : "dmaap"
- }],
- "topicSinks" : [{
- "topic" : "POLICY-CLRUNTIME-PARTICIPANT",
- "servers" : [ "127.0.0.1:3904" ],
- "topicCommInfrastructure" : "dmaap"
- }]
+ "policyApiParameters": {
+ "clientName": "api",
+ "hostname": "policy-api",
+ "port": "6969",
+ "userName": "healthcheck",
+ "password": "zb!XztG34",
+ "https": true,
+ "allowSelfSignedCerts": true
}
}
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestParameters.json b/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestParameters.json
index 30250be68..024f72d6d 100644
--- a/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestParameters.json
+++ b/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestParameters.json
@@ -41,13 +41,13 @@
]
}
},
- "databaseProviderParameters": {
- "name": "PolicyProviderParameterGroup",
- "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl",
- "databaseDriver": "org.h2.Driver",
- "databaseUrl": "jdbc:h2:mem:testdb",
- "databaseUser": "policy",
- "databasePassword": "P01icY",
- "persistenceUnit": "ToscaConceptTest"
+ "policyApiParameters": {
+ "clientName": "api",
+ "hostname": "localhost",
+ "port": "6969",
+ "userName": "healthcheck",
+ "password": "zb!XztG34",
+ "https": false,
+ "allowSelfSignedCerts": true
}
}