1 package org.onap.msb.apiroute.wrapper.service;
3 import org.onap.msb.apiroute.api.IuiRouteInfo;
4 import org.onap.msb.apiroute.api.RouteServer;
5 import org.onap.msb.apiroute.wrapper.dao.DAOFactory;
6 import org.onap.msb.apiroute.wrapper.dao.route.IRouteDAO;
7 import org.onap.msb.apiroute.wrapper.dao.route.bean.Metadata;
8 import org.onap.msb.apiroute.wrapper.dao.route.bean.Node;
9 import org.onap.msb.apiroute.wrapper.dao.route.bean.RouteInfo;
10 import org.onap.msb.apiroute.wrapper.dao.route.bean.Spec;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 import java.util.ArrayList;
15 import java.util.Calendar;
16 import java.util.List;
19 public class IuiRouteService {
20 private static final Logger LOGGER = LoggerFactory.getLogger(CustomRouteService.class);
22 private static final IuiRouteService instance = new IuiRouteService();
23 private IRouteDAO routeDAO = DAOFactory.getRouteDAO();
25 private IuiRouteService() {
28 public static IuiRouteService getInstance() {
32 public void saveIuiRouteService2Redis(IuiRouteInfo iuiRouteInfo, String routeKey) throws Exception {
33 if(iuiRouteInfo ==null){
34 throw new Exception("input apiRouteInfo to be saved is null!");
36 RouteInfo routeInfo = IuiRouteAdapter.toRouteInfo(iuiRouteInfo);
37 routeDAO.saveRoute(routeKey, routeInfo);
40 public long deleteIuiRouteService2Redis(String routeKey) throws Exception {
41 return routeDAO.deleteRoute(routeKey);
44 public long deleteMultiIuiRouteService2Redis(String routeKeyPattern) throws Exception {
45 return routeDAO.deleteMultiRoute(routeKeyPattern);
48 public IuiRouteInfo getIuiRouteInstance(String routeKey) throws Exception {
49 IuiRouteInfo iuiRouteInfo = null;
50 RouteInfo routeInfo = null;
51 routeInfo = routeDAO.queryRoute(routeKey);
53 iuiRouteInfo = IuiRouteAdapter.fromRouteInfo(routeInfo);
58 public List<IuiRouteInfo> getMultiIuiRouteInstances(String apiRedisKeyPattern) throws Exception {
59 List<IuiRouteInfo> iuiRouteList = new ArrayList<>();
60 List<RouteInfo> routeInfoList = routeDAO.queryMultiRoute(apiRedisKeyPattern);
61 for (RouteInfo routeInfo : routeInfoList) {
62 if (routeInfo != null) {
63 IuiRouteInfo iuiRouteInfo = IuiRouteAdapter.fromRouteInfo(routeInfo);;
64 iuiRouteList.add(iuiRouteInfo);
70 public void updateIuiRouteStatus2Redis(String routeKey,String status) throws Exception {
71 RouteInfo routeInfo = routeDAO.queryRoute(routeKey);
72 if(routeInfo != null){
73 routeInfo.setStatus(status);
74 routeDAO.saveRoute(routeKey,routeInfo);
76 throw new Exception("service to be updated is not exist! Update failed");
82 class IuiRouteAdapter {
83 public static RouteInfo toRouteInfo(IuiRouteInfo iuiRouteInfo) {
84 RouteInfo routeInfo = new RouteInfo();
85 routeInfo.setStatus(iuiRouteInfo.getStatus());
88 Spec spec = new Spec();
89 spec.setVisualRange(iuiRouteInfo.getVisualRange());
90 spec.setUrl(iuiRouteInfo.getUrl().trim());
91 spec.setPublish_port(iuiRouteInfo.getPublish_port());
92 spec.setHost(iuiRouteInfo.getHost());
93 spec.setConsulServiceName(iuiRouteInfo.getConsulServiceName());
94 spec.setUseOwnUpstream(iuiRouteInfo.getUseOwnUpstream());
95 spec.setPublish_protocol(iuiRouteInfo.getPublishProtocol());
96 spec.setEnable_ssl(iuiRouteInfo.isEnable_ssl());
97 spec.setControl(iuiRouteInfo.getControl());
98 RouteServer[] routeServers = iuiRouteInfo.getServers();
99 List<Node> nodeList = new ArrayList<>();
100 for (RouteServer server: routeServers){
101 Node node = new Node();
102 node.setIp(server.getIp());
103 node.setPort(Integer.parseInt(server.getPort()));
104 node.setWeight(server.getWeight());
107 spec.setNodes(nodeList.toArray(new Node[]{}));
108 routeInfo.setSpec(spec);
110 Metadata metadata = new Metadata();
111 metadata.setName(iuiRouteInfo.getServiceName());
112 metadata.setNamespace(iuiRouteInfo.getNamespace());
113 Calendar now = Calendar.getInstance();
114 now.set(Calendar.MILLISECOND, 0);
115 metadata.setUpdateTimestamp(now.getTime());
116 routeInfo.setMetadata(metadata);
120 public static IuiRouteInfo fromRouteInfo(RouteInfo routeInfo) {
121 IuiRouteInfo iuiRouteInfo = new IuiRouteInfo();
122 iuiRouteInfo.setStatus(routeInfo.getStatus());
124 Spec spec = routeInfo.getSpec();
125 iuiRouteInfo.setVisualRange(spec.getVisualRange());
126 iuiRouteInfo.setUrl(spec.getUrl());
127 iuiRouteInfo.setPublish_port(spec.getPublish_port());
128 iuiRouteInfo.setHost(spec.getHost());
129 iuiRouteInfo.setConsulServiceName(spec.getConsulServiceName());
130 iuiRouteInfo.setUseOwnUpstream(spec.getUseOwnUpstream());
131 iuiRouteInfo.setPublishProtocol(spec.getPublish_protocol());
132 iuiRouteInfo.setEnable_ssl(spec.isEnable_ssl());
133 iuiRouteInfo.setControl(spec.getControl());
134 Node[] nodes = spec.getNodes();
135 List<RouteServer> routeServerList = new ArrayList<>();
136 for (Node node: nodes){
137 RouteServer routeServer = new RouteServer();
138 routeServer.setIp(node.getIp());
139 routeServer.setPort(String.valueOf(node.getPort()));
140 routeServer.setWeight(node.getWeight());
141 routeServerList.add(routeServer);
143 iuiRouteInfo.setServers(routeServerList.toArray(new RouteServer[]{}));
145 Metadata metadata = routeInfo.getMetadata();
146 iuiRouteInfo.setServiceName(metadata.getName());
147 iuiRouteInfo.setNamespace(metadata.getNamespace());