Skip to content

Commit

Permalink
alibaba#97 Support integrating to third-party CMDB to filter service …
Browse files Browse the repository at this point in the history
…providers by their labels.
  • Loading branch information
nkorange committed Dec 3, 2018
1 parent 67ebd02 commit 7852397
Show file tree
Hide file tree
Showing 40 changed files with 993 additions and 388 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package com.alibaba.nacos.cmdb.plugin.spi;
package com.alibaba.nacos.api.cmdb;

import com.alibaba.nacos.cmdb.pojo.Entity;
import com.alibaba.nacos.cmdb.pojo.Label;
import com.alibaba.nacos.cmdb.pojo.LabelEvent;
import com.alibaba.nacos.api.cmdb.pojo.Entity;
import com.alibaba.nacos.api.cmdb.pojo.EntityEvent;
import com.alibaba.nacos.api.cmdb.pojo.Label;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Main service to interact with third-party CMDB.
*
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public interface ExternalCmdbService {
public interface CmdbService {

/**
* Get all label names stored in CMDB
Expand Down Expand Up @@ -61,12 +59,22 @@ public interface ExternalCmdbService {
*
* @return all entities
*/
Map<String, Set<Entity>> dumpAllEntities();
Map<String, Map<String, Entity>> dumpAllEntities();

/**
* get label change events
*
* @param timestamp start time of generated events
* @return label events
*/
List<LabelEvent> getLabelEvents();
List<EntityEvent> getLabelEvents(long timestamp);

/**
* Get single entity
*
* @param entityName name of entity
* @param entityType type of entity
* @return
*/
Entity getEntity(String entityName, String entityType);
}
37 changes: 37 additions & 0 deletions api/src/main/java/com/alibaba/nacos/api/cmdb/pojo/Entity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.alibaba.nacos.api.cmdb.pojo;

import java.util.Map;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public class Entity {

private String type;
private String name;
private Map<String, String> labels;

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Map<String, String> getLabels() {
return labels;
}

public void setLabels(Map<String, String> labels) {
this.labels = labels;
}
}
35 changes: 35 additions & 0 deletions api/src/main/java/com/alibaba/nacos/api/cmdb/pojo/EntityEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.alibaba.nacos.api.cmdb.pojo;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public class EntityEvent {

private EntityEventType type;
private String entityName;
private String entityType;

public EntityEventType getType() {
return type;
}

public void setType(EntityEventType type) {
this.type = type;
}

public String getEntityName() {
return entityName;
}

public void setEntityName(String entityName) {
this.entityName = entityName;
}

public String getEntityType() {
return entityType;
}

public void setEntityType(String entityType) {
this.entityType = entityType;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.alibaba.nacos.api.cmdb.pojo;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public enum EntityEventType {
ENTITY_ADD_OR_UPDATE,
ENTITY_REMOVE
}
37 changes: 37 additions & 0 deletions api/src/main/java/com/alibaba/nacos/api/cmdb/pojo/Label.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.alibaba.nacos.api.cmdb.pojo;

import java.util.Set;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public class Label {

private String name;
private Set<String> values;
private String description;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Set<String> getValues() {
return values;
}

public void setValues(Set<String> values) {
this.values = values;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.alibaba.nacos.api.cmdb.pojo;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public enum PreservedEntityTypes {
ip,
service
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ public String toString() {
* over threshold(超过server端的限流阈值)
*/
public static final int OVER_THRESHOLD = 503;




}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import com.alibaba.nacos.client.config.utils.IOUtils;
import com.alibaba.nacos.client.config.utils.MD5;
import com.alibaba.nacos.client.utils.ParamUtil;
import com.alibaba.nacos.common.util.UuidUtil;
import com.alibaba.nacos.common.util.UuidUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
Expand Down Expand Up @@ -230,7 +230,7 @@ private static List<String> getHeaders(String url, List<String> headers, List<St
newHeaders.add("exConfigInfo");
newHeaders.add("true");
newHeaders.add("RequestId");
newHeaders.add(UuidUtil.generateUuid());
newHeaders.add(UuidUtils.generateUuid());
if (headers!=null) {
newHeaders.addAll(headers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ListView;
import com.alibaba.nacos.client.naming.utils.*;
import com.alibaba.nacos.common.util.UuidUtil;
import com.alibaba.nacos.common.util.UuidUtils;

import java.io.IOException;
import java.io.StringReader;
Expand Down Expand Up @@ -95,7 +95,7 @@ public List<String> getServerListFromEndpoint() {
List<String> headers = Arrays.asList("Client-Version", UtilAndComs.VERSION,
"Accept-Encoding", "gzip,deflate,sdch",
"Connection", "Keep-Alive",
"RequestId", UuidUtil.generateUuid());
"RequestId", UuidUtils.generateUuid());

HttpClient.HttpResult result = HttpClient.httpGet(urlString, headers, null, UtilAndComs.ENCODING);
if (HttpURLConnection.HTTP_OK != result.code) {
Expand Down Expand Up @@ -193,11 +193,6 @@ public String queryList(String serviceName, String clusters, boolean healthyOnly
return reqAPI(UtilAndComs.NACOS_URL_BASE + "/instance/list", params, "GET");
}

private String doRegDom(Map<String, String> params) throws Exception {
String api = UtilAndComs.NACOS_URL_BASE + "/api/regService";
return reqAPI(api, params);
}

public boolean serverHealthy() {

try {
Expand Down Expand Up @@ -277,7 +272,7 @@ public String callServer(String api, Map<String, String> params, String curServe
List<String> headers = Arrays.asList("Client-Version", UtilAndComs.VERSION,
"Accept-Encoding", "gzip,deflate,sdch",
"Connection", "Keep-Alive",
"RequestId", UuidUtil.generateUuid());
"RequestId", UuidUtils.generateUuid());

String url;

Expand Down
11 changes: 11 additions & 0 deletions cmdb/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>nacos-common</artifactId>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>nacos-api</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.alibaba.nacos.cmdb.controllers;

import com.alibaba.nacos.cmdb.core.SwitchAndOptions;
import com.alibaba.nacos.cmdb.utils.UtilsAndCommons;
import com.alibaba.nacos.common.util.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
@RestController
@RequestMapping(UtilsAndCommons.NACOS_CMDB_CONTEXT + "/ops")
public class OperationController {

@Autowired
private SwitchAndOptions switches;

@RequestMapping(value = "/updateSwitch", method = RequestMethod.POST)
public String updateSwitch(HttpServletRequest request) throws Exception {

String entry = WebUtils.required(request, "entry");
String value = WebUtils.required(request, "value");

switch (entry) {
case "dumpTaskInterval":
switches.setDumpTaskInterval(Integer.parseInt(value));
break;
case "eventTaskInterval":
switches.setEventTaskInterval(Integer.parseInt(value));
break;
case "loadDataAtStart":
switches.setLoadDataAtStart(Boolean.parseBoolean(value));
break;
default:
break;
}
return "ok";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.alibaba.nacos.cmdb.core;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
public class CmdbManager {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.alibaba.nacos.cmdb.core;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* @author <a href="mailto:[email protected]">nkorange</a>
*/
@Component
public class SwitchAndOptions {

@Value("${nacos.cmdb.dumpTaskInterval}")
private int dumpTaskInterval;

@Value("${nacos.cmdb.eventTaskInterval}")
private int eventTaskInterval;

@Value("${nacos.cmdb.loadDataAtStart}")
private boolean loadDataAtStart;

public int getDumpTaskInterval() {
return dumpTaskInterval;
}

public void setDumpTaskInterval(int dumpTaskInterval) {
this.dumpTaskInterval = dumpTaskInterval;
}

public int getEventTaskInterval() {
return eventTaskInterval;
}

public void setEventTaskInterval(int eventTaskInterval) {
this.eventTaskInterval = eventTaskInterval;
}

public boolean isLoadDataAtStart() {
return loadDataAtStart;
}

public void setLoadDataAtStart(boolean loadDataAtStart) {
this.loadDataAtStart = loadDataAtStart;
}
}
Loading

0 comments on commit 7852397

Please sign in to comment.