1 package org.onap.msb.apiroute.wrapper.service;
3 import org.onap.msb.apiroute.api.ApiRouteInfo;
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 ApiRouteService {
20 private static final Logger LOGGER = LoggerFactory.getLogger(ApiRouteService.class);
21 private static final ApiRouteService instance = new ApiRouteService();
22 private IRouteDAO routeDAO = DAOFactory.getRouteDAO();
24 private ApiRouteService() {
27 public static ApiRouteService getInstance() {
31 public void saveApiRouteService2Redis(ApiRouteInfo apiRouteInfo, String routeKey) throws Exception {
32 if(apiRouteInfo ==null){
33 throw new Exception("input apiRouteInfo to be saved is null!");
35 RouteInfo routeInfo = APIRouteAdapter.toRouteInfo(apiRouteInfo);
36 routeDAO.saveRoute(routeKey, routeInfo);
39 public long deleteApiRouteService2Redis(String routeKey) throws Exception {
40 return routeDAO.deleteRoute(routeKey);
43 public long deleteMultiApiRouteService2Redis(String routeKeyPattern) throws Exception {
44 return routeDAO.deleteMultiRoute(routeKeyPattern);
47 public ApiRouteInfo getApiRouteInstance(String routeKey) throws Exception {
48 ApiRouteInfo apiRouteInfo = null;
49 RouteInfo routeInfo = null;
50 routeInfo = routeDAO.queryRoute(routeKey);
52 apiRouteInfo = APIRouteAdapter.fromRouteInfo(routeInfo);
57 public List<ApiRouteInfo> getMultiApiRouteInstances(String apiRedisKeyPattern) throws Exception {
58 List<ApiRouteInfo> apiRouteList = new ArrayList<>();
59 List<RouteInfo> routeInfoList = routeDAO.queryMultiRoute(apiRedisKeyPattern);
60 for (RouteInfo routeInfo : routeInfoList) {
61 if (routeInfo != null) {
62 ApiRouteInfo apiRouteInfo = APIRouteAdapter.fromRouteInfo(routeInfo);;
63 apiRouteList.add(apiRouteInfo);
69 public void updateApiRouteStatus2Redis(String routeKey,String status) throws Exception {
70 RouteInfo routeInfo = routeDAO.queryRoute(routeKey);
71 if(routeInfo != null){
72 routeInfo.setStatus(status);
73 routeDAO.saveRoute(routeKey,routeInfo);
75 throw new Exception("service to be updated is not exist! Update failed");
80 class APIRouteAdapter {
81 public static RouteInfo toRouteInfo(ApiRouteInfo apiRouteInfo) {
82 RouteInfo routeInfo = new RouteInfo();
83 routeInfo.setApiVersion(apiRouteInfo.getVersion());
84 routeInfo.setStatus(apiRouteInfo.getStatus());
87 Spec spec = new Spec();
88 spec.setVisualRange(apiRouteInfo.getVisualRange());
89 spec.setUrl(apiRouteInfo.getUrl().trim());
90 spec.setPublish_port(apiRouteInfo.getPublish_port());
91 spec.setHost(apiRouteInfo.getHost());
92 spec.setApijson(apiRouteInfo.getApiJson());
93 spec.setApijsontype(apiRouteInfo.getApiJsonType());
94 spec.setMetricsUrl(apiRouteInfo.getMetricsUrl());
95 spec.setConsulServiceName(apiRouteInfo.getConsulServiceName());
96 spec.setUseOwnUpstream(apiRouteInfo.getUseOwnUpstream());
97 spec.setPublish_protocol(apiRouteInfo.getPublishProtocol());
98 spec.setEnable_ssl(apiRouteInfo.isEnable_ssl());
99 spec.setControl(apiRouteInfo.getControl());
100 RouteServer[] routeServers = apiRouteInfo.getServers();
101 List<Node> nodeList = new ArrayList<>();
102 for (RouteServer server: routeServers){
103 Node node = new Node();
104 node.setIp(server.getIp());
105 node.setPort(Integer.parseInt(server.getPort()));
106 node.setWeight(server.getWeight());
109 spec.setNodes(nodeList.toArray(new Node[]{}));
110 routeInfo.setSpec(spec);
112 Metadata metadata = new Metadata();
113 metadata.setName(apiRouteInfo.getServiceName());
114 metadata.setNamespace(apiRouteInfo.getNamespace());
115 Calendar now = Calendar.getInstance();
116 now.set(Calendar.MILLISECOND, 0);
117 metadata.setUpdateTimestamp(now.getTime());
118 routeInfo.setMetadata(metadata);
123 public static ApiRouteInfo fromRouteInfo(RouteInfo routeInfo) {
124 ApiRouteInfo apiRouteInfo = new ApiRouteInfo();
126 apiRouteInfo.setVersion(routeInfo.getApiVersion());
127 apiRouteInfo.setStatus(routeInfo.getStatus());
129 Spec spec = routeInfo.getSpec();
130 apiRouteInfo.setVisualRange(spec.getVisualRange());
131 apiRouteInfo.setUrl(spec.getUrl());
132 apiRouteInfo.setPublish_port(spec.getPublish_port());
133 apiRouteInfo.setHost(spec.getHost());
134 apiRouteInfo.setApiJson(spec.getApijson());
135 apiRouteInfo.setApiJsonType(spec.getApijsontype());
136 apiRouteInfo.setMetricsUrl(spec.getMetricsUrl());
137 apiRouteInfo.setConsulServiceName(spec.getConsulServiceName());
138 apiRouteInfo.setUseOwnUpstream(spec.getUseOwnUpstream());
139 apiRouteInfo.setPublishProtocol(spec.getPublish_protocol());
140 apiRouteInfo.setEnable_ssl(spec.isEnable_ssl());
141 apiRouteInfo.setControl(spec.getControl());
142 Node[] nodes = spec.getNodes();
143 List<RouteServer> routeServerList = new ArrayList<>();
144 for (Node node: nodes){
145 RouteServer routeServer = new RouteServer();
146 routeServer.setIp(node.getIp());
147 routeServer.setPort(String.valueOf(node.getPort()));
148 routeServer.setWeight(node.getWeight());
149 routeServerList.add(routeServer);
151 apiRouteInfo.setServers(routeServerList.toArray(new RouteServer[]{}));
153 Metadata metadata = routeInfo.getMetadata();
154 apiRouteInfo.setServiceName(metadata.getName());
155 apiRouteInfo.setNamespace(metadata.getNamespace());