summaryrefslogtreecommitdiffstats
path: root/participant
diff options
context:
space:
mode:
authorSirisha_Manchikanti <sirisha.manchikanti@est.tech>2021-08-03 17:49:00 +0100
committerSirisha_Manchikanti <sirisha.manchikanti@est.tech>2021-08-04 14:35:55 +0100
commit2c094b95c86f3315e359d971fbfa0ad60d173053 (patch)
treebd4b33f1e28ad3fad8769b3a36a51e4f89a63dea /participant
parent055fa4ad38a11bb5890b6e0ea280e9b96a1b2a39 (diff)
Update controlloop messages
Updated controlloop messages according to https://wiki.onap.org/display/DW/The+CLAMP+Control+Loop+Participant+Protocol Issue-ID: POLICY-3417 Signed-off-by: Sirisha_Manchikanti <sirisha.manchikanti@est.tech> Change-Id: Ied32ea5bb63a6b69286d03f1a7b2b86e3acad7a7
Diffstat (limited to 'participant')
-rw-r--r--participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java24
-rw-r--r--participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java65
-rw-r--r--participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java25
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java61
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java11
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantStatusReqListener.java (renamed from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantHealthCheckListener.java)10
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java71
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java6
-rw-r--r--participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java40
9 files changed, 169 insertions, 144 deletions
diff --git a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
index bb1021db6..136d0e500 100644
--- a/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
+++ b/participant/participant-impl/participant-impl-dcae/src/test/java/org/onap/policy/clamp/controlloop/participant/dcae/main/rest/TestListenerUtils.java
@@ -32,7 +32,6 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantHealthCheck;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
@@ -170,29 +169,6 @@ public class TestListenerUtils {
}
/**
- * Method to create ParticipantHealthCheck message.
- *
- * @return ParticipantHealthCheck message
- */
- public static ParticipantHealthCheck createParticipantHealthCheckMsg() {
- ToscaConceptIdentifier participantId = new ToscaConceptIdentifier();
- participantId.setName("DCAEParticipant0");
- participantId.setVersion("1.0.0");
-
- ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
- controlLoopId.setName("PMSHInstance0");
- controlLoopId.setVersion("1.0.0");
-
- final ParticipantHealthCheck participantHealthCheckMsg = new ParticipantHealthCheck();
- participantHealthCheckMsg.setParticipantId(participantId);
- participantHealthCheckMsg.setControlLoopId(controlLoopId);
- participantHealthCheckMsg.setTimestamp(Instant.now());
- participantHealthCheckMsg.setState(ParticipantState.PASSIVE);
-
- return participantHealthCheckMsg;
- }
-
- /**
* Method to create ControlLoopUpdate using the arguments passed.
*
* @param jsonFilePath the path of the controlloop content
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java
index 093ac190c..aed03556a 100644
--- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java
+++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java
@@ -24,15 +24,22 @@ import static org.assertj.core.api.Assertions.assertThatCode;
import java.time.Instant;
import java.util.Collections;
+import java.util.List;
+import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopStatistics;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseDetails;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
@@ -45,6 +52,7 @@ import org.onap.policy.clamp.controlloop.participant.policy.main.utils.TestListe
import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.endpoints.event.comm.TopicSink;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -146,9 +154,16 @@ class ParticipantMessagesTest {
@Test
void testParticipantStatusHeartbeat() throws Exception {
final ParticipantStatus heartbeat = new ParticipantStatus();
- heartbeat.setMessage("ParticipantStatus message");
- heartbeat.setResponse(new ParticipantResponseDetails());
heartbeat.setParticipantId(getParticipantId());
+ ControlLoopInfo clInfo = getControlLoopInfo(getControlLoopId());
+ heartbeat.setControlLoopInfoMap(Map.of(getControlLoopId(), clInfo));
+
+ ControlLoopElementDefinition clDefinition = getClElementDefinition();
+ Map<UUID, ControlLoopElementDefinition> clElementDefinitionMap = Map.of(UUID.randomUUID(), clDefinition);
+ Map<ToscaConceptIdentifier, Map<UUID, ControlLoopElementDefinition>>
+ participantDefinitionUpdateMap = Map.of(getParticipantId(), clElementDefinitionMap);
+ heartbeat.setParticipantDefinitionUpdateMap(participantDefinitionUpdateMap);
+
synchronized (lockit) {
ParticipantMessagePublisher publisher =
new ParticipantMessagePublisher(Collections.singletonList(Mockito.mock(TopicSink.class)));
@@ -156,7 +171,6 @@ class ParticipantMessagesTest {
}
}
-
private ToscaConceptIdentifier getParticipantId() {
return new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
}
@@ -164,4 +178,47 @@ class ParticipantMessagesTest {
private ToscaConceptIdentifier getParticipantType() {
return new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
}
+
+ private ToscaConceptIdentifier getControlLoopId() {
+ return new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
+ }
+
+ private ControlLoopInfo getControlLoopInfo(ToscaConceptIdentifier id) {
+ ControlLoopInfo clInfo = new ControlLoopInfo();
+ clInfo.setState(ControlLoopState.PASSIVE2RUNNING);
+
+ ControlLoopStatistics clStatistics = new ControlLoopStatistics();
+ clStatistics.setControlLoopId(id);
+ clStatistics.setAverageExecutionTime(12345);
+ clStatistics.setEventCount(12345);
+ clStatistics.setLastEnterTime(12345);
+ clStatistics.setLastExecutionTime(12345);
+ clStatistics.setLastStart(12345);
+ clStatistics.setTimeStamp(Instant.ofEpochMilli(3000));
+ clStatistics.setUpTime(12345);
+ ClElementStatisticsList clElementStatisticsList = new ClElementStatisticsList();
+ ClElementStatistics clElementStatistics = new ClElementStatistics();
+ clElementStatistics.setParticipantId(new ToscaConceptIdentifier("defName", "0.0.1"));
+ clElementStatistics.setTimeStamp(Instant.now());
+ clElementStatisticsList.setClElementStatistics(List.of(clElementStatistics));
+ clStatistics.setClElementStatisticsList(clElementStatisticsList);
+
+ clInfo.setControlLoopStatistics(clStatistics);
+ return clInfo;
+ }
+
+ private ControlLoopElementDefinition getClElementDefinition() {
+ ToscaServiceTemplate toscaServiceTemplate = new ToscaServiceTemplate();
+ toscaServiceTemplate.setName("serviceTemplate");
+ toscaServiceTemplate.setDerivedFrom("parentServiceTemplate");
+ toscaServiceTemplate.setDescription("Description of serviceTemplate");
+ toscaServiceTemplate.setVersion("1.2.3");
+
+ ControlLoopElementDefinition clDefinition = new ControlLoopElementDefinition();
+ clDefinition.setId(UUID.randomUUID());
+ clDefinition.setControlLoopElementToscaServiceTemplate(toscaServiceTemplate);
+ Map<String, String> commonPropertiesMap = Map.of("Prop1", "PropValue");
+ clDefinition.setCommonPropertiesMap(commonPropertiesMap);
+ return clDefinition;
+ }
}
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java
index fe7e17fd7..b91cff22c 100644
--- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java
+++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java
@@ -37,7 +37,6 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantHealthCheck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.CommonTestData;
import org.onap.policy.common.utils.coder.Coder;
@@ -156,6 +155,7 @@ public class TestListenerUtils {
clElementParticipantId.setName(toscaInputEntry.getKey());
clElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
clElement.setParticipantId(clElementParticipantId);
+ clElement.setParticipantType(clElementParticipantId);
clElement.setDefinition(clElementParticipantId);
clElement.setState(ControlLoopState.UNINITIALISED);
@@ -210,29 +210,6 @@ public class TestListenerUtils {
}
/**
- * Method to create ParticipantHealthCheck message.
- *
- * @return ParticipantHealthCheck message
- */
- public static ParticipantHealthCheck createParticipantHealthCheckMsg() {
- ToscaConceptIdentifier participantId = new ToscaConceptIdentifier();
- participantId.setName("org.onap.PM_Policy");
- participantId.setVersion("0.0.0");
-
- ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
- controlLoopId.setName("PMSHInstance0");
- controlLoopId.setVersion("1.0.0");
-
- final ParticipantHealthCheck participantHealthCheckMsg = new ParticipantHealthCheck();
- participantHealthCheckMsg.setParticipantId(participantId);
- participantHealthCheckMsg.setControlLoopId(controlLoopId);
- participantHealthCheckMsg.setTimestamp(Instant.now());
- participantHealthCheckMsg.setState(ParticipantState.PASSIVE);
-
- return participantHealthCheckMsg;
- }
-
- /**
* Method to create ControlLoopUpdate using the arguments passed.
*
* @param jsonFilePath the path of the controlloop content
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java
index 1741d9514..3ff420ffa 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java
@@ -22,7 +22,10 @@ package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
import java.io.Closeable;
import java.time.Instant;
+import java.util.LinkedHashMap;
+import java.util.Map;
import java.util.TimerTask;
+import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -30,9 +33,9 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseDetails;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseStatus;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
@@ -84,48 +87,23 @@ public class MessageSender extends TimerTask implements Closeable {
/**
* Send a response message for this participant.
*
- * @param response the details to include in the response message
+ * @param ackMessage the details to include in the response message
*/
- public void sendResponse(ParticipantResponseDetails response) {
- sendResponse(null, response);
+ public void sendAckResponse(ControlLoopAck ackMessage) {
+ sendAckResponse(null, ackMessage);
}
/**
* Dispatch a response message for this participant.
*
* @param controlLoopId the control loop to which this message is a response
- * @param response the details to include in the response message
+ * @param ackMessage the details to include in the response message
*/
- public void sendResponse(ToscaConceptIdentifier controlLoopId, ParticipantResponseDetails response) {
- var status = new ParticipantStatus();
-
+ public void sendAckResponse(ToscaConceptIdentifier controlLoopId, ControlLoopAck ackMessage) {
// Participant related fields
- status.setParticipantType(participantHandler.getParticipantType());
- status.setParticipantId(participantHandler.getParticipantId());
- status.setState(participantHandler.getState());
- status.setHealthStatus(participantHandler.getHealthStatus());
-
- // Control loop related fields
- var controlLoops = participantHandler.getControlLoopHandler().getControlLoops();
- status.setControlLoopId(controlLoopId);
- status.setControlLoops(controlLoops);
- status.setResponse(response);
-
- var participantStatistics = new ParticipantStatistics();
- participantStatistics.setTimeStamp(Instant.now());
- participantStatistics.setParticipantId(participantHandler.getParticipantId());
- participantStatistics.setHealthStatus(participantHandler.getHealthStatus());
- participantStatistics.setState(participantHandler.getState());
- status.setParticipantStatistics(participantStatistics);
-
- for (ControlLoopElementListener clElementListener :
- participantHandler.getControlLoopHandler().getListeners()) {
- updateClElementStatistics(controlLoops, clElementListener);
- }
-
- status.setControlLoops(controlLoops);
-
- publisher.sendParticipantStatus(status);
+ ackMessage.setParticipantType(participantHandler.getParticipantType());
+ ackMessage.setParticipantId(participantHandler.getParticipantId());
+ publisher.sendControlLoopAck(ackMessage);
}
/**
@@ -156,6 +134,21 @@ public class MessageSender extends TimerTask implements Closeable {
}
/**
+ * Send a ParticipantStatus message for this participant.
+ *
+ * @param participantStatus the ParticipantStatus message
+ */
+ public void sendParticipantStatus(ParticipantStatus participantStatus) {
+ var controlLoops = participantHandler.getControlLoopHandler().getControlLoops();
+ for (ControlLoopElementListener clElementListener :
+ participantHandler.getControlLoopHandler().getListeners()) {
+ updateClElementStatistics(controlLoops, clElementListener);
+ }
+
+ publisher.sendParticipantStatus(participantStatus);
+ }
+
+ /**
* Dispatch a heartbeat for this participant.
*/
public void sendHeartbeat() {
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java
index 051f00095..d8cc9eb6b 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java
@@ -21,6 +21,7 @@
package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
import java.util.List;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
@@ -92,6 +93,16 @@ public class ParticipantMessagePublisher {
}
/**
+ * Method to send ControlLoop Update/StateChange Ack message to runtime.
+ *
+ * @param controlLoopAck ControlLoop Update/StateChange Ack
+ */
+ public void sendControlLoopAck(final ControlLoopAck controlLoopAck) {
+ topicSinkClient.send(controlLoopAck);
+ LOGGER.debug("Sent ControlLoop Update/StateChange Ack to runtime - {}", controlLoopAck);
+ }
+
+ /**
* Method to send Participant heartbeat to clamp on demand.
*
* @param participantStatus the Participant Status
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantHealthCheckListener.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantStatusReqListener.java
index 15f5140eb..0881edb19 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantHealthCheckListener.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantStatusReqListener.java
@@ -20,22 +20,22 @@
package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantHealthCheck;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
import org.springframework.stereotype.Component;
/**
- * Listener for Participant health status messages sent by CLAMP.
+ * Listener for Participant status request messages sent by runtime to all/one participant.
*/
@Component
-public class ParticipantHealthCheckListener extends ParticipantListener<ParticipantHealthCheck> {
+public class ParticipantStatusReqListener extends ParticipantListener<ParticipantStatusReq> {
/**
* Constructs the object.
*
* @param participantHandler the handler for managing the state and health of the participant
*/
- public ParticipantHealthCheckListener(final ParticipantHandler participantHandler) {
- super(ParticipantHealthCheck.class, participantHandler, participantHandler::handleParticipantHealthCheck);
+ public ParticipantStatusReqListener(final ParticipantHandler participantHandler) {
+ super(ParticipantStatusReq.class, participantHandler, participantHandler::handleParticipantStatusReq);
}
}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java
index c9da1279d..876a4cc52 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java
@@ -28,6 +28,7 @@ import java.util.UUID;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
@@ -35,10 +36,10 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseDetails;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseStatus;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.MessageSender;
import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
@@ -60,6 +61,7 @@ public class ControlLoopHandler {
private final Map<ToscaConceptIdentifier, ControlLoop> controlLoopMap = new LinkedHashMap<>();
+ @Getter
private final Map<UUID, ControlLoopElement> elementsOnThisParticipant = new LinkedHashMap<>();
@Getter
@@ -93,21 +95,23 @@ public class ControlLoopHandler {
ControlLoopState newState) {
if (id == null) {
- return null;
+ LOGGER.warn("Cannot update Control loop element state, id is null");
}
+ ControlLoopAck controlLoopStateChangeAck =
+ new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
ControlLoopElement clElement = elementsOnThisParticipant.get(id);
if (clElement != null) {
clElement.setOrderedState(orderedState);
clElement.setState(newState);
+ controlLoopStateChangeAck.getControlLoopResultMap().put(clElement.getId(),
+ Pair.of(true, "Control loop element {} state changed to {}\", id, newState)"));
LOGGER.debug("Control loop element {} state changed to {}", id, newState);
- var response = new ParticipantResponseDetails();
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage("ControlLoopElement state changed to {} " + newState);
- messageSender.sendResponse(response);
+ controlLoopStateChangeAck.setMessage("ControlLoopElement state changed to {} " + newState);
+ controlLoopStateChangeAck.setResult(true);
+ messageSender.sendAckResponse(controlLoopStateChangeAck);
return clElement;
}
-
return null;
}
@@ -143,9 +147,11 @@ public class ControlLoopHandler {
return;
}
- var response = new ParticipantResponseDetails(stateChangeMsg);
- handleState(controlLoop, response, stateChangeMsg.getOrderedState());
- messageSender.sendResponse(response);
+ var controlLoopStateChangeAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
+ controlLoopStateChangeAck.setResponseTo(stateChangeMsg.getMessageId());
+ controlLoopStateChangeAck.setControlLoopId(stateChangeMsg.getControlLoopId());
+ handleState(controlLoop, controlLoopStateChangeAck, stateChangeMsg.getOrderedState());
+ messageSender.sendAckResponse(controlLoopStateChangeAck);
}
/**
@@ -155,7 +161,7 @@ public class ControlLoopHandler {
* @param response participant response
* @param orderedState controlloop ordered state
*/
- private void handleState(final ControlLoop controlLoop, final ParticipantResponseDetails response,
+ private void handleState(final ControlLoop controlLoop, final ControlLoopAck response,
ControlLoopOrderedState orderedState) {
switch (orderedState) {
case UNINITIALISED:
@@ -187,16 +193,17 @@ public class ControlLoopHandler {
var controlLoop = controlLoopMap.get(updateMsg.getControlLoopId());
- var response = new ParticipantResponseDetails(updateMsg);
+ var controlLoopUpdateAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_UPDATE_ACK);
// TODO: Updates to existing ControlLoops are not supported yet (Addition/Removal of ControlLoop
// elements to existing ControlLoop has to be supported).
if (controlLoop != null) {
- response.setResponseStatus(ParticipantResponseStatus.FAIL);
- response.setResponseMessage("Control loop " + updateMsg.getControlLoopId()
- + " already defined on participant " + participantId);
-
- messageSender.sendResponse(response);
+ controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId());
+ controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId());
+ controlLoopUpdateAck.setMessage("Control loop " + updateMsg.getControlLoopId()
+ + " already defined on participant " + participantId);
+ controlLoopUpdateAck.setResult(false);
+ messageSender.sendAckResponse(controlLoopUpdateAck);
return;
}
@@ -221,11 +228,12 @@ public class ControlLoopHandler {
}
}
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage(
- "Control loop " + updateMsg.getControlLoopId() + " defined on participant " + participantId);
-
- messageSender.sendResponse(response);
+ controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId());
+ controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId());
+ controlLoopUpdateAck.setMessage("Control loop " + updateMsg.getControlLoopId()
+ + " defined on participant " + participantId);
+ controlLoopUpdateAck.setResult(true);
+ messageSender.sendAckResponse(controlLoopUpdateAck);
}
/**
@@ -236,7 +244,7 @@ public class ControlLoopHandler {
* @param response participant response
*/
private void handleUninitialisedState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
- final ParticipantResponseDetails response) {
+ final ControlLoopAck response) {
handleStateChange(controlLoop, orderedState, ControlLoopState.UNINITIALISED, response);
controlLoopMap.remove(controlLoop.getKey().asIdentifier());
@@ -259,7 +267,7 @@ public class ControlLoopHandler {
* @param response participant response
*/
private void handlePassiveState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
- final ParticipantResponseDetails response) {
+ final ControlLoopAck response) {
handleStateChange(controlLoop, orderedState, ControlLoopState.PASSIVE, response);
}
@@ -271,7 +279,7 @@ public class ControlLoopHandler {
* @param response participant response
*/
private void handleRunningState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
- final ParticipantResponseDetails response) {
+ final ControlLoopAck response) {
handleStateChange(controlLoop, orderedState, ControlLoopState.RUNNING, response);
}
@@ -284,11 +292,11 @@ public class ControlLoopHandler {
* @param response the response to the state change request
*/
private void handleStateChange(ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
- ControlLoopState newState, ParticipantResponseDetails response) {
+ ControlLoopState newState, ControlLoopAck response) {
if (orderedState.equals(controlLoop.getOrderedState())) {
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage("Control loop is already in state " + orderedState);
+ response.setMessage("Control loop is already in state " + orderedState);
+ response.setResult(false);
return;
}
@@ -299,9 +307,8 @@ public class ControlLoopHandler {
});
}
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage(
- "ControlLoop state changed from " + controlLoop.getOrderedState() + " to " + orderedState);
+ response.setMessage("ControlLoop state changed from " + controlLoop.getOrderedState() + " to " + orderedState);
+ response.setResult(true);
controlLoop.setOrderedState(orderedState);
}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java
index f846b2d75..4fc0ae1b1 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java
@@ -28,8 +28,8 @@ import org.onap.policy.clamp.controlloop.participant.intermediary.api.Participan
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopStateChangeListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopUpdateListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantDeregisterAckListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantHealthCheckListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantRegisterAckListener;
+import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantStatusReqListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantUpdateListener;
import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
@@ -119,8 +119,8 @@ public class IntermediaryActivator extends ServiceManagerContainer implements Cl
private void registerMsgDispatcher() {
MessageTypeDispatcher msgDispatcher = applicationContext.getBean(MessageTypeDispatcher.class);
- msgDispatcher.register(ParticipantMessageType.PARTICIPANT_HEALTH_CHECK.name(),
- applicationContext.getBean(ParticipantHealthCheckListener.class));
+ msgDispatcher.register(ParticipantMessageType.PARTICIPANT_STATUS_REQ.name(),
+ applicationContext.getBean(ParticipantStatusReqListener.class));
msgDispatcher.register(ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE.name(),
applicationContext.getBean(ControlLoopStateChangeListener.class));
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java
index 9daff7239..6a0e758dd 100644
--- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java
+++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java
@@ -32,17 +32,18 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantHealthCheck;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseDetails;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantResponseStatus;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
import org.onap.policy.clamp.controlloop.participant.intermediary.comm.MessageSender;
@@ -99,14 +100,15 @@ public class ParticipantHandler implements Closeable {
/**
* Method which handles a participant health check event from clamp.
*
- * @param healthCheckMsg participant health check message
+ * @param participantStatusReqMsg participant participantStatusReq message
*/
- public void handleParticipantHealthCheck(final ParticipantHealthCheck healthCheckMsg) {
- var response = new ParticipantResponseDetails(healthCheckMsg);
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage(healthStatus.toString());
-
- sender.sendResponse(response);
+ public void handleParticipantStatusReq(final ParticipantStatusReq participantStatusReqMsg) {
+ ParticipantStatus participantStatus = new ParticipantStatus();
+ participantStatus.setParticipantId(participantId);
+ participantStatus.setParticipantStatistics(participantStatistics);
+ participantStatus.setParticipantType(participantType);
+ participantStatus.setHealthStatus(healthStatus);
+ sender.sendParticipantStatus(participantStatus);
}
/**
@@ -127,13 +129,13 @@ public class ParticipantHandler implements Closeable {
controlLoopHandler.handleControlLoopStateChange(stateChangeMsg);
}
- private void handleStateChange(ParticipantState newParticipantState, ParticipantResponseDetails response) {
+ private void handleStateChange(ParticipantState newParticipantState, ParticipantUpdateAck response) {
if (state.equals(newParticipantState)) {
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage("Participant already in state " + newParticipantState);
+ response.setResult(false);
+ response.setMessage("Participant already in state " + newParticipantState);
} else {
- response.setResponseStatus(ParticipantResponseStatus.SUCCESS);
- response.setResponseMessage("Participant state changed from " + state + " to " + newParticipantState);
+ response.setResult(true);
+ response.setMessage("Participant state changed from " + state + " to " + newParticipantState);
state = newParticipantState;
}
}
@@ -150,9 +152,10 @@ public class ParticipantHandler implements Closeable {
LOGGER.debug("No participant with this ID {}", definition.getName());
return null;
}
- var response = new ParticipantResponseDetails();
- handleStateChange(participantState, response);
- sender.sendResponse(response);
+
+ var participantUpdateAck = new ParticipantUpdateAck();
+ handleStateChange(participantState, participantUpdateAck);
+ sender.sendParticipantUpdateAck(participantUpdateAck);
return getParticipant(definition.getName(), definition.getVersion());
}
@@ -257,6 +260,8 @@ public class ParticipantHandler implements Closeable {
participantUpdateAck.setResponseTo(messageId);
participantUpdateAck.setMessage("Participant Update Ack message");
participantUpdateAck.setResult(true);
+ participantUpdateAck.setParticipantId(participantId);
+ participantUpdateAck.setParticipantType(participantType);
sender.sendParticipantUpdateAck(participantUpdateAck);
}
@@ -270,7 +275,6 @@ public class ParticipantHandler implements Closeable {
heartbeat.setParticipantStatistics(participantStatistics);
heartbeat.setParticipantType(participantType);
heartbeat.setHealthStatus(healthStatus);
- heartbeat.setMessage("Participant heartbeat message sent from -> " + participantId.getName());
return heartbeat;
}
}