diff options
author | 2021-04-08 06:34:22 +0200 | |
---|---|---|
committer | 2021-04-08 06:34:46 +0200 | |
commit | f3969004c6ccac18e742c5fc48c844e315991023 (patch) | |
tree | f5486a62e842bb16ca7d3af47a8663df08feef55 /sdnr/wt/websocketmanager2/provider/src/main | |
parent | a252be83694ae33260d99d5371ed48c1558aa2e8 (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')
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> |