summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java60
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java326
2 files changed, 248 insertions, 138 deletions
diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java
index b275c72ab..321d61583 100644
--- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java
+++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java
@@ -48,36 +48,6 @@ public class BatchDeployer {
private EngineServiceFacade engineServiceFacade = null;
/**
- * The main method, reads the Apex server host address, port and location of the Apex model file from the command
- * line arguments.
- *
- * @param args the arguments that specify the Apex engine and the Apex model file
- */
- public static void main(final String[] args) {
- if (args.length != NUM_ARGUMENTS) {
- String message = "invalid arguments: " + Arrays.toString(args)
- + "usage: Deployer <server address> <port address> <Apex Model file location>";
- LOGGER.error(message);
- return;
- }
-
- BatchDeployer deployer = null;
- try {
- // Use a Deployer object to handle model deployment
- deployer = new BatchDeployer(args[0], Integer.parseInt(args[1]));
- deployer.init();
- deployer.deployModel(args[2], false, false);
- deployer.startEngines();
- } catch (final ApexException | IOException e) {
- LOGGER.error("model deployment failed on parameters {}", args, e);
- } finally {
- if (deployer != null) {
- deployer.close();
- }
- }
- }
-
- /**
* Instantiates a new deployer.
*
* @param hostName the host name of the host running the Apex Engine
@@ -152,4 +122,34 @@ public class BatchDeployer {
engineServiceFacade.stopEngine(engineKey);
}
}
+
+ /**
+ * The main method, reads the Apex server host address, port and location of the Apex model file from the command
+ * line arguments.
+ *
+ * @param args the arguments that specify the Apex engine and the Apex model file
+ */
+ public static void main(final String[] args) {
+ if (args.length != NUM_ARGUMENTS) {
+ String message = "invalid arguments: " + Arrays.toString(args)
+ + "usage: Deployer <server address> <port address> <Apex Model file location>";
+ LOGGER.error(message);
+ return;
+ }
+
+ BatchDeployer deployer = null;
+ try {
+ // Use a Deployer object to handle model deployment
+ deployer = new BatchDeployer(args[0], Integer.parseInt(args[1]));
+ deployer.init();
+ deployer.deployModel(args[2], false, false);
+ deployer.startEngines();
+ } catch (final ApexException | IOException e) {
+ LOGGER.error("model deployment failed on parameters {}", args, e);
+ } finally {
+ if (deployer != null) {
+ deployer.close();
+ }
+ }
+ }
}
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java
index a9b862d41..261ba41cf 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/engdep/EngDepMessageListener.java
@@ -151,20 +151,26 @@ public class EngDepMessageListener implements MessageListener<Message>, Runnable
public void run() {
// Take messages off the queue and forward them to the Apex engine
while (messageListenerThread.isAlive() && !stopOrderedFlag) {
- try {
- final MessageBlock<Message> data = messageQueue.poll(QUEUE_POLL_TIMEOUT, TimeUnit.MILLISECONDS);
- if (data != null) {
- final List<Message> messages = data.getMessages();
- for (final Message message : messages) {
- handleMessage(message, data.getConnection());
- }
+ pollAndHandleMessage();
+ }
+ }
+
+ /**
+ * Poll the queue for a message and handle that message.
+ */
+ private void pollAndHandleMessage() {
+ try {
+ final MessageBlock<Message> data = messageQueue.poll(QUEUE_POLL_TIMEOUT, TimeUnit.MILLISECONDS);
+ if (data != null) {
+ final List<Message> messages = data.getMessages();
+ for (final Message message : messages) {
+ handleMessage(message, data.getConnection());
}
- } catch (final InterruptedException e) {
- // restore the interrupt status
- Thread.currentThread().interrupt();
- LOGGER.debug("message listener execution has been interrupted");
- break;
}
+ } catch (final InterruptedException e) {
+ // restore the interrupt status
+ Thread.currentThread().interrupt();
+ LOGGER.debug("message listener execution has been interrupted");
}
}
@@ -194,102 +200,7 @@ public class EngDepMessageListener implements MessageListener<Message>, Runnable
+ "action on received message invalid, action must be of type \"EnDepAction\"");
}
- // Handle each incoming message using the inevitable switch statement for the EngDep
- // protocol
- switch (enDepAction) {
- case GET_ENGINE_SERVICE_INFO:
- final GetEngineServiceInfo engineServiceInformationMessage = (GetEngineServiceInfo) message;
- LOGGER.debug("getting engine service information for engine service " + apexService.getKey().getId()
- + " . . .");
- // Send a reply with the engine service information
- sendServiceInfoReply(webSocket, engineServiceInformationMessage, apexService.getKey(),
- apexService.getEngineKeys(), apexService.getApexModelKey());
- LOGGER.debug("returned engine service information for engine service "
- + apexService.getKey().getId());
- break;
-
- case UPDATE_MODEL:
- final UpdateModel updateModelMessage = (UpdateModel) message;
- LOGGER.debug("updating model in engine {} . . .", updateModelMessage.getTarget().getId());
- // Update the model
- apexService.updateModel(updateModelMessage.getTarget(), updateModelMessage.getMessageData(),
- updateModelMessage.isForceInstall());
- // Send a reply indicating the message action worked
- sendReply(webSocket, updateModelMessage, true,
- "updated model in engine " + updateModelMessage.getTarget().getId());
- LOGGER.debug("updated model in engine service {}", updateModelMessage.getTarget().getId());
- break;
-
- case START_ENGINE:
- final StartEngine startEngineMessage = (StartEngine) message;
- LOGGER.debug("starting engine {} . . .", startEngineMessage.getTarget().getId());
- // Start the engine
- apexService.start(startEngineMessage.getTarget());
- // Send a reply indicating the message action worked
- sendReply(webSocket, startEngineMessage, true,
- "started engine " + startEngineMessage.getTarget().getId());
- LOGGER.debug("started engine {}", startEngineMessage.getTarget().getId());
- break;
-
- case STOP_ENGINE:
- final StopEngine stopEngineMessage = (StopEngine) message;
- LOGGER.debug("stopping engine {} . . .", stopEngineMessage.getTarget().getId());
- // Stop the engine
- apexService.stop(stopEngineMessage.getTarget());
- // Send a reply indicating the message action worked
- sendReply(webSocket, stopEngineMessage, true,
- "stopped engine " + stopEngineMessage.getTarget().getId());
- LOGGER.debug("stopping engine {}", stopEngineMessage.getTarget().getId());
- break;
-
- case START_PERIODIC_EVENTS:
- final StartPeriodicEvents startPeriodicEventsMessage = (StartPeriodicEvents) message;
- LOGGER.debug("starting periodic events on engine {} . . .",
- startPeriodicEventsMessage.getTarget().getId());
- // Start periodic events with the period specified in the message
- final Long period = Long.parseLong(startPeriodicEventsMessage.getMessageData());
- apexService.startPeriodicEvents(period);
- // Send a reply indicating the message action worked
- String periodicStartedMessage = "started periodic events on engine "
- + startPeriodicEventsMessage.getTarget().getId() + " with period " + period;
- sendReply(webSocket, startPeriodicEventsMessage, true, periodicStartedMessage);
- LOGGER.debug(periodicStartedMessage);
- break;
-
- case STOP_PERIODIC_EVENTS:
- final StopPeriodicEvents stopPeriodicEventsMessage = (StopPeriodicEvents) message;
- LOGGER.debug("stopping periodic events on engine {} . . .",
- stopPeriodicEventsMessage.getTarget().getId());
- // Stop periodic events
- apexService.stopPeriodicEvents();
- // Send a reply indicating the message action worked
- sendReply(webSocket, stopPeriodicEventsMessage, true, "stopped periodic events on engine "
- + stopPeriodicEventsMessage.getTarget().getId());
- LOGGER.debug("stopped periodic events on engine " + stopPeriodicEventsMessage.getTarget().getId());
- break;
-
- case GET_ENGINE_STATUS:
- final GetEngineStatus getEngineStatusMessage = (GetEngineStatus) message;
- LOGGER.debug("getting status for engine{} . . .", getEngineStatusMessage.getTarget().getId());
- // Send a reply with the engine status
- sendReply(webSocket, getEngineStatusMessage, true,
- apexService.getStatus(getEngineStatusMessage.getTarget()));
- LOGGER.debug("returned status for engine {}", getEngineStatusMessage.getTarget().getId());
- break;
-
- case GET_ENGINE_INFO:
- final GetEngineInfo getEngineInfo = (GetEngineInfo) message;
- LOGGER.debug("getting runtime information for engine {} . . .", getEngineInfo.getTarget().getId());
- // Send a reply with the engine runtime information
- sendReply(webSocket, getEngineInfo, true, apexService.getRuntimeInfo(getEngineInfo.getTarget()));
- LOGGER.debug("returned runtime information for engine {}", getEngineInfo.getTarget().getId());
- break;
- case RESPONSE:
- throw new ApexException("RESPONSE action on received message not handled by engine");
-
- default:
- break;
- }
+ handleIncomingMessages(message, webSocket, enDepAction);
} catch (final ApexException e) {
LOGGER.warn("apex failed to execute message", e);
sendReply(webSocket, message, false, e.getCascadedMessage());
@@ -301,6 +212,205 @@ public class EngDepMessageListener implements MessageListener<Message>, Runnable
}
/**
+ * Handle incoming EngDep messages.
+ *
+ * @param message the incoming message
+ * @param webSocket the web socket the message came in on
+ * @param enDepAction the action from the message
+ * @throws ApexException on message handling errors
+ */
+ private void handleIncomingMessages(final Message message, final WebSocket webSocket, EngDepAction enDepAction)
+ throws ApexException {
+ // Handle each incoming message using the inevitable switch statement for the EngDep
+ // protocol
+ switch (enDepAction) {
+ case GET_ENGINE_SERVICE_INFO:
+ handleGetEngineServiceInfoMessage(message, webSocket);
+ break;
+
+ case UPDATE_MODEL:
+ handleUpdateModelMessage(message, webSocket);
+ break;
+
+ case START_ENGINE:
+ handleStartEngineMessage(message, webSocket);
+ break;
+
+ case STOP_ENGINE:
+ handleStopEngineMessage(message, webSocket);
+ break;
+
+ case START_PERIODIC_EVENTS:
+ handleStartPeriodicEventsMessage(message, webSocket);
+ break;
+
+ case STOP_PERIODIC_EVENTS:
+ handleStopPeriodicEventsMessage(message, webSocket);
+ break;
+
+ case GET_ENGINE_STATUS:
+ handleEngineStatusMessage(message, webSocket);
+ break;
+
+ case GET_ENGINE_INFO:
+ handleEngineInfoMessage(message, webSocket);
+ break;
+
+ case RESPONSE:
+ throw new ApexException("RESPONSE action on received message not handled by engine");
+
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Handle the get engine service information message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleGetEngineServiceInfoMessage(final Message message, final WebSocket webSocket) {
+ final GetEngineServiceInfo engineServiceInformationMessage = (GetEngineServiceInfo) message;
+ LOGGER.debug("getting engine service information for engine service " + apexService.getKey().getId()
+ + " . . .");
+ // Send a reply with the engine service information
+ sendServiceInfoReply(webSocket, engineServiceInformationMessage, apexService.getKey(),
+ apexService.getEngineKeys(), apexService.getApexModelKey());
+ LOGGER.debug("returned engine service information for engine service "
+ + apexService.getKey().getId());
+ }
+
+ /**
+ * Handle the update model message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleUpdateModelMessage(final Message message, final WebSocket webSocket) throws ApexException {
+ final UpdateModel updateModelMessage = (UpdateModel) message;
+ LOGGER.debug("updating model in engine {} . . .", updateModelMessage.getTarget().getId());
+ // Update the model
+ apexService.updateModel(updateModelMessage.getTarget(), updateModelMessage.getMessageData(),
+ updateModelMessage.isForceInstall());
+ // Send a reply indicating the message action worked
+ sendReply(webSocket, updateModelMessage, true,
+ "updated model in engine " + updateModelMessage.getTarget().getId());
+ LOGGER.debug("updated model in engine service {}", updateModelMessage.getTarget().getId());
+ }
+
+ /**
+ * Handle the start engine message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleStartEngineMessage(final Message message, final WebSocket webSocket) throws ApexException {
+ final StartEngine startEngineMessage = (StartEngine) message;
+ LOGGER.debug("starting engine {} . . .", startEngineMessage.getTarget().getId());
+ // Start the engine
+ apexService.start(startEngineMessage.getTarget());
+ // Send a reply indicating the message action worked
+ sendReply(webSocket, startEngineMessage, true,
+ "started engine " + startEngineMessage.getTarget().getId());
+ LOGGER.debug("started engine {}", startEngineMessage.getTarget().getId());
+ }
+
+ /**
+ * Handle the stop engine message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleStopEngineMessage(final Message message, final WebSocket webSocket) throws ApexException {
+ final StopEngine stopEngineMessage = (StopEngine) message;
+ LOGGER.debug("stopping engine {} . . .", stopEngineMessage.getTarget().getId());
+ // Stop the engine
+ apexService.stop(stopEngineMessage.getTarget());
+ // Send a reply indicating the message action worked
+ sendReply(webSocket, stopEngineMessage, true,
+ "stopped engine " + stopEngineMessage.getTarget().getId());
+ LOGGER.debug("stopping engine {}", stopEngineMessage.getTarget().getId());
+ }
+
+ /**
+ * Handle the start periodic events message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleStartPeriodicEventsMessage(final Message message, final WebSocket webSocket)
+ throws ApexException {
+ final StartPeriodicEvents startPeriodicEventsMessage = (StartPeriodicEvents) message;
+ LOGGER.debug("starting periodic events on engine {} . . .",
+ startPeriodicEventsMessage.getTarget().getId());
+ // Start periodic events with the period specified in the message
+ final Long period = Long.parseLong(startPeriodicEventsMessage.getMessageData());
+ apexService.startPeriodicEvents(period);
+ // Send a reply indicating the message action worked
+ String periodicStartedMessage = "started periodic events on engine "
+ + startPeriodicEventsMessage.getTarget().getId() + " with period " + period;
+ sendReply(webSocket, startPeriodicEventsMessage, true, periodicStartedMessage);
+ LOGGER.debug(periodicStartedMessage);
+ }
+
+ /**
+ * Handle the stop periodic events message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleStopPeriodicEventsMessage(final Message message, final WebSocket webSocket)
+ throws ApexException {
+ final StopPeriodicEvents stopPeriodicEventsMessage = (StopPeriodicEvents) message;
+ LOGGER.debug("stopping periodic events on engine {} . . .",
+ stopPeriodicEventsMessage.getTarget().getId());
+ // Stop periodic events
+ apexService.stopPeriodicEvents();
+ // Send a reply indicating the message action worked
+ sendReply(webSocket, stopPeriodicEventsMessage, true, "stopped periodic events on engine "
+ + stopPeriodicEventsMessage.getTarget().getId());
+ LOGGER.debug("stopped periodic events on engine " + stopPeriodicEventsMessage.getTarget().getId());
+ }
+
+ /**
+ * Handle the engine status message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleEngineStatusMessage(final Message message, final WebSocket webSocket) throws ApexException {
+ final GetEngineStatus getEngineStatusMessage = (GetEngineStatus) message;
+ LOGGER.debug("getting status for engine{} . . .", getEngineStatusMessage.getTarget().getId());
+ // Send a reply with the engine status
+ sendReply(webSocket, getEngineStatusMessage, true,
+ apexService.getStatus(getEngineStatusMessage.getTarget()));
+ LOGGER.debug("returned status for engine {}", getEngineStatusMessage.getTarget().getId());
+ }
+
+ /**
+ * Handle the engine information message.
+ *
+ * @param message the message
+ * @param webSocket the web socket that the message came on
+ * @throws ApexException on message handling exceptions
+ */
+ private void handleEngineInfoMessage(final Message message, final WebSocket webSocket) throws ApexException {
+ final GetEngineInfo getEngineInfo = (GetEngineInfo) message;
+ LOGGER.debug("getting runtime information for engine {} . . .", getEngineInfo.getTarget().getId());
+ // Send a reply with the engine runtime information
+ sendReply(webSocket, getEngineInfo, true, apexService.getRuntimeInfo(getEngineInfo.getTarget()));
+ LOGGER.debug("returned runtime information for engine {}", getEngineInfo.getTarget().getId());
+ }
+
+ /**
* Send the Response message to the client.
*
* @param client the client to which to send the response message