2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright 2019 China Mobile
\r
6 *=================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.onap.datalake.feeder.service;
\r
23 import java.util.HashMap;
\r
24 import java.util.List;
\r
25 import java.util.Map;
\r
26 import java.util.Optional;
\r
28 import com.google.gson.Gson;
\r
29 import org.onap.datalake.feeder.config.ApplicationConfiguration;
\r
30 import org.onap.datalake.feeder.domain.DesignType;
\r
31 import org.onap.datalake.feeder.domain.Portal;
\r
32 import org.onap.datalake.feeder.domain.PortalDesign;
\r
33 import org.onap.datalake.feeder.domain.Topic;
\r
34 import org.onap.datalake.feeder.dto.PortalDesignConfig;
\r
35 import org.onap.datalake.feeder.repository.DesignTypeRepository;
\r
36 import org.onap.datalake.feeder.repository.PortalDesignRepository;
\r
37 import org.onap.datalake.feeder.util.HttpClientUtil;
\r
38 import org.springframework.beans.factory.annotation.Autowired;
\r
39 import org.springframework.stereotype.Service;
\r
42 * Service for portalDesigns
\r
44 * @author guochunmeng
\r
48 public class PortalDesignService {
\r
51 private PortalDesignRepository portalDesignRepository;
\r
54 private TopicService topicService;
\r
57 private DesignTypeRepository designTypeRepository;
\r
60 private ApplicationConfiguration applicationConfiguration;
\r
62 public PortalDesign fillPortalDesignConfiguration(PortalDesignConfig portalDesignConfig) throws Exception
\r
64 PortalDesign portalDesign = new PortalDesign();
\r
65 fillPortalDesign(portalDesignConfig, portalDesign);
\r
66 return portalDesign;
\r
68 public void fillPortalDesignConfiguration(PortalDesignConfig portalDesignConfig, PortalDesign portalDesign) throws Exception
\r
70 fillPortalDesign(portalDesignConfig, portalDesign);
\r
73 private void fillPortalDesign(PortalDesignConfig portalDesignConfig, PortalDesign portalDesign) throws IllegalArgumentException {
\r
75 portalDesign.setId(portalDesignConfig.getId());
\r
77 portalDesign.setBody(portalDesignConfig.getBody());
\r
79 portalDesign.setName(portalDesignConfig.getName());
\r
81 portalDesign.setNote(portalDesignConfig.getNote());
\r
83 portalDesign.setSubmitted(portalDesignConfig.getSubmitted());
\r
85 if (portalDesignConfig.getTopic() != null) {
\r
86 Topic topic = topicService.getTopic(portalDesignConfig.getTopic());
\r
87 if (topic == null) throw new IllegalArgumentException("topic is null");
\r
88 portalDesign.setTopic(topic);
\r
90 throw new IllegalArgumentException("Can not find topic in DB, topic name: "+portalDesignConfig.getTopic());
\r
93 if (portalDesignConfig.getDesignType() != null) {
\r
94 DesignType designType = designTypeRepository.findById(portalDesignConfig.getDesignType()).get();
\r
95 if (designType == null) throw new IllegalArgumentException("designType is null");
\r
96 portalDesign.setDesignType(designType);
\r
98 throw new IllegalArgumentException("Can not find designType in Design_type, designType name "+portalDesignConfig.getDesignType());
\r
104 public PortalDesign getPortalDesign(Integer id) {
\r
106 Optional<PortalDesign> ret = portalDesignRepository.findById(id);
\r
107 return ret.isPresent() ? ret.get() : null;
\r
111 private String kibanaImportUrl(String host, Integer port){
\r
112 return "http://"+host+":"+port+applicationConfiguration.getKibanaDashboardImportApi();
\r
116 public boolean deployKibanaImport(PortalDesign portalDesign) {
\r
117 boolean flag = false;
\r
118 String requestBody = portalDesign.getBody();
\r
119 Portal portal = portalDesign.getDesignType().getPortal();
\r
120 String portalHost = portal.getHost();
\r
121 Integer portalPort = portal.getPort();
\r
124 if (portalHost == null || portalPort == null) {
\r
125 String dbHost = portal.getDb().getHost();
\r
126 Integer dbPort = portal.getDb().getPort();
\r
127 url = kibanaImportUrl(dbHost, dbPort);
\r
129 url = kibanaImportUrl(portalHost, portalPort);
\r
132 //Send httpclient to kibana
\r
133 String kibanaResponse = HttpClientUtil.sendPostToKibana(url, requestBody);
\r
134 Gson gson = new Gson();
\r
135 Map<String, Object> map = new HashMap<>();
\r
136 map = gson.fromJson(kibanaResponse, map.getClass());
\r
137 List objectsList = (List) map.get("objects");
\r
139 if (objectsList != null && objectsList.size() > 0) {
\r
140 Map<String, Object> map2 = new HashMap<>();
\r
141 for (int i = 0; i < objectsList.size(); i++){
\r
142 map2 = (Map<String, Object>)objectsList.get(i);
\r
143 for(String key : map2.keySet()){
\r
144 if ("error".equals(key)) {
\r