meta admin (#2836)

This commit is contained in:
DinoZhang
2020-08-20 21:18:00 +08:00
committed by GitHub
parent b82c8bca83
commit 72ae7ba8d7
12 changed files with 149 additions and 0 deletions

View File

@@ -128,4 +128,12 @@ public interface AdminConnector {
*/
String instanceLog(String destination, String fileName, int lines);
/**
* meta
* @param destination
* @param fileName
* @return
*/
String instanceMeta(String destination, String fileName);
}

View File

@@ -206,6 +206,11 @@ public class SimpleAdminConnector implements AdminConnector {
return doLogAdmin("instance", "file", destination, fileName, lines);
}
@Override
public String instanceMeta(final String destination, final String fileName) {
return doLogAdmin("meta", "file", destination, fileName,100);
}
// ==================== helper method ====================
private String doServerAdmin(String action) {

View File

@@ -161,6 +161,20 @@ public class CanalInstanceController {
return BaseModel.getInstance(canalInstanceConfigService.remoteInstanceLog(id, nodeId));
}
/**
* 获取实例meta信息
*
* @param id
* @param nodeId
* @param env
* @return
*/
@GetMapping(value = "/instance/meta/{id}/{nodeId}")
public BaseModel<Map<String, String>> meta(@PathVariable Long id, @PathVariable Long nodeId,
@PathVariable String env) {
return BaseModel.getInstance(canalInstanceConfigService.remoteInstanceMeta(id, nodeId));
}
/**
* 通过Server id获取所有活动的Instance
*

View File

@@ -26,6 +26,8 @@ public interface CanalInstanceService {
Map<String, String> remoteInstanceLog(Long id, Long nodeId);
Map<String, String> remoteInstanceMeta(Long id, Long nodeId);
boolean remoteOperation(Long id, Long nodeId, String option);
boolean instanceOperation(Long id, String option);

View File

@@ -1,8 +1,10 @@
package com.alibaba.otter.canal.admin.service.impl;
import com.alibaba.otter.canal.common.zookeeper.ZkClientx;
import io.ebean.Query;
import java.security.NoSuchAlgorithmException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -256,6 +258,33 @@ public class CanalInstanceServiceImpl implements CanalInstanceService {
return result;
}
@Override
public Map<String, String> remoteInstanceMeta(final Long id, final Long nodeId) {
Map<String, String> result = new HashMap<>();
NodeServer nodeServer = NodeServer.find.byId(nodeId);
if (nodeServer == null) {
return result;
}
CanalInstanceConfig canalInstanceConfig = CanalInstanceConfig.find.byId(id);
if (canalInstanceConfig == null) {
return result;
}
String meta;
if (nodeServer.getCanalCluster() != null) {
ZkClientx zkClientx = ZkClientx.getZkClient(nodeServer.getCanalCluster().getZkHosts());
String zkPath = MessageFormat.format("/{0}/{1}/{2}/{3}/{4}/{5}", "otter", "canal", "destinations", canalInstanceConfig.getName(), "1001", "cursor");
meta = new String((byte[]) zkClientx.readData(zkPath));
} else {
meta = SimpleAdminConnectors.execute(nodeServer.getIp(),
nodeServer.getAdminPort(),
adminConnector -> adminConnector.instanceMeta(canalInstanceConfig.getName(), "meta.dat"));
}
result.put("instance", canalInstanceConfig.getName());
result.put("meta", meta);
return result;
}
public boolean remoteOperation(Long id, Long nodeId, String option) {
NodeServer nodeServer = null;
if ("start".equals(option)) {