mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
meta admin (#2836)
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user