summaryrefslogtreecommitdiffstats
path: root/sdnr/wt/websocketmanager2/provider/src/main
diff options
context:
space:
mode:
authorMichael DÜrre <michael.duerre@highstreet-technologies.com>2021-04-08 06:34:22 +0200
committerMichael DÜrre <michael.duerre@highstreet-technologies.com>2021-04-08 06:34:46 +0200
commitf3969004c6ccac18e742c5fc48c844e315991023 (patch)
treef5486a62e842bb16ca7d3af47a8663df08feef55 /sdnr/wt/websocketmanager2/provider/src/main
parenta252be83694ae33260d99d5371ed48c1558aa2e8 (diff)
update websocketmanager
update complete notification flow Issue-ID: CCSDK-3252 Signed-off-by: Michael DÜrre <michael.duerre@highstreet-technologies.com> Change-Id: I87ba00f615707b942471fcace57bcda50ce37e61
Diffstat (limited to 'sdnr/wt/websocketmanager2/provider/src/main')
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java37
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java172
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java116
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java223
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java208
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java46
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java121
-rw-r--r--sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml44
8 files changed, 0 insertions, 967 deletions
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java
deleted file mode 100644
index 7deefa940..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/Blueprint.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2;
-
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-
-public abstract class Blueprint implements AutoCloseable {
-
- private RpcProviderService rpcProviderRegistry = null;
-
- public abstract void init();
-
- public void setRpcProviderRegistry(RpcProviderService rpcProviderRegistry) {
- this.rpcProviderRegistry = rpcProviderRegistry;
- }
-
- public RpcProviderService getRpcProviderRegistry() {
- return this.rpcProviderRegistry;
- }
-
-
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java
deleted file mode 100644
index 00e776a74..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManager.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
-import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
-import org.json.JSONObject;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerSocket.EventInputCallback;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig.ClusterConfig;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.AkkaConfig.ClusterNodeInfo;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.websocket.SyncWebSocketClient;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class WebSocketManager extends WebSocketServlet implements WebsocketmanagerService {
-
- private static final long serialVersionUID = -681665669062744439L;
-
- private static final Logger LOG = LoggerFactory.getLogger(WebSocketManager.class.getName());
- private static final String APPLICATION_NAME = WebSocketManager.class.getName();
- private static final int PORT = 8181;
- private final EventInputCallback rpcEventInputCallback;
- private final AkkaConfig akkaConfig;
- /**
- * timeout for websocket with no messages in ms
- */
- //private static final long IDLE_TIMEOUT = 5 * 60 * 1000L;
- private static final long IDLE_TIMEOUT = 0L;
-
- private final ArrayList<URI> clusterNodeClients = new ArrayList<>();
-
- public WebSocketManager() {
- this(null, null);
- }
-
- public WebSocketManager(AkkaConfig akkaconfig, EventInputCallback cb) {
- super();
- this.akkaConfig = akkaconfig;
- if (cb != null) {
- this.rpcEventInputCallback = cb;
- } else {
- this.rpcEventInputCallback = message -> {
- LOG.debug("onMessagePushed: " + message);
- SyncWebSocketClient client;
- for (URI clientURI : WebSocketManager.this.clusterNodeClients) {
- client = new SyncWebSocketClient(clientURI);
- LOG.debug("try to push message to " + client.getURI());
- client.openAndSendAndCloseSync(message);
- }
- };
- }
- LOG.info("Create servlet for {}", APPLICATION_NAME);
- }
-
- @Override
- public void configure(WebSocketServletFactory factory) {
- LOG.info("Configure provider for {}", APPLICATION_NAME);
- // set a second timeout
- factory.getPolicy().setIdleTimeout(IDLE_TIMEOUT);
- factory.getPolicy().setMaxBinaryMessageSize(1);
- factory.getPolicy().setMaxTextMessageSize(64 * 1024);
-
- // register Socket as the WebSocket to create on Upgrade
- factory.register(WebSocketManagerSocket.class);
-
- AkkaConfig cfg = this.akkaConfig;
- if (cfg == null) {
- try {
- cfg = AkkaConfig.load();
- } catch (Exception e) {
- LOG.warn("problem loading akka config: " + e.getMessage());
- }
- }
- if (cfg != null && cfg.isCluster()) {
- this.initWSClients(cfg.getClusterConfig());
- }
- }
-
- // ODL in Dublin version generates ListenableFuture that is child of Future.
- @Override
- public ListenableFuture<RpcResult<WebsocketEventOutput>> websocketEvent(WebsocketEventInput input) {
- LOG.debug("Send message '{}'", input);
- RpcResultBuilder<WebsocketEventOutput> result;
-
- final String eventAsXmlString = input.getXmlEvent();
- if (eventAsXmlString != null) {
- WebSocketManagerSocket.broadCast(input.getNodeName(), input.getEventType(), eventAsXmlString);
- try {
- JSONObject o = new JSONObject();
- o.put(WebSocketManagerSocket.KEY_NODENAME, input.getNodeName());
- o.put(WebSocketManagerSocket.KEY_EVENTTYPE, input.getEventType());
- o.put(WebSocketManagerSocket.KEY_XMLEVENT, input.getXmlEvent());
- this.rpcEventInputCallback.onMessagePushed(o.toString());
-
- WebsocketEventOutputBuilder outputBuilder = new WebsocketEventOutputBuilder();
- outputBuilder.setResponse("OK");
- result = RpcResultBuilder.success(outputBuilder);
- } catch (Exception err) {
- LOG.warn("problem pushing messsage to other nodes: " + err.getMessage());
- result = RpcResultBuilder.failed();
- result.withError(ErrorType.APPLICATION, "Exception", err);
- }
- } else {
- String msg = "Emtpy event received";
- LOG.warn(msg);
- result = RpcResultBuilder.failed();
- result.withError(ErrorType.APPLICATION, msg);
- }
- return result.buildFuture();
- }
-
- /**********************************************************
- * Private functions
- */
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- if (req.getHeader("Upgrade") != null) {
- /* Accept upgrade request */
- resp.setStatus(101);
- resp.setHeader("Upgrade", "XYZP");
- resp.setHeader("Connection", "Upgrade");
- resp.setHeader("OtherHeaderB", "Value");
- }
- }
-
- private void initWSClients(ClusterConfig clusterConfig) {
- for (ClusterNodeInfo nodeConfig : clusterConfig.getSeedNodes()) {
- if (clusterConfig.isMe(nodeConfig)) {
- continue;
- }
- String url = String.format("ws://%s:%d/websocket", nodeConfig.getRemoteAddress(), PORT);
- try {
- LOG.debug("registering ws client for " + url);
- clusterNodeClients.add(new URI(url));
- } catch (URISyntaxException e) {
- LOG.warn("problem instantiating wsclient for url: " + url);
- }
- }
- }
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java
deleted file mode 100644
index 7e82b5e0f..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerProvider.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import javax.servlet.ServletException;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
-import org.osgi.service.http.HttpService;
-import org.osgi.service.http.NamespaceException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class WebSocketManagerProvider extends Blueprint implements WebsocketmanagerService {
-
- private static final Logger LOG = LoggerFactory.getLogger(WebSocketManagerProvider.class);
- private static final String APPLICATION_NAME = WebSocketManagerProvider.class.getName();
- private static final String ALIAS = "/websocket";
-
- private WebSocketManager wsServlet = null;
- private ObjectRegistration<WebSocketManager> websocketService = null;
-
- public WebSocketManagerProvider() {
- LOG.info("Creating provider for {}", APPLICATION_NAME);
- }
-
- @Override
- public void init() {
- LOG.info("Init provider for {}", APPLICATION_NAME);
- RpcProviderService rpcProviderRegistry = this.getRpcProviderRegistry();
- if (rpcProviderRegistry != null) {
- if (wsServlet != null) {
- this.websocketService =
- rpcProviderRegistry.registerRpcImplementation(WebsocketmanagerService.class, wsServlet);
- LOG.info("websocketservice initialized");
- } else {
- LOG.debug("wsServlet not yet provided");
- }
- } else {
- LOG.error("rpcProviderRegistry not provided");
- }
- }
-
- @Override
- public void close() throws Exception {
- LOG.info("Close provider for {}", APPLICATION_NAME);
- if (websocketService != null) {
- websocketService.close();
- }
- }
-
- public void onUnbindService(HttpService httpService) {
- httpService.unregister(ALIAS);
- wsServlet = null;
- }
-
- public void onBindService(HttpService httpService) throws ServletException, NamespaceException {
- if (httpService == null) {
- LOG.warn("Unable to inject HttpService into DluxLoader. dlux modules won't work without httpService");
- } else {
-
- if (wsServlet == null) {
- wsServlet = new WebSocketManager();
- httpService.registerServlet(ALIAS, wsServlet, null, null);
- LOG.info("websocket servlet registered.");
- if (this.websocketService == null) {
- this.init();
- } else {
- LOG.info("websocketservice already initialized");
- }
- } else {
- LOG.warn("Servelt ");
- }
- }
-
- }
-
- public WebSocketManager getWsServlet() {
- return wsServlet;
- }
-
- public void setWsServlet(WebSocketManager wsServlet) {
- this.wsServlet = wsServlet;
- }
-
- @Override
- public ListenableFuture<RpcResult<WebsocketEventOutput>> websocketEvent(WebsocketEventInput input) {
- if (wsServlet != null) {
- return wsServlet.websocketEvent(input);
- } else {
- RpcResultBuilder<WebsocketEventOutput> result = RpcResultBuilder.failed();
- return result.withError(ErrorType.APPLICATION, "Not intialized").buildFuture();
- }
- }
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java
deleted file mode 100644
index c2c67be2e..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/WebSocketManagerSocket.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.Set;
-
-import org.eclipse.jetty.websocket.api.Session;
-import org.eclipse.jetty.websocket.api.WebSocketAdapter;
-import org.json.JSONObject;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.utils.UserScopes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class WebSocketManagerSocket extends WebSocketAdapter {
-
- private static final Logger LOG = LoggerFactory.getLogger(WebSocketManagerSocket.class.getName());
- public static final String MSG_KEY_DATA = "data";
- public static final String MSG_KEY_SCOPES = "scopes";
- public static final String MSG_KEY_PARAM = "param";
- public static final String MSG_KEY_VALUE = "value";
- public static final String MSG_KEY_SCOPE = "scope";
-
- public static final String KEY_NODENAME = "nodename";
- public static final String KEY_EVENTTYPE = "eventtype";
- public static final String KEY_XMLEVENT = "xmlevent";
-
- private static final Random RND = new Random();
-
-
- /**
- * list of all sessionids
- */
- private static final List<String> sessionIds = new ArrayList<>();
- /**
- * map of sessionid <=> UserScopes
- */
- private static final HashMap<String, UserScopes> userScopesList = new HashMap<>();
- /**
- * map of class.hashCode <=> class
- */
- private static final HashMap<String, WebSocketManagerSocket> clientList = new HashMap<>();
- private final String myUniqueSessionId;
-
- private Session session = null;
-
- public interface EventInputCallback {
- void onMessagePushed(final String message) throws Exception;
- }
-
- public WebSocketManagerSocket() {
- this.myUniqueSessionId = _genSessionId();
- }
-
- @Override
- protected void finalize() throws Throwable {
- sessionIds.remove(this.myUniqueSessionId);
- }
-
- private static String _genSessionId() {
- String sid = String.valueOf(RND.nextLong());
- while (sessionIds.contains(sid)) {
- sid = String.valueOf(RND.nextLong());
- }
- sessionIds.add(sid);
- return sid;
- }
-
- @Override
- public void onWebSocketText(String message) {
- LOG.info("{} has sent {}", this.getRemoteAdr(), message);
- if (!this.manageClientRequest(message)) {
- this.manageClientRequest2(message);
- }
- }
-
- @Override
- public void onWebSocketBinary(byte[] payload, int offset, int len) {
- LOG.debug("Binary not supported");
- }
-
- @Override
- public void onWebSocketConnect(Session sess) {
- this.session = sess;
- clientList.put(String.valueOf(this.hashCode()), this);
- LOG.debug("client connected from " + this.getRemoteAdr());
- }
-
- @Override
- public void onWebSocketClose(int statusCode, String reason) {
- clientList.remove(String.valueOf(this.hashCode()));
- LOG.debug("client disconnected from " + this.getRemoteAdr());
- }
-
- @Override
- public void onWebSocketError(Throwable cause) {
- LOG.debug("error caused on " + this.getRemoteAdr() + " :" + cause.getMessage());
- // super.onWebSocketError(cause);
- }
-
- private String getRemoteAdr() {
- String adr = "unknown";
- try {
- adr = this.session.getRemoteAddress().toString();
- } catch (Exception e) {
- LOG.debug("error resolving adr: {}", e.getMessage());
- }
- return adr;
- }
-
- /**
- *
- * @param request is a json object {"data":"scopes","scopes":["scope1","scope2",...]}
- * @return if handled
- */
- private boolean manageClientRequest(String request) {
- boolean ret = false;
- try {
- JSONObject jsonMessage = new JSONObject(request);
- if (jsonMessage.has(MSG_KEY_DATA)) {
- String data = jsonMessage.getString(MSG_KEY_DATA);
- if (data.equals(MSG_KEY_SCOPES)) {
- ret = true;
- String sessionId = this.getSessionId();
- UserScopes clientDto = new UserScopes();
- clientDto.setScopes(jsonMessage.getJSONArray(MSG_KEY_SCOPES));
- userScopesList.put(sessionId, clientDto);
- this.send(
- "You are connected to the Opendaylight Websocket server and scopes are : " + request + "");
- }
- }
- } catch (Exception e) {
- LOG.warn("problem set scope: " + e.getMessage());
- this.send("Your request to the Opendaylight Websocket server is >> " + request
- + " << which failed because of following exception >> " + e.toString());
- }
- return ret;
- }
-
- /*
- * broadcast message to all your clients
- */
- private void manageClientRequest2(String request) {
- try {
- JSONObject o = new JSONObject(request);
- if (o.has(KEY_NODENAME) && o.has(KEY_EVENTTYPE)) {
- this.sendToAll(o.getString(KEY_NODENAME), o.getString(KEY_EVENTTYPE), o.getString(KEY_XMLEVENT));
- }
- } catch (Exception e) {
- LOG.warn("handle ws request failed:" + e.getMessage());
- }
- }
-
- public void send(String msg) {
- try {
- LOG.trace("sending {}", msg);
- this.session.getRemote().sendString(msg);
- } catch (Exception e) {
- LOG.warn("problem sending message: " + e.getMessage());
- }
- }
-
- public String getSessionId() {
- return this.myUniqueSessionId;
- }
-
- private void sendToAll(String nodeName, String eventType, String xmlEvent) {
- if (clientList.size() > 0) {
- for (Map.Entry<String, WebSocketManagerSocket> entry : clientList.entrySet()) {
- WebSocketManagerSocket socket = entry.getValue();
- if (socket != null) {
- try {
- UserScopes clientScopes = userScopesList.get(socket.getSessionId());
- if (clientScopes != null) {
- if (clientScopes.hasScope(eventType)) {
- socket.send(xmlEvent);
- } else {
- LOG.debug("client has not scope {}", eventType);
- }
- } else {
- LOG.debug("no scopes for notifications registered");
- }
- } catch (Exception ioe) {
- LOG.warn(ioe.getMessage());
- }
- } else {
- LOG.debug("cannot broadcast. socket is null");
- }
- }
- }
- }
-
- public static void broadCast(String nodeName, String eventType, String xmlEvent) {
- if (clientList.size() > 0) {
- Set<Entry<String, WebSocketManagerSocket>> e = clientList.entrySet();
- WebSocketManagerSocket s = e.iterator().next().getValue();
- if (s != null) {
- s.sendToAll(nodeName, eventType, xmlEvent);
- }
- }
- }
-
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java
deleted file mode 100644
index b61462b49..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/AkkaConfig.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.utils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.typesafe.config.Config;
-import com.typesafe.config.ConfigFactory;
-
-public class AkkaConfig {
-
- private static final Logger LOG = LoggerFactory.getLogger(WebSocketManager.class.getName());
-
- public static class ClusterNodeInfo {
- @Override
- public String toString() {
- return "ClusterNodeInfo [protocol=" + protocol + ", clusterName=" + clusterName + ", remoteAdr=" + remoteAdr
- + ", port=" + port + "]";
- }
-
- private final String protocol;
- private final String clusterName;
- private final String remoteAdr;
- private final int port;
-
- public String getRemoteAddress() {
- return this.remoteAdr;
- }
-
- public ClusterNodeInfo(String s) throws Exception {
- final String regex = "([a-z.]*):\\/\\/([a-zA-Z0-9-]*)@([a-zA-Z0-9.-]*):([0-9]*)";
- final Pattern pattern = Pattern.compile(regex);
- final Matcher matcher = pattern.matcher(s);
- if (!matcher.find()) {
- throw new Exception("invalid seedNode format");
- }
- this.protocol = matcher.group(1);
- this.clusterName = matcher.group(2);
- this.remoteAdr = matcher.group(3);
- this.port = Integer.parseInt(matcher.group(4));
- }
- }
- public static class ClusterRoleInfo {
- @Override
- public String toString() {
- return "ClusterRoleInfo [Role=" + Role + ", Index=" + Index + "]";
- }
-
- private final String Role;
- private final int Index;
-
- public ClusterRoleInfo(String s) throws Exception {
- final String regex = "([a-z]*)-([0-9]*)";
- final Pattern pattern = Pattern.compile(regex);
- final Matcher matcher = pattern.matcher(s);
- if (!matcher.find()) {
- throw new Exception("invalid role format");
- }
- this.Role = matcher.group(1);
- this.Index = Integer.parseInt(matcher.group(2));
- }
-
- }
- public static class ClusterConfig {
- @Override
- public String toString() {
- return "ClusterConfig [seedNodes=" + seedNodes + ", roles=" + roles + "]";
- }
-
- private final List<ClusterNodeInfo> seedNodes;
- private final List<ClusterRoleInfo> roles;
- private final ClusterNodeInfo ismeInfo;
-
- public ClusterConfig(Config o) throws Exception {
- {
- this.seedNodes = new ArrayList<>();
- List<String> a = o.getStringList("seed-nodes");
- for (int i = 0; i < a.size(); i++) {
- ClusterNodeInfo info = new ClusterNodeInfo(a.get(i));
- this.seedNodes.add(info);
- }
- this.roles = new ArrayList<>();
- a = o.getStringList("roles");
- for (int i = 0; i < a.size(); i++) {
- ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
- this.roles.add(s);
- }
- int idx = this.roles.get(0).Index - 1;
- if (idx >= 0 && idx < this.seedNodes.size()) {
- this.ismeInfo = this.seedNodes.get(idx);
- } else {
- this.ismeInfo = null;
- }
- }
-
- }
-
- public boolean isCluster() {
- return this.seedNodes != null ? this.seedNodes.size() > 1 : false;
- }
-
- public boolean isMe(ClusterNodeInfo i) {
- return this.ismeInfo != null ? this.ismeInfo.equals(i) : false;
- }
-
- public List<ClusterNodeInfo> getSeedNodes() {
- return this.seedNodes;
- }
- }
-
- private static final String DEFAULT_FILENAME = "configuration/initial/akka.conf";
- private final File file;
- private final String resourceFilename;
- private final String fileContent;
- private ClusterConfig cluserConfig;
-
- public ClusterConfig getClusterConfig() {
- return this.cluserConfig;
- }
-
- private AkkaConfig(File file, boolean isResource) {
- this.file = isResource ? null : file;
- this.fileContent = null;
- this.resourceFilename = isResource ? file.getName() : null;
- }
-
- private AkkaConfig(String fileContent) {
- this.file = null;
- this.fileContent = fileContent;
- this.resourceFilename = null;
- }
-
-
- @Override
- public String toString() {
- return "AkkaConfig [filename=" + file + ", cluserConfig=" + cluserConfig + "]";
- }
-
- private void loadFromFile() throws Exception {
- Config cfg = null;
- if (this.file != null) {
- cfg = ConfigFactory.parseFile(this.file);
- } else if (this.fileContent != null) {
- cfg = ConfigFactory.parseString(this.fileContent);
- } else if (this.resourceFilename != null) {
- cfg = ConfigFactory.parseResources(this.getClass(), this.resourceFilename);
- }
-
- if (cfg != null) {
- this.cluserConfig =
- new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster"));
- } else {
- LOG.warn("unable to parse config file");
- this.cluserConfig = null;
- }
- }
-
- public boolean isCluster() {
- return this.cluserConfig != null ? this.cluserConfig.isCluster() : false;
- }
-
- public static AkkaConfig load() throws Exception {
- return load(DEFAULT_FILENAME);
- }
-
- public static AkkaConfig load(String filename) throws Exception {
- return load(filename, false);
- }
-
- public static AkkaConfig load(String filename, boolean isResource) throws Exception {
- AkkaConfig cfg = new AkkaConfig(new File(filename), isResource);
- cfg.loadFromFile();
-
- return cfg;
- }
-
- public static AkkaConfig loadContent(String content) throws Exception {
- AkkaConfig cfg = new AkkaConfig(content);
- cfg.loadFromFile();
-
- return cfg;
- }
-
-
-
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java
deleted file mode 100644
index affa27e45..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/utils/UserScopes.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.utils;
-
-import org.json.JSONArray;
-
-public class UserScopes {
-
- private JSONArray scopes;
-
- /**
- *
- * @param jsonArray array of Strings
- */
- public void setScopes(JSONArray jsonArray) {
- this.scopes = jsonArray;
- }
-
- public boolean hasScope(String scope) {
- if (this.scopes == null)
- return false;
- for (int i = 0, l = this.scopes.length(); i < l; i++) {
- if (this.scopes.get(i).toString().equals(scope)) {
- return true;
- }
- }
-
- return false;
- }
-
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java b/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java
deleted file mode 100644
index 6512e7171..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/websocketmanager2/websocket/SyncWebSocketClient.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH 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.ccsdk.features.sdnr.wt.websocketmanager2.websocket;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.java_websocket.client.WebSocketClient;
-import org.java_websocket.handshake.ServerHandshake;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SyncWebSocketClient extends WebSocketClient {
-
- public interface WebsocketEventHandler {
- void onMessageReceived(String message);
-
- void onOpen(ServerHandshake arg0);
-
- void onClose(int arg0, String arg1, boolean arg2);
-
- void onError(Exception e);
- }
-
- private static final Logger LOG = LoggerFactory.getLogger(SyncWebSocketClient.class.getName());
- private String messageToSend;
- private final List<WebsocketEventHandler> handlers;
-
- public SyncWebSocketClient(URI serverUri) {
- super(serverUri);
- this.handlers = new ArrayList<WebsocketEventHandler>();
- }
-
- public SyncWebSocketClient(String uri) throws URISyntaxException {
- this(new URI(uri));
- }
-
- public void addEventHandler(WebsocketEventHandler h) {
- this.handlers.add(h);
- }
-
- public void removeEventHandler(WebsocketEventHandler h) {
- this.handlers.remove(h);
- }
-
- @Override
- public void onClose(int arg0, String arg1, boolean arg2) {
- LOG.debug("socket closed: {} {} {}", arg0, arg1, arg2);
- for (WebsocketEventHandler h : this.handlers) {
- h.onClose(arg0, arg1, arg2);
- }
- }
-
- @Override
- public void onError(Exception arg0) {
- LOG.warn("error on socket: {}", arg0.getMessage());
- for (WebsocketEventHandler h : this.handlers) {
- h.onError(arg0);
- }
- }
-
- @Override
- public void onMessage(String arg0) {
- LOG.debug("received message: {}", arg0);
- for (WebsocketEventHandler h : this.handlers) {
- h.onMessageReceived(arg0);
- }
- }
-
- @Override
- public void onOpen(ServerHandshake arg0) {
- LOG.debug("socket opened");
- if (this.messageToSend != null) {
- LOG.debug("try to send: " + this.messageToSend);
- this.send(this.messageToSend);
- this.messageToSend = null;
- }
- for (WebsocketEventHandler h : this.handlers) {
- h.onOpen(arg0);
- }
- }
-
- public void openAndSendAsync(String message) {
- this.messageToSend = message;
- this.connect();
- }
-
- public void openAndSendAndCloseSync(String message) {
- try {
- this.connectBlocking();
- } catch (InterruptedException e) {
- LOG.warn("problem connecting:" + e.getMessage());
- Thread.currentThread().interrupt();
- }
- this.send(message);
- try {
- this.closeBlocking();
- } catch (InterruptedException e) {
- LOG.warn("problem disconnecting:" + e.getMessage());
- Thread.currentThread().interrupt();
- }
- }
-
-}
diff --git a/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
deleted file mode 100644
index d92738ada..000000000
--- a/sdnr/wt/websocketmanager2/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ ============LICENSE_START=======================================================
- ~ ONAP : ccsdk features
- ~ ================================================================================
- ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
- ~ All rights reserved.
- ~ ================================================================================
- ~ Update Copyright (C) 2020 AT&T 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=======================================================
- ~
- -->
-
-<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
- xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
- odl:use-default-for-reference-types="true">
-
- <reference id="rpcProviderRegistry" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-
- <bean id="provider" class="org.onap.ccsdk.features.sdnr.wt.websocketmanager2.WebSocketManagerProvider" init-method="init" destroy-method="close">
- <property name="rpcProviderRegistry" ref="rpcProviderRegistry"/>
- </bean>
-
- <reference id="onBindService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService">
- <reference-listener ref="provider" bind-method="onBindService" unbind-method="onUnbindService"/>
- </reference>
-
- <service id="registerWebsocketmanagerService"
- interface="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService"
- ref="provider"/>
-
-</blueprint>