canal instance manager module finished

This commit is contained in:
mcy
2019-07-13 21:34:44 +08:00
parent 4efc0f6078
commit f3daceea6b
12 changed files with 304 additions and 20 deletions

View File

@@ -22,7 +22,7 @@ public class CanalInstanceController {
return BaseModel.getInstance(canalInstanceConfigService.findList(canalInstanceConfig));
}
@PostMapping(value = "/iInstance")
@PostMapping(value = "/instance")
public BaseModel<String> save(@RequestBody CanalInstanceConfig canalInstanceConfig, @PathVariable String env) {
canalInstanceConfigService.save(canalInstanceConfig);
return BaseModel.getInstance("success");
@@ -34,7 +34,7 @@ public class CanalInstanceController {
}
@PutMapping(value = "/instance")
public BaseModel<String> update(@RequestBody CanalInstanceConfig canalInstanceConfig, @PathVariable String env) {
public BaseModel<String> update(@RequestBody CanalInstanceConfig canalInstanceConfig, @PathVariable String env) {
canalInstanceConfigService.updateContent(canalInstanceConfig);
return BaseModel.getInstance("success");
}
@@ -44,4 +44,14 @@ public class CanalInstanceController {
canalInstanceConfigService.delete(id);
return BaseModel.getInstance("success");
}
@PutMapping(value = "/instance/start/{id}")
public BaseModel<Boolean> start(@PathVariable Long id, @PathVariable String env) {
return BaseModel.getInstance(canalInstanceConfigService.remoteOperation(id, null, "start"));
}
@PutMapping(value = "/instance/stop/{id}/{nodeId}")
public BaseModel<Boolean> stop(@PathVariable Long id, @PathVariable Long nodeId, @PathVariable String env) {
return BaseModel.getInstance(canalInstanceConfigService.remoteOperation(id, nodeId, "stop"));
}
}

View File

@@ -29,6 +29,8 @@ public class CanalInstanceConfig extends Model {
private String content;
private Date modifiedTime;
@Transient
private Long nodeId;
@Transient
private String nodeIp;
@@ -64,6 +66,14 @@ public class CanalInstanceConfig extends Model {
this.modifiedTime = modifiedTime;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
public String getNodeIp() {
return nodeIp;
}

View File

@@ -15,4 +15,6 @@ public interface CanalInstanceService {
void updateContent(CanalInstanceConfig canalInstanceConfig);
void delete(Long id);
boolean remoteOperation(Long id, Long nodeId, String option);
}

View File

@@ -40,6 +40,7 @@ public class CanalInstanceServiceImpl implements CanalInstanceService {
for (String instance : instances) {
for (CanalInstanceConfig cig : canalInstanceConfigs) {
if (instance.equals(cig.getName())) {
cig.setNodeId(nodeServer.getId());
cig.setNodeIp(nodeServer.getIp());
break;
}
@@ -69,4 +70,40 @@ public class CanalInstanceServiceImpl implements CanalInstanceService {
}
}
public boolean remoteOperation(Long id, Long nodeId, String option) {
NodeServer nodeServer = null;
if ("start".equals(option)) {
// select the first node server
nodeServer = NodeServer.find.query().findOne();
} else {
if (nodeId == null) {
return false;
}
nodeServer = NodeServer.find.byId(nodeId);
}
if (nodeServer == null) {
return false;
}
CanalInstanceConfig canalInstanceConfig = CanalInstanceConfig.find.byId(id);
if (canalInstanceConfig == null) {
return false;
}
Boolean resutl = null;
if ("start".equals(option)) {
resutl = JMXConnection.execute(nodeServer.getIp(),
nodeServer.getPort(),
canalServerMXBean -> canalServerMXBean.startInstance(canalInstanceConfig.getName()));
} else if ("stop".equals(option)) {
resutl = JMXConnection.execute(nodeServer.getIp(),
nodeServer.getPort(),
canalServerMXBean -> canalServerMXBean.stopInstance(canalInstanceConfig.getName()));
} else {
return false;
}
if (resutl == null) {
resutl = false;
}
return resutl;
}
}

View File

@@ -116,7 +116,7 @@ public class NodeServerServiceImpl implements NodeServerService {
if ("start".equals(option)) {
resutl = JMXConnection.execute(nodeServer.getIp(), nodeServer.getPort(), CanalServerMXBean::start);
} else if ("stop".equals(option)) {
JMXConnection.execute(nodeServer.getIp(), nodeServer.getPort(), CanalServerMXBean::stop);
resutl = JMXConnection.execute(nodeServer.getIp(), nodeServer.getPort(), CanalServerMXBean::stop);
} else {
return false;
}