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.ArrayList;
\r
24 import java.util.List;
\r
25 import java.util.Optional;
\r
26 import java.util.Set;
\r
28 import org.onap.datalake.feeder.config.ApplicationConfiguration;
\r
29 import org.onap.datalake.feeder.domain.*;
\r
30 import org.onap.datalake.feeder.domain.Design;
\r
31 import org.onap.datalake.feeder.dto.DesignConfig;
\r
32 import org.onap.datalake.feeder.enumeration.DesignTypeEnum;
\r
33 import org.onap.datalake.feeder.repository.DesignTypeRepository;
\r
34 import org.onap.datalake.feeder.repository.DesignRepository;
\r
35 import org.onap.datalake.feeder.repository.TopicNameRepository;
\r
36 import org.onap.datalake.feeder.util.HttpClientUtil;
\r
37 import org.slf4j.Logger;
\r
38 import org.slf4j.LoggerFactory;
\r
39 import org.springframework.beans.factory.annotation.Autowired;
\r
40 import org.springframework.stereotype.Service;
\r
43 * Service for portalDesigns
\r
45 * @author guochunmeng
\r
49 public class DesignService {
\r
51 private final Logger log = LoggerFactory.getLogger(this.getClass());
\r
53 static String POST_FLAG;
\r
56 private DesignRepository designRepository;
\r
59 private TopicNameRepository topicNameRepository;
\r
62 private DesignTypeRepository designTypeRepository;
\r
65 private ApplicationConfiguration applicationConfiguration;
\r
67 public Design fillDesignConfiguration(DesignConfig designConfig) {
\r
68 Design design = new Design();
\r
69 fillDesign(designConfig, design);
\r
73 public void fillDesignConfiguration(DesignConfig designConfig, Design design) {
\r
74 fillDesign(designConfig, design);
\r
77 private void fillDesign(DesignConfig designConfig, Design design) throws IllegalArgumentException {
\r
79 design.setId(designConfig.getId());
\r
80 design.setBody(designConfig.getBody());
\r
81 design.setName(designConfig.getName());
\r
82 design.setNote(designConfig.getNote());
\r
83 design.setSubmitted(designConfig.getSubmitted());
\r
85 if (designConfig.getTopicName() == null)
\r
86 throw new IllegalArgumentException("Can not find topicName in tpoic_name, topic name: " + designConfig.getTopicName());
\r
87 Optional<TopicName> topicName = topicNameRepository.findById(designConfig.getTopicName());
\r
88 if (!topicName.isPresent())
\r
89 throw new IllegalArgumentException("topicName is null " + designConfig.getTopicName());
\r
90 design.setTopicName(topicName.get());
\r
93 if (designConfig.getDesignType() == null)
\r
94 throw new IllegalArgumentException("Can not find designType in design_type, designType id " + designConfig.getDesignType());
\r
95 Optional<DesignType> designType = designTypeRepository.findById(designConfig.getDesignType());
\r
96 if (!designType.isPresent())
\r
97 throw new IllegalArgumentException("designType is null");
\r
98 design.setDesignType(designType.get());
\r
102 public Design getDesign(Integer id) {
\r
104 Optional<Design> ret = designRepository.findById(id);
\r
105 return ret.isPresent() ? ret.get() : null;
\r
108 public List<DesignConfig> queryAllDesign() {
\r
110 List<Design> designList = null;
\r
111 List<DesignConfig> designConfigList = new ArrayList<>();
\r
112 designList = (List<Design>) designRepository.findAll();
\r
113 if (designList != null && designList.size() > 0) {
\r
114 log.info("PortalDesignList is not null");
\r
115 for (Design design : designList) {
\r
116 designConfigList.add(design.getDesignConfig());
\r
119 return designConfigList;
\r
122 public boolean deploy(Design design) {
\r
123 DesignType designType = design.getDesignType();
\r
124 DesignTypeEnum designTypeEnum = DesignTypeEnum.valueOf(designType.getId());
\r
126 switch (designTypeEnum) {
\r
128 return deployKibanaImport(design);
\r
130 return postEsMappingTemplate(design, design.getTopicName().getId().toLowerCase());
\r
132 log.error("Not implemented {}", designTypeEnum);
\r
137 private boolean deployKibanaImport(Design design) throws RuntimeException {
\r
138 POST_FLAG = "KibanaDashboardImport";
\r
139 String requestBody = design.getBody();
\r
140 Portal portal = design.getDesignType().getPortal();
\r
141 String portalHost = portal.getHost();
\r
142 Integer portalPort = portal.getPort();
\r
145 if (portalHost == null || portalPort == null) {
\r
146 String dbHost = portal.getDb().getHost();
\r
147 Integer dbPort = portal.getDb().getPort();
\r
148 url = kibanaImportUrl(dbHost, dbPort);
\r
150 url = kibanaImportUrl(portalHost, portalPort);
\r
152 return HttpClientUtil.sendPostHttpClient(url, requestBody, POST_FLAG);
\r
156 private String kibanaImportUrl(String host, Integer port) {
\r
157 if (port == null) {
\r
158 port = applicationConfiguration.getKibanaPort();
\r
160 return "http://" + host + ":" + port + applicationConfiguration.getKibanaDashboardImportApi();
\r
164 * successed resp: { "acknowledged": true }
\r
167 * @param templateName
\r
170 public boolean postEsMappingTemplate(Design design, String templateName) throws RuntimeException {
\r
171 POST_FLAG = "ElasticsearchMappingTemplate";
\r
172 String requestBody = design.getBody();
\r
175 Set<Db> dbs = design.getDbs();
\r
176 //submit to each ES in dbs
\r
178 //return HttpClientUtil.sendPostHttpClient("http://"+dbService.getElasticsearch().getHost()+":9200/_template/"+templateName, requestBody, POST_FLAG);
\r