From 0add5561508b4a0796b4237142a6e1265da2055b Mon Sep 17 00:00:00 2001 From: ZhangZihao Date: Mon, 24 Jun 2019 16:14:49 +0800 Subject: portaldesign and httpclientutil Change-Id: Ib31248a8eee2fe1511472c127abb52a0875c5b21 Issue-ID: DCAEGEN2-1625 Signed-off-by: ZhangZihao --- .../feeder/config/ApplicationConfiguration.java | 3 +- .../feeder/controller/PortalDesignController.java | 35 +++---- .../feeder/service/PortalDesignService.java | 102 +++++++++++++++------ .../onap/datalake/feeder/util/HttpClientUtil.java | 60 +++++++++++- 4 files changed, 143 insertions(+), 57 deletions(-) (limited to 'components/datalake-handler/feeder/src/main/java/org') diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/config/ApplicationConfiguration.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/config/ApplicationConfiguration.java index 3e67f38a..e371af1b 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/config/ApplicationConfiguration.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/config/ApplicationConfiguration.java @@ -80,5 +80,6 @@ public class ApplicationConfiguration { private String datalakeVersion; //Kibana - private String KibanaDashboardImportApi; + private String kibanaDashboardImportApi; + private Integer kibanaPort; } diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/PortalDesignController.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/PortalDesignController.java index 7b717268..989a9f45 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/PortalDesignController.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/PortalDesignController.java @@ -35,7 +35,6 @@ import org.springframework.web.bind.annotation.*; import io.swagger.annotations.ApiOperation; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -46,7 +45,6 @@ import javax.servlet.http.HttpServletResponse; * * @author guochunmeng */ -@CrossOrigin(origins = "*") @RestController @RequestMapping(value = "/portalDesigns", produces = MediaType.APPLICATION_JSON_VALUE) public class PortalDesignController { @@ -132,17 +130,7 @@ public class PortalDesignController { @ResponseBody @ApiOperation(value="List all PortalDesigns") public List queryAllPortalDesign(){ - - List portalDesignList = null; - List portalDesignConfigList = new ArrayList<>(); - portalDesignList = (List) portalDesignRepository.findAll(); - if (portalDesignList != null && portalDesignList.size() > 0) { - log.info("PortalDesignList is not null"); - for (PortalDesign portalDesign : portalDesignList) { - portalDesignConfigList.add(portalDesign.getPortalDesignConfig()); - } - } - return portalDesignConfigList; + return portalDesignService.queryAllPortalDesign(); } @@ -154,21 +142,20 @@ public class PortalDesignController { PortalDesign portalDesign = null; try { portalDesign = portalDesignRepository.findById(id).get(); - if (portalDesign.getDesignType() != null && portalDesign.getDesignType().getName().startsWith("Kibana")) { - boolean flag = portalDesignService.deployKibanaImport(portalDesign); + boolean flag; + try { + flag = portalDesignService.deploy(portalDesign); if (flag) { + portalDesign.setSubmitted(true); + portalDesignRepository.save(portalDesign); + response.setStatus(204); + } else { sendError(response, 400, "DeployPortalDesign failed, id: "+id); } - } else if (portalDesign.getDesignType() != null && portalDesign.getDesignType().getName().startsWith("Elasticsearch")) { - //TODO Elasticsearch template import - sendError(response, 400, "DeployPortalDesign failed, id: "+id); - } else { - //TODO Druid import - sendError(response, 400, "DeployPortalDesign failed, id: "+id); + } catch (Exception e) { + log.debug("The request failed", e.getMessage()); + sendError(response, 400, "The request failed : "+e.getMessage()); } - portalDesign.setSubmitted(true); - portalDesignRepository.save(portalDesign); - response.setStatus(204); } catch (Exception e) { log.debug("PortalDesign is null", e.getMessage()); sendError(response, 400, "PortalDesign not found, id: "+id); diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/PortalDesignService.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/PortalDesignService.java index 3f1aabd2..33093ee0 100755 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/PortalDesignService.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/PortalDesignService.java @@ -20,12 +20,10 @@ package org.onap.datalake.feeder.service; -import java.util.HashMap; +import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Optional; -import com.google.gson.Gson; import org.onap.datalake.feeder.config.ApplicationConfiguration; import org.onap.datalake.feeder.domain.DesignType; import org.onap.datalake.feeder.domain.Portal; @@ -35,6 +33,8 @@ import org.onap.datalake.feeder.dto.PortalDesignConfig; import org.onap.datalake.feeder.repository.DesignTypeRepository; import org.onap.datalake.feeder.repository.PortalDesignRepository; import org.onap.datalake.feeder.util.HttpClientUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -46,7 +46,11 @@ import org.springframework.stereotype.Service; @Service public class PortalDesignService { - + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + static String POST_FLAG; + @Autowired private PortalDesignRepository portalDesignRepository; @@ -59,6 +63,9 @@ public class PortalDesignService { @Autowired private ApplicationConfiguration applicationConfiguration; + @Autowired + private DbService dbService; + public PortalDesign fillPortalDesignConfiguration(PortalDesignConfig portalDesignConfig) throws Exception { PortalDesign portalDesign = new PortalDesign(); @@ -73,13 +80,9 @@ public class PortalDesignService { private void fillPortalDesign(PortalDesignConfig portalDesignConfig, PortalDesign portalDesign) throws IllegalArgumentException { portalDesign.setId(portalDesignConfig.getId()); - portalDesign.setBody(portalDesignConfig.getBody()); - portalDesign.setName(portalDesignConfig.getName()); - portalDesign.setNote(portalDesignConfig.getNote()); - portalDesign.setSubmitted(portalDesignConfig.getSubmitted()); if (portalDesignConfig.getTopic() != null) { @@ -108,13 +111,46 @@ public class PortalDesignService { } - private String kibanaImportUrl(String host, Integer port){ - return "http://"+host+":"+port+applicationConfiguration.getKibanaDashboardImportApi(); + public List queryAllPortalDesign(){ + + List portalDesignList = null; + List portalDesignConfigList = new ArrayList<>(); + portalDesignList = (List) portalDesignRepository.findAll(); + if (portalDesignList != null && portalDesignList.size() > 0) { + log.info("PortalDesignList is not null"); + for (PortalDesign portalDesign : portalDesignList) { + portalDesignConfigList.add(portalDesign.getPortalDesignConfig()); + } + } + return portalDesignConfigList; + } + + + public boolean deploy(PortalDesign portalDesign){ + boolean flag =true; + String designTypeName = portalDesign.getDesignType().getName(); + if (portalDesign.getDesignType() != null && "kibana_db".equals(designTypeName)) { + flag = deployKibanaImport(portalDesign); + } else if (portalDesign.getDesignType() != null && "kibana_visual".equals(designTypeName)) { + //TODO + flag =false; + } else if (portalDesign.getDesignType() != null && "kibana_search".equals(designTypeName)) { + //TODO + flag = false; + } else if (portalDesign.getDesignType() != null && "es_mapping".equals(designTypeName)) { + flag = postEsMappingTemplate(portalDesign, portalDesign.getTopic().getName().toLowerCase()); + } else if (portalDesign.getDesignType() != null && "druid_kafka_spec".equals(designTypeName)) { + //TODO + flag =false; + } else { + flag =false; + } + return flag; } - public boolean deployKibanaImport(PortalDesign portalDesign) { - boolean flag = false; + private boolean deployKibanaImport(PortalDesign portalDesign) throws RuntimeException { + POST_FLAG = "KibanaDashboardImport"; String requestBody = portalDesign.getBody(); Portal portal = portalDesign.getDesignType().getPortal(); String portalHost = portal.getHost(); @@ -128,26 +164,32 @@ public class PortalDesignService { } else { url = kibanaImportUrl(portalHost, portalPort); } + return HttpClientUtil.sendPostHttpClient(url, requestBody, POST_FLAG); - //Send httpclient to kibana - String kibanaResponse = HttpClientUtil.sendPostToKibana(url, requestBody); - Gson gson = new Gson(); - Map map = new HashMap<>(); - map = gson.fromJson(kibanaResponse, map.getClass()); - List objectsList = (List) map.get("objects"); - - if (objectsList != null && objectsList.size() > 0) { - Map map2 = new HashMap<>(); - for (int i = 0; i < objectsList.size(); i++){ - map2 = (Map)objectsList.get(i); - for(String key : map2.keySet()){ - if ("error".equals(key)) { - return true; - } - } - } + } + + + private String kibanaImportUrl(String host, Integer port){ + if (port == null) { + port = applicationConfiguration.getKibanaPort(); } - return flag; + return "http://"+host+":"+port+applicationConfiguration.getKibanaDashboardImportApi(); + } + + + /** + * successed resp: + * { + * "acknowledged": true + * } + * @param portalDesign + * @param templateName + * @return flag + */ + public boolean postEsMappingTemplate(PortalDesign portalDesign, String templateName) throws RuntimeException { + POST_FLAG = "ElasticsearchMappingTemplate"; + String requestBody = portalDesign.getBody(); + return HttpClientUtil.sendPostHttpClient("http://"+dbService.getElasticsearch().getHost()+":9200/_template/"+templateName, requestBody, POST_FLAG); } } diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/util/HttpClientUtil.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/util/HttpClientUtil.java index b02139f3..459e8ef9 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/util/HttpClientUtil.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/util/HttpClientUtil.java @@ -20,6 +20,7 @@ package org.onap.datalake.feeder.util; +import com.google.gson.Gson; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; @@ -29,6 +30,10 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * HttpClient * @@ -37,7 +42,13 @@ import org.apache.http.util.EntityUtils; */ public class HttpClientUtil { - public static String sendPostToKibana(String url, String json){ + private final static String KIBANA_DASHBOARD_IMPORT = "KibanaDashboardImport"; + + private final static String ELASTICSEARCH_MAPPING_TEMPLATE = "ElasticsearchMappingTemplate"; + + public static boolean sendPostHttpClient(String url, String json, String postFlag){ + + boolean flag = true; HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); String response = null; @@ -55,10 +66,55 @@ public class HttpClientUtil { String result = EntityUtils.toString(res.getEntity()); response = result; } + Gson gson = new Gson(); + Map map = new HashMap<>(); + map = gson.fromJson(response, map.getClass()); + switch (postFlag) { + case KIBANA_DASHBOARD_IMPORT: + flag = flagOfKibanaDashboardImport(map); + break; + case ELASTICSEARCH_MAPPING_TEMPLATE : + flag = flagOfPostEsMappingTemplate(map); + break; + } } catch (Exception e) { throw new RuntimeException(e); } - return response; + return flag; + } + + + private static boolean flagOfKibanaDashboardImport(Map map) { + + boolean flag = true; + List objectsList = (List) map.get("objects"); + + if (objectsList != null && objectsList.size() > 0) { + Map map2 = new HashMap<>(); + for (int i = 0; i < objectsList.size(); i++){ + map2 = (Map)objectsList.get(i); + for(String key : map2.keySet()){ + if ("error".equals(key)) { + return false; + } + } + } + } + return flag; + } + + + private static boolean flagOfPostEsMappingTemplate(Map map) { + + boolean flag = true; + for(String key : map.keySet()){ + if ("acknowledged".equals(key) && (boolean) map.get("acknowledged") == true) { + break; + } else { + flag = false; + } + } + return flag; } } -- cgit 1.2.3-korg