+++ /dev/null
-/**\r
-* Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE)\r
-*\r
-* Licensed under the Apache License, Version 2.0 (the "License");\r
-* you may not use this file except in compliance with the License.\r
-* You may obtain a copy of the License at\r
-*\r
-* http://www.apache.org/licenses/LICENSE-2.0\r
-*\r
-* Unless required by applicable law or agreed to in writing, software\r
-* distributed under the License is distributed on an "AS IS" BASIS,\r
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-* See the License for the specific language governing permissions and\r
-* limitations under the License.\r
-*/\r
-\r
-package org.openo.msb.wrapper.serviceListener;\r
-\r
-import java.util.Set;\r
-\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.openo.msb.api.ApiRouteInfo;\r
-import org.openo.msb.api.CustomRouteInfo;\r
-import org.openo.msb.api.IuiRouteInfo;\r
-import org.openo.msb.api.Node;\r
-import org.openo.msb.api.RouteServer;\r
-import org.openo.msb.api.Service;\r
-import org.openo.msb.wrapper.ApiRouteServiceWrapper;\r
-import org.openo.msb.wrapper.CustomRouteServiceWrapper;\r
-import org.openo.msb.wrapper.IuiRouteServiceWrapper;\r
-import org.openo.msb.wrapper.util.RegExpTestUtil;\r
-import org.openo.msb.wrapper.util.RouteUtil;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-\r
-public class MicroServiceChangeListener implements IMicroServiceChangeListener {\r
- \r
- private static final Logger LOGGER = LoggerFactory.getLogger(MicroServiceChangeListener.class);\r
- \r
- @Override\r
- public void onSave(Service microServiceInfo,String serverPort) {\r
- \r
- if("UI".equals(microServiceInfo.getProtocol())){\r
- IuiRouteInfo iuiRouteInfo = this.buildIuiRouteInfo(microServiceInfo);\r
- if(null != iuiRouteInfo){\r
- IuiRouteServiceWrapper.getInstance().saveIuiRouteInstance(iuiRouteInfo);\r
- }\r
- }\r
- else{ \r
- \r
- if(ifApiRouteUrl(microServiceInfo.getUrl())){\r
- ApiRouteInfo apiRouteInfo = this.buildApiRouteInfo(microServiceInfo);\r
- if(null != apiRouteInfo){\r
- ApiRouteServiceWrapper.getInstance().saveApiRouteInstance(apiRouteInfo,serverPort);\r
- }\r
- }\r
- else{\r
- CustomRouteInfo customRouteInfo = this.buildCustomRouteInfo(microServiceInfo);\r
- if(null != customRouteInfo){\r
- CustomRouteServiceWrapper.getInstance().saveCustomRouteInstance(customRouteInfo,serverPort);\r
- }\r
- }\r
- }\r
- \r
- \r
- }\r
- \r
- @Override\r
- public void onChange(String serviceName, String version, Service microServiceInfo,String serverPort) {\r
- \r
- if("UI".equals(microServiceInfo.getProtocol())){\r
- if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){\r
- serviceName=serviceName.substring(4);\r
- }\r
- IuiRouteInfo iuiRouteInfo = this.buildIuiRouteInfo(microServiceInfo);\r
- if(null != iuiRouteInfo){\r
- IuiRouteServiceWrapper.getInstance().updateIuiRouteInstance(serviceName, iuiRouteInfo);\r
- }\r
- }\r
- else{\r
- \r
- if(ifApiRouteUrl(microServiceInfo.getUrl())){\r
- ApiRouteInfo apiRouteInfo = this.buildApiRouteInfo(microServiceInfo);\r
- if(null != apiRouteInfo){\r
- ApiRouteServiceWrapper.getInstance().updateApiRouteInstance(serviceName, version, apiRouteInfo,serverPort);\r
- }\r
- }\r
- else{\r
- if(!serviceName.startsWith("/")){\r
- serviceName="/"+serviceName;\r
- }\r
- CustomRouteInfo customRouteInfo = this.buildCustomRouteInfo(microServiceInfo);\r
- if(null != customRouteInfo){\r
- CustomRouteServiceWrapper.getInstance().updateCustomRouteInstance(serviceName,customRouteInfo,serverPort);\r
- }\r
- }\r
- }\r
- \r
- }\r
- \r
- @Override\r
- public void onStatusChange(String serviceName,String url,String version,String protocol,String status) {\r
- if("UI".equals(protocol)){\r
-\r
- if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){\r
- serviceName=serviceName.substring(4);\r
- } \r
- IuiRouteServiceWrapper.getInstance().updateIuiRouteStatus(serviceName, status);\r
- \r
- }\r
- else{\r
- if(ifApiRouteUrl(url)){\r
- ApiRouteServiceWrapper.getInstance().updateApiRouteStatus(serviceName, version, status);\r
- }\r
- else{\r
- if(!serviceName.startsWith("/")){\r
- serviceName="/"+serviceName;\r
- }\r
- CustomRouteServiceWrapper.getInstance().updateCustomRouteStatus(serviceName, status); \r
- }\r
- }\r
- \r
- \r
-\r
- }\r
-\r
- @Override\r
- public void onDelete(String serviceName,String url, String version,String protocol,String serverPort) {\r
- \r
- if("UI".equals(protocol)){\r
- if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){\r
- serviceName=serviceName.substring(4);\r
- } \r
- IuiRouteServiceWrapper.getInstance().deleteIuiRoute(serviceName, "*");\r
- \r
- }\r
- else{\r
- if(ifApiRouteUrl(url)){\r
- ApiRouteServiceWrapper.getInstance().deleteApiRoute(serviceName, version, "*",serverPort);\r
- }\r
- else{\r
-\r
- \r
- if(!serviceName.startsWith("/")){\r
- serviceName="/"+serviceName;\r
- }\r
- \r
- CustomRouteServiceWrapper.getInstance().deleteCustomRoute(serviceName, "*",serverPort); \r
- }\r
- }\r
- }\r
- \r
- \r
- /** \r
- * @Title ifApiRouteUrl \r
- * @Description TODO(According to judge whether the API registration URL format) \r
- * @param url\r
- * @return \r
- * @return boolean \r
- */\r
- private boolean ifApiRouteUrl(String url){\r
- return RegExpTestUtil.apiRouteUrlRegExpTest(url);\r
- }\r
- \r
- \r
- /**\r
- * From MicroServiceInfo to ApiRouteInfo\r
- * @param microServiceInfo\r
- * @return\r
- */\r
- private ApiRouteInfo buildApiRouteInfo(Service microServiceInfo){\r
- \r
- ApiRouteInfo apiRouteInfo = new ApiRouteInfo();\r
- apiRouteInfo.setUrl(microServiceInfo.getUrl());\r
- \r
- Set<Node> nodes=microServiceInfo.getNodes();\r
- RouteServer[] routeServers=new RouteServer[nodes.size()];\r
- \r
- \r
- int i=0;\r
- for(Node node:nodes){\r
- RouteServer routeServer = new RouteServer(node.getIp(),node.getPort()); \r
- routeServers[i]=routeServer;\r
- i++;\r
- } \r
- \r
- \r
- apiRouteInfo.setServers(routeServers);\r
- String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");\r
- if(RouteUtil.contain(rangs, "0")){\r
- apiRouteInfo.setVisualRange("0");\r
- }\r
- else{\r
- apiRouteInfo.setVisualRange("1");\r
- }\r
- \r
- \r
- if("ip_hash".equals(microServiceInfo.getLb_policy())){\r
- apiRouteInfo.setUseOwnUpstream("1");\r
- }\r
- \r
- \r
- \r
- apiRouteInfo.setServiceName(microServiceInfo.getServiceName());\r
- apiRouteInfo.setVersion(microServiceInfo.getVersion());\r
- //TODO:set json and metrics defaultValue\r
- String version="".equals(microServiceInfo.getVersion())?"":"/"+microServiceInfo.getVersion();\r
- apiRouteInfo.setApiJson(microServiceInfo.getUrl()+"/swagger.json");\r
- apiRouteInfo.setMetricsUrl("/admin/metrics");\r
- return apiRouteInfo;\r
- }\r
- \r
- \r
- /**\r
- * From MicroServiceInfo to CustomRouteInfo\r
- * @param microServiceInfo\r
- * @return\r
- */\r
- private CustomRouteInfo buildCustomRouteInfo(Service microServiceInfo){\r
- \r
- CustomRouteInfo customRouteInfo = new CustomRouteInfo();\r
- customRouteInfo.setUrl(microServiceInfo.getUrl());\r
- \r
- Set<Node> nodes=microServiceInfo.getNodes();\r
- RouteServer[] routeServers=new RouteServer[nodes.size()];\r
- \r
- \r
- int i=0;\r
- for(Node node:nodes){\r
- RouteServer routeServer = new RouteServer(node.getIp(),node.getPort()); \r
- routeServers[i]=routeServer;\r
- i++;\r
- } \r
- \r
- customRouteInfo.setServers(routeServers);\r
- String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");\r
- if(RouteUtil.contain(rangs, "0")){\r
- customRouteInfo.setVisualRange("0");\r
- }\r
- else{\r
- customRouteInfo.setVisualRange("1");\r
- }\r
- \r
- if("ip_hash".equals(microServiceInfo.getLb_policy())){\r
- customRouteInfo.setUseOwnUpstream("1");\r
- }\r
- \r
- String serviceName;\r
- if(!microServiceInfo.getServiceName().startsWith("/")){\r
- serviceName="/"+microServiceInfo.getServiceName();\r
- }\r
- else{\r
- serviceName=microServiceInfo.getServiceName();\r
- }\r
- customRouteInfo.setServiceName(serviceName);\r
- \r
- return customRouteInfo;\r
- }\r
- \r
- \r
- /**\r
- * From MicroServiceInfo to IuiRouteInfo\r
- * @param microServiceInfo\r
- * @return\r
- */\r
- private IuiRouteInfo buildIuiRouteInfo(Service microServiceInfo){\r
- \r
- IuiRouteInfo iuiRouteInfo = new IuiRouteInfo();\r
- iuiRouteInfo.setUrl(microServiceInfo.getUrl());\r
- \r
- Set<Node> nodes=microServiceInfo.getNodes();\r
- RouteServer[] routeServers=new RouteServer[nodes.size()];\r
- \r
- \r
- int i=0;\r
- for(Node node:nodes){\r
- RouteServer routeServer = new RouteServer(node.getIp(),node.getPort()); \r
- routeServers[i]=routeServer;\r
- i++;\r
- } \r
- \r
- iuiRouteInfo.setServers(routeServers);\r
- String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");\r
- if(RouteUtil.contain(rangs, "0")){\r
- iuiRouteInfo.setVisualRange("0");\r
- }\r
- else{\r
- iuiRouteInfo.setVisualRange("1");\r
- }\r
- \r
- if("ip_hash".equals(microServiceInfo.getLb_policy())){\r
- iuiRouteInfo.setUseOwnUpstream("1");\r
- }\r
-\r
- String serviceName=microServiceInfo.getServiceName();\r
- if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){\r
- serviceName=serviceName.substring(4);\r
- }\r
- \r
- \r
- iuiRouteInfo.setServiceName(serviceName);\r
- \r
- return iuiRouteInfo;\r
- }\r
-}\r