aboutsummaryrefslogtreecommitdiffstats
path: root/prh-app-server/src/main/java
diff options
context:
space:
mode:
authorkurczews <krzysztof.kurczewski@nokia.com>2019-03-25 09:36:25 +0100
committerkurczews <krzysztof.kurczewski@nokia.com>2019-03-26 12:10:27 +0100
commitcec9b3deab76cc7f69ef03fc7fb538f386581f4b (patch)
tree47f71fb35b59ef0d4cc89720d70374a3eb88de80 /prh-app-server/src/main/java
parent7298679486cd1311f309a5dcbed528ef3c3c246b (diff)
Support for BBS logical link
Issue-ID: DCAEGEN2-1362 Change-Id: I9dbe7c941d9b48e0cac16be9d3410855c51ef4b0 Signed-off-by: kurczews <krzysztof.kurczewski@nokia.com>
Diffstat (limited to 'prh-app-server/src/main/java')
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiFailureException.java28
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/BbsActionsTask.java145
-rw-r--r--prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java19
3 files changed, 188 insertions, 4 deletions
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiFailureException.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiFailureException.java
new file mode 100644
index 00000000..6741bb2d
--- /dev/null
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/exceptions/AaiFailureException.java
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2019 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.exceptions;
+
+public class AaiFailureException extends PrhTaskException {
+
+ public AaiFailureException(String message) {
+ super(message);
+ }
+}
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/BbsActionsTask.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/BbsActionsTask.java
new file mode 100644
index 00000000..755d1282
--- /dev/null
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/BbsActionsTask.java
@@ -0,0 +1,145 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2019 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.tasks;
+
+import static org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpMethod.PUT;
+
+import com.google.gson.JsonObject;
+import io.netty.buffer.ByteBuf;
+import io.vavr.collection.HashMap;
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Function;
+import org.onap.dcaegen2.services.prh.configuration.Config;
+import org.onap.dcaegen2.services.prh.exceptions.AaiFailureException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.model.bbs.ImmutableLogicalLink;
+import org.onap.dcaegen2.services.prh.model.bbs.ImmutableRelationship;
+import org.onap.dcaegen2.services.prh.model.bbs.ImmutableRelationshipWrapper;
+import org.onap.dcaegen2.services.prh.model.bbs.RelationshipWrapper;
+import org.onap.dcaegen2.services.prh.model.utils.GsonSerializer;
+import org.onap.dcaegen2.services.prh.model.utils.HttpUtils;
+import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.HttpResponse;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.ImmutableHttpRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RequestBody;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.RxHttpClient;
+import org.onap.dcaegen2.services.sdk.rest.services.uri.URI.URIBuilder;
+import org.reactivestreams.Publisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import reactor.core.publisher.Mono;
+
+@Component
+public class BbsActionsTask {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(BbsActionsTask.class);
+ private static final String ATTACHMENT_POINT = "attachmentPoint";
+ private static final String LOGICAL_LINK_URI = "/network/logical-links/logical-link/";
+ private static final String PNF_URI = "/network/pnfs/pnf/";
+
+ private final AaiClientConfiguration aaiConfig;
+ private final RxHttpClient httpClient;
+
+ @Autowired
+ BbsActionsTask(Config config) {
+ this(config, RxHttpClient.create());
+ }
+
+ BbsActionsTask(Config config, RxHttpClient httpClient) {
+ this.aaiConfig = config.getAaiClientConfiguration();
+ this.httpClient = httpClient;
+ }
+
+ public Mono<ConsumerDmaapModel> execute(ConsumerDmaapModel consumerDmaapModel) {
+ JsonObject additionalFields = consumerDmaapModel.getAdditionalFields();
+ if (additionalFields == null || !additionalFields.has(ATTACHMENT_POINT)) {
+ return Mono.just(consumerDmaapModel);
+ }
+ String linkName = additionalFields.get(ATTACHMENT_POINT).getAsString();
+ if (linkName.isEmpty()) {
+ LOGGER.warn("Attachment point is empty! Ignore related actions.");
+ return Mono.just(consumerDmaapModel);
+ }
+ String pnfName = consumerDmaapModel.getCorrelationId();
+ return createLogicalLinkInAai(linkName, pnfName).flatMap(handleResponse(consumerDmaapModel));
+ }
+
+ private Function<HttpResponse, Mono<ConsumerDmaapModel>> handleResponse(ConsumerDmaapModel consumerDmaapModel) {
+ return response -> HttpUtils.isSuccessfulResponseCode(response.statusCode())
+ ? Mono.just(consumerDmaapModel)
+ : Mono.error(new AaiFailureException(
+ "Incorrect response when performing BBS-related actions: " + response.statusCode()));
+ }
+
+ private Mono<HttpResponse> createLogicalLinkInAai(String linkName, String pnfName) {
+ ImmutableHttpRequest request = buildLogicalLinkRequest(linkName, pnfName);
+
+ return httpClient.call(request);
+ }
+
+ private ImmutableHttpRequest buildLogicalLinkRequest(String linkName, String pnfName) {
+ String uri = buildLogicalLinkUri(linkName);
+ ImmutableLogicalLink logicalLink = buildModel(linkName, pnfName);
+ Publisher<ByteBuf> jsonPayload = RequestBody.fromString(GsonSerializer.createJsonBody(logicalLink));
+
+ return ImmutableHttpRequest
+ .builder()
+ .method(PUT)
+ .url(uri)
+ .body(jsonPayload)
+ .customHeaders(HashMap.ofAll(aaiConfig.aaiHeaders()))
+ .build();
+ }
+
+ private ImmutableLogicalLink buildModel(String linkName, String pnfName) {
+ List<RelationshipWrapper> relationships = buildRelationLink(pnfName);
+
+ return ImmutableLogicalLink
+ .builder()
+ .linkName(linkName)
+ .linkType(ATTACHMENT_POINT)
+ .relationshipList(relationships)
+ .build();
+ }
+
+ private List<RelationshipWrapper> buildRelationLink(String pnfName) {
+ return Arrays.asList(ImmutableRelationshipWrapper
+ .builder()
+ .relationship(ImmutableRelationship
+ .builder()
+ .relatedLink(PNF_URI + pnfName)
+ .build())
+ .build());
+ }
+
+ private String buildLogicalLinkUri(String linkName) {
+ return new URIBuilder()
+ .scheme(aaiConfig.aaiProtocol())
+ .host(aaiConfig.aaiHost())
+ .port(aaiConfig.aaiPort())
+ .path(aaiConfig.aaiBasePath() + LOGICAL_LINK_URI + linkName)
+ .build()
+ .toString();
+ }
+} \ No newline at end of file
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
index 6ae8a3c7..16a6f8c5 100644
--- a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
+++ b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
@@ -54,6 +54,7 @@ public class ScheduledTasks {
private final DmaapConsumerTask dmaapConsumerTask;
private final DmaapPublisherTask dmaapProducerTask;
private final AaiProducerTask aaiProducerTask;
+ private final BbsActionsTask bbsActionsTask;
private Map<String, String> mdcContextMap;
/**
@@ -64,11 +65,16 @@ public class ScheduledTasks {
* @param aaiPublisherTask - second task
*/
@Autowired
- public ScheduledTasks(DmaapConsumerTask dmaapConsumerTask, DmaapPublisherTask dmaapPublisherTask,
- AaiProducerTask aaiPublisherTask, Map<String, String> mdcContextMap) {
+ public ScheduledTasks(
+ DmaapConsumerTask dmaapConsumerTask,
+ DmaapPublisherTask dmaapPublisherTask,
+ AaiProducerTask aaiPublisherTask,
+ BbsActionsTask bbsActionsTask,
+ Map<String, String> mdcContextMap) {
this.dmaapConsumerTask = dmaapConsumerTask;
this.dmaapProducerTask = dmaapPublisherTask;
this.aaiProducerTask = aaiPublisherTask;
+ this.bbsActionsTask = bbsActionsTask;
this.mdcContextMap = mdcContextMap;
}
@@ -88,6 +94,9 @@ public class ScheduledTasks {
.doOnError(exception ->
logger.warn("AAIProducerTask exception has been registered: ", exception))
.onErrorResume(resumePrhPredicate(), exception -> Mono.empty())
+ .flatMap(this::processAdditionalFields)
+ .doOnError(exception ->
+ logger.warn("BBSActionsTask exception has been registered: ", exception))
.flatMap(this::publishToDmaapConfiguration)
.doOnError(exception ->
logger.warn("DMaaPProducerTask exception has been registered: ", exception))
@@ -102,7 +111,6 @@ public class ScheduledTasks {
}
}
-
private void onComplete() {
logger.info("PRH tasks have been completed");
}
@@ -121,7 +129,6 @@ public class ScheduledTasks {
}
}
-
private Flux<ConsumerDmaapModel> consumeFromDMaaPMessage() {
return Flux.defer(() -> {
MdcVariables.setMdcContextMap(mdcContextMap);
@@ -148,6 +155,10 @@ public class ScheduledTasks {
}
}
+ private Mono<ConsumerDmaapModel> processAdditionalFields(ConsumerDmaapModel consumerDmaapModel) {
+ return bbsActionsTask.execute(consumerDmaapModel);
+ }
+
private Mono<HttpClientResponse> publishToDmaapConfiguration(ConsumerDmaapModel monoAaiModel) {
try {
return dmaapProducerTask.execute(monoAaiModel);