portaldesign and httpclientutil 68/90368/4
authorZhangZihao <zhangzihao@chinamobile.com>
Mon, 24 Jun 2019 08:14:49 +0000 (16:14 +0800)
committerZihao Zhang <zhangzihao@chinamobile.com>
Mon, 24 Jun 2019 08:47:13 +0000 (08:47 +0000)
Change-Id: Ib31248a8eee2fe1511472c127abb52a0875c5b21
Issue-ID: DCAEGEN2-1625
Signed-off-by: ZhangZihao <zhangzihao@chinamobile.com>
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/config/ApplicationConfiguration.java
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/PortalDesignController.java
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/PortalDesignService.java
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/util/HttpClientUtil.java
components/datalake-handler/feeder/src/main/resources/application.properties
components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/PortalDesignControllerTest.java

index 3e67f38..e371af1 100644 (file)
@@ -80,5 +80,6 @@ public class ApplicationConfiguration {
        private String datalakeVersion;
   
        //Kibana
-       private String KibanaDashboardImportApi;
+       private String kibanaDashboardImportApi;
+       private Integer kibanaPort;
 }
index 7b71726..989a9f4 100644 (file)
@@ -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<PortalDesignConfig> queryAllPortalDesign(){
-
-               List<PortalDesign> portalDesignList = null;
-               List<PortalDesignConfig> portalDesignConfigList = new ArrayList<>();
-               portalDesignList = (List<PortalDesign>) 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);
index 3f1aabd..33093ee 100755 (executable)
 \r
 package org.onap.datalake.feeder.service;\r
 \r
-import java.util.HashMap;\r
+import java.util.ArrayList;\r
 import java.util.List;\r
-import java.util.Map;\r
 import java.util.Optional;\r
 \r
-import com.google.gson.Gson;\r
 import org.onap.datalake.feeder.config.ApplicationConfiguration;\r
 import org.onap.datalake.feeder.domain.DesignType;\r
 import org.onap.datalake.feeder.domain.Portal;\r
@@ -35,6 +33,8 @@ import org.onap.datalake.feeder.dto.PortalDesignConfig;
 import org.onap.datalake.feeder.repository.DesignTypeRepository;\r
 import org.onap.datalake.feeder.repository.PortalDesignRepository;\r
 import org.onap.datalake.feeder.util.HttpClientUtil;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
 \r
