private String datalakeVersion;
//Kibana
- private String KibanaDashboardImportApi;
+ private String kibanaDashboardImportApi;
+ private Integer kibanaPort;
}
import io.swagger.annotations.ApiOperation;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
*
* @author guochunmeng
*/
-@CrossOrigin(origins = "*")
@RestController
@RequestMapping(value = "/portalDesigns", produces = MediaType.APPLICATION_JSON_VALUE)
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();
}
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);
\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
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
\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
@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
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
}\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
} 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
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;
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
*
*/
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;
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;
}
}
datalakeVersion=0.0.1
#####################KibanaDashboardImportApi
-KibanaDashboardImportApi=/api/kibana/dashboards/import?exclude=index-pattern
+kibanaDashboardImportApi=/api/kibana/dashboards/import?exclude=index-pattern
+
+#####################KibanaPort
+kibanaPort=5601
@RunWith(MockitoJUnitRunner.class)
public class PortalDesignControllerTest {
+
+ //static String Kibana_Dashboard_Import_Api = "/api/kibana/dashboards/import?exclude=index-pattern";
@Mock
private HttpServletResponse httpServletResponse;
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);
}