@@ -46,7 +46,11 @@ import org.springframework.stereotype.Service;
 \r
 @Service\r
 public class PortalDesignService {\r
-       \r
+\r
+       private final Logger log = LoggerFactory.getLogger(this.getClass());\r
+\r
+       static String POST_FLAG;\r
+\r
     @Autowired\r
     private PortalDesignRepository portalDesignRepository;\r
 \r
@@ -59,6 +63,9 @@ public class PortalDesignService {
        @Autowired\r
        private ApplicationConfiguration applicationConfiguration;\r
 \r
+       @Autowired\r
+       private DbService dbService;\r
+\r
        public PortalDesign fillPortalDesignConfiguration(PortalDesignConfig portalDesignConfig) throws Exception\r
        {\r
                PortalDesign portalDesign = new PortalDesign();\r
@@ -73,13 +80,9 @@ public class PortalDesignService {
        private void fillPortalDesign(PortalDesignConfig portalDesignConfig, PortalDesign portalDesign) throws IllegalArgumentException {\r
 \r
                portalDesign.setId(portalDesignConfig.getId());\r
-\r
                portalDesign.setBody(portalDesignConfig.getBody());\r
-\r
                portalDesign.setName(portalDesignConfig.getName());\r
-\r
                portalDesign.setNote(portalDesignConfig.getNote());\r
-\r
                portalDesign.setSubmitted(portalDesignConfig.getSubmitted());\r
 \r
                if (portalDesignConfig.getTopic() != null) {\r
@@ -108,13 +111,46 @@ public class PortalDesignService {
        }\r
 \r
 \r
-       private String kibanaImportUrl(String host, Integer port){\r
-               return "http://"+host+":"+port+applicationConfiguration.getKibanaDashboardImportApi();\r
+       public List<PortalDesignConfig> queryAllPortalDesign(){\r
+\r
+               List<PortalDesign> portalDesignList = null;\r
+               List<PortalDesignConfig> portalDesignConfigList = new ArrayList<>();\r
+               portalDesignList = (List<PortalDesign>) portalDesignRepository.findAll();\r
+               if (portalDesignList != null && portalDesignList.size() > 0) {\r
+                       log.info("PortalDesignList is not null");\r
+                       for (PortalDesign portalDesign : portalDesignList) {\r
+                               portalDesignConfigList.add(portalDesign.getPortalDesignConfig());\r
+                       }\r
+               }\r
+               return portalDesignConfigList;\r
+       }\r
+\r
+\r
+       public boolean deploy(PortalDesign portalDesign){\r
+               boolean flag =true;\r
+               String designTypeName = portalDesign.getDesignType().getName();\r
+               if (portalDesign.getDesignType() != null && "kibana_db".equals(designTypeName)) {\r
+                       flag = deployKibanaImport(portalDesign);\r
+               } else if (portalDesign.getDesignType() != null && "kibana_visual".equals(designTypeName)) {\r
+                       //TODO\r
+                       flag =false;\r
+               } else if (portalDesign.getDesignType() != null && "kibana_search".equals(designTypeName)) {\r
+                       //TODO\r
+                       flag = false;\r
+               } else if (portalDesign.getDesignType() != null && "es_mapping".equals(designTypeName)) {\r
+                       flag = postEsMappingTemplate(portalDesign, portalDesign.getTopic().getName().toLowerCase());\r
+               } else if (portalDesign.getDesignType() != null && "druid_kafka_spec".equals(designTypeName)) {\r
+                       //TODO\r
+                       flag =false;\r
+               } else {\r
+                       flag =false;\r
+               }\r
+               return flag;\r
        }\r
 \r
 \r
-       public boolean deployKibanaImport(PortalDesign portalDesign) {\r
-               boolean flag = false;\r
+       private boolean deployKibanaImport(PortalDesign portalDesign) throws RuntimeException {\r
+               POST_FLAG = "KibanaDashboardImport";\r
                String requestBody = portalDesign.getBody();\r
                Portal portal = portalDesign.getDesignType().getPortal();\r
                String portalHost = portal.getHost();\r
@@ -128,26 +164,32 @@ public class PortalDesignService {
                } else {\r
                        url = kibanaImportUrl(portalHost, portalPort);\r
                }\r
+               return HttpClientUtil.sendPostHttpClient(url, requestBody, POST_FLAG);\r
 \r
-               //Send httpclient to kibana\r
-               String kibanaResponse = HttpClientUtil.sendPostToKibana(url, requestBody);\r
-               Gson gson = new Gson();\r
-               Map<String, Object> map = new HashMap<>();\r
-               map = gson.fromJson(kibanaResponse, map.getClass());\r
-               List objectsList = (List) map.get("objects");\r
-\r
-               if (objectsList != null && objectsList.size() > 0) {\r
-                       Map<String, Object> map2 = new HashMap<>();\r
-                       for (int i = 0; i < objectsList.size(); i++){\r
-                               map2 = (Map<String, Object>)objectsList.get(i);\r
-                               for(String key : map2.keySet()){\r
-                                       if ("error".equals(key)) {\r
-                                               return true;\r
-                                       }\r
-                               }\r
-                       }\r
+       }\r
+\r
+\r
+       private String kibanaImportUrl(String host, Integer port){\r
+               if (port == null) {\r
+                       port = applicationConfiguration.getKibanaPort();\r
                }\r
-               return flag;\r
+               return "http://"+host+":"+port+applicationConfiguration.getKibanaDashboardImportApi();\r
+       }\r
+\r
+\r
+       /**\r
+        * successed resp:\r
+        * {\r
+        *     "acknowledged": true\r
+        * }\r
+        * @param portalDesign\r
+        * @param templateName\r
+        * @return flag\r
+        */\r
+       public boolean postEsMappingTemplate(PortalDesign portalDesign, String templateName) throws RuntimeException {\r
+               POST_FLAG = "ElasticsearchMappingTemplate";\r
+               String requestBody = portalDesign.getBody();\r
+               return HttpClientUtil.sendPostHttpClient("http://"+dbService.getElasticsearch().getHost()+":9200/_template/"+templateName, requestBody, POST_FLAG);\r
        }\r
 \r
 }\r
index b02139f..459e8ef 100644 (file)
@@ -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<String, Object> 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<String, Object> map) {
+
+        boolean flag = true;
+        List objectsList = (List) map.get("objects");
+
+        if (objectsList != null && objectsList.size() > 0) {
+            Map<String, Object> map2 = new HashMap<>();
+            for (int i = 0; i < objectsList.size(); i++){
+                map2 = (Map<String, Object>)objectsList.get(i);
+                for(String key : map2.keySet()){
+                    if ("error".equals(key)) {
+                        return false;
+                    }
+                }
+            }
+        }
+        return flag;
+    }
+
+
+    private static boolean flagOfPostEsMappingTemplate(Map<String, Object> map) {
+
+        boolean flag = true;
+        for(String key : map.keySet()){
+            if ("acknowledged".equals(key) && (boolean) map.get("acknowledged") == true) {
+                break;
+            } else {
+                flag = false;
+            }
+        }
+        return flag;
     }
 
 }
index 60fcb1a..f94dae1 100644 (file)
@@ -61,5 +61,8 @@ logging.level.org.onap.datalake=DEBUG
 datalakeVersion=0.0.1
 
 #####################KibanaDashboardImportApi
-KibanaDashboardImportApi=/api/kibana/dashboards/import?exclude=index-pattern
+kibanaDashboardImportApi=/api/kibana/dashboards/import?exclude=index-pattern
+
+#####################KibanaPort
+kibanaPort=5601
  
index ac9a17a..3bd0449 100644 (file)
@@ -53,6 +53,8 @@ import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class PortalDesignControllerTest {
+  
+    //static String Kibana_Dashboard_Import_Api = "/api/kibana/dashboards/import?exclude=index-pattern";
 
     @Mock
     private HttpServletResponse httpServletResponse;
@@ -140,8 +142,8 @@ public class PortalDesignControllerTest {
         PortalDesign testPortalDesign = fillDomain();
         Integer id = 1;
         testPortalDesign.setId(1);
+       //when(applicationConfiguration.getKibanaDashboardImportApi()).thenReturn(Kibana_Dashboard_Import_Api);
         when(portalDesignRepository.findById(id)).thenReturn((Optional.of(testPortalDesign)));
-        when(applicationConfiguration.getKibanaDashboardImportApi()).thenReturn("/api/kibana/dashboards/import?exclude=index-pattern");
         testPortalDesignController.deployPortalDesign(id, httpServletResponse);
     }