mirror of
https://github.com/didi/KnowStreaming.git
synced 2025-12-24 11:52:08 +08:00
Connect相关代码
This commit is contained in:
@@ -8,9 +8,13 @@ import com.xiaojukeji.know.streaming.km.common.bean.dto.group.GroupOffsetResetDT
|
|||||||
import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO;
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationBaseDTO;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO;
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.dto.partition.PartitionOffsetDTO;
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.partition.PartitionOffsetDTO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.Group;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.Group;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopic;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopic;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopicMember;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.group.GroupTopicMember;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSGroupDescription;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSMemberConsumerAssignment;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSMemberDescription;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.offset.KSOffsetSpec;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.offset.KSOffsetSpec;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.PaginationResult;
|
||||||
@@ -35,14 +39,13 @@ import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
|||||||
import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.PaginationMetricsUtil;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.PaginationUtil;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
|
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.group.GroupMetricService;
|
import com.xiaojukeji.know.streaming.km.core.service.group.GroupMetricService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.group.GroupService;
|
import com.xiaojukeji.know.streaming.km.core.service.group.GroupService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionService;
|
import com.xiaojukeji.know.streaming.km.core.service.partition.PartitionService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService;
|
import com.xiaojukeji.know.streaming.km.core.service.topic.TopicService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.GroupMetricVersionItems;
|
import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.GroupMetricVersionItems;
|
||||||
import com.xiaojukeji.know.streaming.km.persistence.es.dao.GroupMetricESDAO;
|
import com.xiaojukeji.know.streaming.km.persistence.es.dao.GroupMetricESDAO;
|
||||||
import org.apache.kafka.clients.admin.ConsumerGroupDescription;
|
|
||||||
import org.apache.kafka.clients.admin.MemberDescription;
|
|
||||||
import org.apache.kafka.common.ConsumerGroupState;
|
import org.apache.kafka.common.ConsumerGroupState;
|
||||||
import org.apache.kafka.common.TopicPartition;
|
import org.apache.kafka.common.TopicPartition;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -51,6 +54,8 @@ import org.springframework.stereotype.Component;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum.CONNECT_CLUSTER_PROTOCOL_TYPE;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class GroupManagerImpl implements GroupManager {
|
public class GroupManagerImpl implements GroupManager {
|
||||||
private static final ILog log = LogFactory.getLog(GroupManagerImpl.class);
|
private static final ILog log = LogFactory.getLog(GroupManagerImpl.class);
|
||||||
@@ -70,6 +75,9 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private GroupMetricESDAO groupMetricESDAO;
|
private GroupMetricESDAO groupMetricESDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClusterPhyService clusterPhyService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResult<GroupTopicOverviewVO> pagingGroupMembers(Long clusterPhyId,
|
public PaginationResult<GroupTopicOverviewVO> pagingGroupMembers(Long clusterPhyId,
|
||||||
String topicName,
|
String topicName,
|
||||||
@@ -140,6 +148,11 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
String groupName,
|
String groupName,
|
||||||
List<String> latestMetricNames,
|
List<String> latestMetricNames,
|
||||||
PaginationSortDTO dto) throws NotExistException, AdminOperateException {
|
PaginationSortDTO dto) throws NotExistException, AdminOperateException {
|
||||||
|
ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(clusterPhyId);
|
||||||
|
if (clusterPhy == null) {
|
||||||
|
return PaginationResult.buildFailure(MsgConstant.getClusterPhyNotExist(clusterPhyId), dto);
|
||||||
|
}
|
||||||
|
|
||||||
// 获取消费组消费的TopicPartition列表
|
// 获取消费组消费的TopicPartition列表
|
||||||
Map<TopicPartition, Long> consumedOffsetMap = groupService.getGroupOffsetFromKafka(clusterPhyId, groupName);
|
Map<TopicPartition, Long> consumedOffsetMap = groupService.getGroupOffsetFromKafka(clusterPhyId, groupName);
|
||||||
List<Integer> partitionList = consumedOffsetMap.keySet()
|
List<Integer> partitionList = consumedOffsetMap.keySet()
|
||||||
@@ -150,15 +163,20 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
Collections.sort(partitionList);
|
Collections.sort(partitionList);
|
||||||
|
|
||||||
// 获取消费组当前运行信息
|
// 获取消费组当前运行信息
|
||||||
ConsumerGroupDescription groupDescription = groupService.getGroupDescriptionFromKafka(clusterPhyId, groupName);
|
KSGroupDescription groupDescription = groupService.getGroupDescriptionFromKafka(clusterPhy, groupName);
|
||||||
|
|
||||||
// 转换存储格式
|
// 转换存储格式
|
||||||
Map<TopicPartition, MemberDescription> tpMemberMap = new HashMap<>();
|
Map<TopicPartition, KSMemberDescription> tpMemberMap = new HashMap<>();
|
||||||
for (MemberDescription description: groupDescription.members()) {
|
|
||||||
for (TopicPartition tp: description.assignment().topicPartitions()) {
|
//如果不是connect集群
|
||||||
|
if (!groupDescription.protocolType().equals(CONNECT_CLUSTER_PROTOCOL_TYPE)) {
|
||||||
|
for (KSMemberDescription description : groupDescription.members()) {
|
||||||
|
KSMemberConsumerAssignment assignment = (KSMemberConsumerAssignment) description.assignment();
|
||||||
|
for (TopicPartition tp : assignment.topicPartitions()) {
|
||||||
tpMemberMap.put(tp, description);
|
tpMemberMap.put(tp, description);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 获取指标
|
// 获取指标
|
||||||
PaginationResult<GroupMetrics> metricsResult = this.pagingGroupTopicPartitionMetrics(clusterPhyId, groupName, topicName, partitionList, latestMetricNames, dto);
|
PaginationResult<GroupMetrics> metricsResult = this.pagingGroupTopicPartitionMetrics(clusterPhyId, groupName, topicName, partitionList, latestMetricNames, dto);
|
||||||
@@ -173,11 +191,11 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
vo.setTopicName(topicName);
|
vo.setTopicName(topicName);
|
||||||
vo.setPartitionId(groupMetrics.getPartitionId());
|
vo.setPartitionId(groupMetrics.getPartitionId());
|
||||||
|
|
||||||
MemberDescription memberDescription = tpMemberMap.get(new TopicPartition(topicName, groupMetrics.getPartitionId()));
|
KSMemberDescription ksMemberDescription = tpMemberMap.get(new TopicPartition(topicName, groupMetrics.getPartitionId()));
|
||||||
if (memberDescription != null) {
|
if (ksMemberDescription != null) {
|
||||||
vo.setMemberId(memberDescription.consumerId());
|
vo.setMemberId(ksMemberDescription.consumerId());
|
||||||
vo.setHost(memberDescription.host());
|
vo.setHost(ksMemberDescription.host());
|
||||||
vo.setClientId(memberDescription.clientId());
|
vo.setClientId(ksMemberDescription.clientId());
|
||||||
}
|
}
|
||||||
|
|
||||||
vo.setLatestMetrics(groupMetrics);
|
vo.setLatestMetrics(groupMetrics);
|
||||||
@@ -203,7 +221,12 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsumerGroupDescription description = groupService.getGroupDescriptionFromKafka(dto.getClusterId(), dto.getGroupName());
|
ClusterPhy clusterPhy = clusterPhyService.getClusterByCluster(dto.getClusterId());
|
||||||
|
if (clusterPhy == null) {
|
||||||
|
return Result.buildFromRSAndMsg(ResultStatus.CLUSTER_NOT_EXIST, MsgConstant.getClusterPhyNotExist(dto.getClusterId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
KSGroupDescription description = groupService.getGroupDescriptionFromKafka(clusterPhy, dto.getGroupName());
|
||||||
if (ConsumerGroupState.DEAD.equals(description.state()) && !dto.isCreateIfNotExist()) {
|
if (ConsumerGroupState.DEAD.equals(description.state()) && !dto.isCreateIfNotExist()) {
|
||||||
return Result.buildFromRSAndMsg(ResultStatus.KAFKA_OPERATE_FAILED, "group不存在, 重置失败");
|
return Result.buildFromRSAndMsg(ResultStatus.KAFKA_OPERATE_FAILED, "group不存在, 重置失败");
|
||||||
}
|
}
|
||||||
@@ -345,32 +368,4 @@ public class GroupManagerImpl implements GroupManager {
|
|||||||
dto
|
dto
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<GroupTopicOverviewVO> convert2GroupTopicOverviewVOList(String groupName, String state, List<GroupTopicMember> groupTopicList, List<GroupMetrics> metricsList) {
|
|
||||||
if (metricsList == null) {
|
|
||||||
metricsList = new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// <TopicName, GroupMetrics>
|
|
||||||
Map<String, GroupMetrics> metricsMap = new HashMap<>();
|
|
||||||
for (GroupMetrics metrics : metricsList) {
|
|
||||||
if (!groupName.equals(metrics.getGroup())) continue;
|
|
||||||
metricsMap.put(metrics.getTopic(), metrics);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<GroupTopicOverviewVO> voList = new ArrayList<>();
|
|
||||||
for (GroupTopicMember po : groupTopicList) {
|
|
||||||
GroupTopicOverviewVO vo = ConvertUtil.obj2Obj(po, GroupTopicOverviewVO.class);
|
|
||||||
vo.setGroupName(groupName);
|
|
||||||
vo.setState(state);
|
|
||||||
GroupMetrics metrics = metricsMap.get(po.getTopicName());
|
|
||||||
if (metrics != null) {
|
|
||||||
vo.setMaxLag(ConvertUtil.Float2Long(metrics.getMetrics().get(GroupMetricVersionItems.GROUP_METRIC_LAG)));
|
|
||||||
}
|
|
||||||
|
|
||||||
voList.add(vo);
|
|
||||||
}
|
|
||||||
return voList;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
|
|||||||
import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerConfigService;
|
import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerConfigService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService;
|
import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.topic.TopicConfigService;
|
import com.xiaojukeji.know.streaming.km.core.service.topic.TopicConfigService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.version.BaseVersionControlService;
|
import com.xiaojukeji.know.streaming.km.core.service.version.BaseKafkaVersionControlService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
|
|||||||
import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum.*;
|
import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum.*;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class TopicConfigManagerImpl extends BaseVersionControlService implements TopicConfigManager {
|
public class TopicConfigManagerImpl extends BaseKafkaVersionControlService implements TopicConfigManager {
|
||||||
private static final ILog log = LogFactory.getLog(TopicConfigManagerImpl.class);
|
private static final ILog log = LogFactory.getLog(TopicConfigManagerImpl.class);
|
||||||
|
|
||||||
private static final String GET_DEFAULT_TOPIC_CONFIG = "getDefaultTopicConfig";
|
private static final String GET_DEFAULT_TOPIC_CONFIG = "getDefaultTopicConfig";
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public interface VersionControlManager {
|
|||||||
* 获取当前ks所有支持的kafka版本
|
* 获取当前ks所有支持的kafka版本
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Result<Map<String, Long>> listAllVersions();
|
Result<Map<String, Long>> listAllKafkaVersions();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取全部集群 clusterId 中类型为 type 的指标,不论支持不支持
|
* 获取全部集群 clusterId 中类型为 type 的指标,不论支持不支持
|
||||||
@@ -28,7 +28,7 @@ public interface VersionControlManager {
|
|||||||
* @param type
|
* @param type
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Result<List<VersionItemVO>> listClusterVersionControlItem(Long clusterId, Integer type);
|
Result<List<VersionItemVO>> listKafkaClusterVersionControlItem(Long clusterId, Integer type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前用户设置的用于展示的指标配置
|
* 获取当前用户设置的用于展示的指标配置
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import com.xiaojukeji.know.streaming.km.common.bean.vo.version.VersionItemVO;
|
|||||||
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.VersionUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.VersionUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService;
|
||||||
import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService;
|
import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -92,6 +93,9 @@ public class VersionControlManagerImpl implements VersionControlManager {
|
|||||||
defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_BYTES_OUT, true));
|
defaultMetrics.add(new UserMetricConfig(METRIC_BROKER.getCode(), BROKER_METRIC_BYTES_OUT, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClusterPhyService clusterPhyService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private VersionControlService versionControlService;
|
private VersionControlService versionControlService;
|
||||||
|
|
||||||
@@ -107,7 +111,13 @@ public class VersionControlManagerImpl implements VersionControlManager {
|
|||||||
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_BROKER.getCode()), VersionItemVO.class));
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_BROKER.getCode()), VersionItemVO.class));
|
||||||
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_PARTITION.getCode()), VersionItemVO.class));
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_PARTITION.getCode()), VersionItemVO.class));
|
||||||
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_REPLICATION.getCode()), VersionItemVO.class));
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_REPLICATION.getCode()), VersionItemVO.class));
|
||||||
|
|
||||||
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_ZOOKEEPER.getCode()), VersionItemVO.class));
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_ZOOKEEPER.getCode()), VersionItemVO.class));
|
||||||
|
|
||||||
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_CLUSTER.getCode()), VersionItemVO.class));
|
||||||
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_CONNECTOR.getCode()), VersionItemVO.class));
|
||||||
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(METRIC_CONNECT_MIRROR_MAKER.getCode()), VersionItemVO.class));
|
||||||
|
|
||||||
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(WEB_OP.getCode()), VersionItemVO.class));
|
allVersionItemVO.addAll(ConvertUtil.list2List(versionControlService.listVersionControlItem(WEB_OP.getCode()), VersionItemVO.class));
|
||||||
|
|
||||||
Map<String, VersionItemVO> map = allVersionItemVO.stream().collect(
|
Map<String, VersionItemVO> map = allVersionItemVO.stream().collect(
|
||||||
@@ -121,18 +131,20 @@ public class VersionControlManagerImpl implements VersionControlManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<Map<String, Long>> listAllVersions() {
|
public Result<Map<String, Long>> listAllKafkaVersions() {
|
||||||
return Result.buildSuc(VersionEnum.allVersionsWithOutMax());
|
return Result.buildSuc(VersionEnum.allVersionsWithOutMax());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<List<VersionItemVO>> listClusterVersionControlItem(Long clusterId, Integer type) {
|
public Result<List<VersionItemVO>> listKafkaClusterVersionControlItem(Long clusterId, Integer type) {
|
||||||
List<VersionControlItem> allItem = versionControlService.listVersionControlItem(type);
|
List<VersionControlItem> allItem = versionControlService.listVersionControlItem(type);
|
||||||
List<VersionItemVO> versionItemVOS = new ArrayList<>();
|
List<VersionItemVO> versionItemVOS = new ArrayList<>();
|
||||||
|
|
||||||
|
String versionStr = clusterPhyService.getVersionFromCacheFirst(clusterId);
|
||||||
|
|
||||||
for (VersionControlItem item : allItem){
|
for (VersionControlItem item : allItem){
|
||||||
VersionItemVO itemVO = ConvertUtil.obj2Obj(item, VersionItemVO.class);
|
VersionItemVO itemVO = ConvertUtil.obj2Obj(item, VersionItemVO.class);
|
||||||
boolean support = versionControlService.isClusterSupport(clusterId, item);
|
boolean support = versionControlService.isClusterSupport(versionStr, item);
|
||||||
|
|
||||||
itemVO.setSupport(support);
|
itemVO.setSupport(support);
|
||||||
itemVO.setDesc(itemSupportDesc(item, support));
|
itemVO.setDesc(itemSupportDesc(item, support));
|
||||||
@@ -145,7 +157,7 @@ public class VersionControlManagerImpl implements VersionControlManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<List<UserMetricConfigVO>> listUserMetricItem(Long clusterId, Integer type, String operator) {
|
public Result<List<UserMetricConfigVO>> listUserMetricItem(Long clusterId, Integer type, String operator) {
|
||||||
Result<List<VersionItemVO>> ret = listClusterVersionControlItem(clusterId, type);
|
Result<List<VersionItemVO>> ret = listKafkaClusterVersionControlItem(clusterId, type);
|
||||||
if(null == ret || ret.failed()){
|
if(null == ret || ret.failed()){
|
||||||
return Result.buildFail();
|
return Result.buildFail();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +1,26 @@
|
|||||||
package com.xiaojukeji.know.streaming.km.collector.metric;
|
package com.xiaojukeji.know.streaming.km.collector.metric;
|
||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
|
||||||
import com.xiaojukeji.know.streaming.km.collector.service.CollectThreadPoolService;
|
import com.xiaojukeji.know.streaming.km.collector.service.CollectThreadPoolService;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.LoggerUtil;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent;
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent;
|
||||||
import com.xiaojukeji.know.streaming.km.common.component.SpringTool;
|
import com.xiaojukeji.know.streaming.km.common.component.SpringTool;
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractMetricCollector<T> {
|
public abstract class AbstractMetricCollector<M, C> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(AbstractMetricCollector.class);
|
public abstract String getClusterVersion(C c);
|
||||||
|
|
||||||
protected static final ILog METRIC_COLLECTED_LOGGER = LoggerUtil.getMetricCollectedLogger();
|
|
||||||
|
|
||||||
public abstract List<T> collectKafkaMetrics(ClusterPhy clusterPhy);
|
|
||||||
|
|
||||||
public abstract VersionItemTypeEnum collectorType();
|
public abstract VersionItemTypeEnum collectorType();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private CollectThreadPoolService collectThreadPoolService;
|
private CollectThreadPoolService collectThreadPoolService;
|
||||||
|
|
||||||
public void collectMetrics(ClusterPhy clusterPhy) {
|
public abstract void collectMetrics(C c);
|
||||||
long startTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
// 采集指标
|
|
||||||
List<T> metricsList = this.collectKafkaMetrics(clusterPhy);
|
|
||||||
|
|
||||||
// 输出耗时信息
|
|
||||||
LOGGER.info(
|
|
||||||
"metricType={}||clusterPhyId={}||costTimeUnitMs={}",
|
|
||||||
this.collectorType().getMessage(), clusterPhy.getId(), System.currentTimeMillis() - startTime
|
|
||||||
);
|
|
||||||
|
|
||||||
// 输出采集到的指标信息
|
|
||||||
METRIC_COLLECTED_LOGGER.debug("metricType={}||clusterPhyId={}||metrics={}!",
|
|
||||||
this.collectorType().getMessage(), clusterPhy.getId(), ConvertUtil.obj2Json(metricsList)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected FutureWaitUtil<Void> getFutureUtilByClusterPhyId(Long clusterPhyId) {
|
protected FutureWaitUtil<Void> getFutureUtilByClusterPhyId(Long clusterPhyId) {
|
||||||
return collectThreadPoolService.selectSuitableFutureUtil(clusterPhyId * 1000L + this.collectorType().getCode());
|
return collectThreadPoolService.selectSuitableFutureUtil(clusterPhyId * 1000L + this.collectorType().getCode());
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.metric.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.LoggerUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
public abstract class AbstractConnectMetricCollector<M> extends AbstractMetricCollector<M, ConnectCluster> {
|
||||||
|
private static final ILog LOGGER = LogFactory.getLog(AbstractConnectMetricCollector.class);
|
||||||
|
|
||||||
|
protected static final ILog METRIC_COLLECTED_LOGGER = LoggerUtil.getMetricCollectedLogger();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConnectClusterService connectClusterService;
|
||||||
|
|
||||||
|
public abstract List<M> collectConnectMetrics(ConnectCluster connectCluster);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getClusterVersion(ConnectCluster connectCluster){
|
||||||
|
return connectClusterService.getClusterVersion(connectCluster.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collectMetrics(ConnectCluster connectCluster) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 采集指标
|
||||||
|
List<M> metricsList = this.collectConnectMetrics(connectCluster);
|
||||||
|
|
||||||
|
// 输出耗时信息
|
||||||
|
LOGGER.info(
|
||||||
|
"metricType={}||connectClusterId={}||costTimeUnitMs={}",
|
||||||
|
this.collectorType().getMessage(), connectCluster.getId(), System.currentTimeMillis() - startTime
|
||||||
|
);
|
||||||
|
|
||||||
|
// 输出采集到的指标信息
|
||||||
|
METRIC_COLLECTED_LOGGER.debug("metricType={}||connectClusterId={}||metrics={}!",
|
||||||
|
this.collectorType().getMessage(), connectCluster.getId(), ConvertUtil.obj2Json(metricsList)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.metric.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectClusterMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectClusterMetricEvent;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterMetricService;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CONNECT_CLUSTER;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class ConnectClusterMetricCollector extends AbstractConnectMetricCollector<ConnectClusterMetrics> {
|
||||||
|
protected static final ILog LOGGER = LogFactory.getLog(ConnectClusterMetricCollector.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private VersionControlService versionControlService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConnectClusterMetricService connectClusterMetricService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ConnectClusterMetrics> collectConnectMetrics(ConnectCluster connectCluster) {
|
||||||
|
Long startTime = System.currentTimeMillis();
|
||||||
|
Long clusterPhyId = connectCluster.getKafkaClusterPhyId();
|
||||||
|
Long connectClusterId = connectCluster.getId();
|
||||||
|
|
||||||
|
ConnectClusterMetrics metrics = new ConnectClusterMetrics(clusterPhyId, connectClusterId);
|
||||||
|
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME);
|
||||||
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(getClusterVersion(connectCluster), collectorType().getCode());
|
||||||
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(connectClusterId);
|
||||||
|
|
||||||
|
for (VersionControlItem item : items) {
|
||||||
|
future.runnableTask(
|
||||||
|
String.format("class=ConnectClusterMetricCollector||connectClusterId=%d||metricName=%s", connectClusterId, item.getName()),
|
||||||
|
30000,
|
||||||
|
() -> {
|
||||||
|
try {
|
||||||
|
Result<ConnectClusterMetrics> ret = connectClusterMetricService.collectConnectClusterMetricsFromKafka(connectClusterId, item.getName());
|
||||||
|
if (null == ret || !ret.hasData()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
metrics.putMetric(ret.getData().getMetrics());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error(
|
||||||
|
"method=collectConnectMetrics||connectClusterId={}||metricName={}||errMsg=exception!",
|
||||||
|
connectClusterId, item.getName(), e
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
future.waitExecute(30000);
|
||||||
|
|
||||||
|
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f);
|
||||||
|
|
||||||
|
this.publishMetric(new ConnectClusterMetricEvent(this, Collections.singletonList(metrics)));
|
||||||
|
|
||||||
|
return Collections.singletonList(metrics);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VersionItemTypeEnum collectorType() {
|
||||||
|
return METRIC_CONNECT_CLUSTER;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.metric.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.version.VersionControlItem;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectorMetricEvent;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.FutureWaitUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorMetricService;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorService;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.version.VersionControlService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemTypeEnum.METRIC_CONNECT_CONNECTOR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class ConnectConnectorMetricCollector extends AbstractConnectMetricCollector<ConnectorMetrics> {
|
||||||
|
protected static final ILog LOGGER = LogFactory.getLog(ConnectConnectorMetricCollector.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private VersionControlService versionControlService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConnectorService connectorService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConnectorMetricService connectorMetricService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ConnectorMetrics> collectConnectMetrics(ConnectCluster connectCluster) {
|
||||||
|
Long clusterPhyId = connectCluster.getKafkaClusterPhyId();
|
||||||
|
Long connectClusterId = connectCluster.getId();
|
||||||
|
|
||||||
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(connectCluster), collectorType().getCode());
|
||||||
|
Result<List<String>> connectorList = connectorService.listConnectorsFromCluster(connectClusterId);
|
||||||
|
|
||||||
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(connectClusterId);
|
||||||
|
|
||||||
|
List<ConnectorMetrics> metricsList = new ArrayList<>();
|
||||||
|
for (String connectorName : connectorList.getData()) {
|
||||||
|
ConnectorMetrics metrics = new ConnectorMetrics(connectClusterId, connectorName);
|
||||||
|
metrics.setClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
metricsList.add(metrics);
|
||||||
|
future.runnableTask(
|
||||||
|
String.format("class=ConnectConnectorMetricCollector||connectClusterId=%d||connectorName=%s", connectClusterId, connectorName),
|
||||||
|
30000,
|
||||||
|
() -> collectMetrics(connectClusterId, connectorName, metrics, items)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
future.waitResult(30000);
|
||||||
|
|
||||||
|
this.publishMetric(new ConnectorMetricEvent(this, metricsList));
|
||||||
|
|
||||||
|
return metricsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VersionItemTypeEnum collectorType() {
|
||||||
|
return METRIC_CONNECT_CONNECTOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************** private method ****************************************************/
|
||||||
|
|
||||||
|
private void collectMetrics(Long connectClusterId, String connectorName, ConnectorMetrics metrics, List<VersionControlItem> items) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
ConnectorTypeEnum connectorType = connectorService.getConnectorType(connectClusterId, connectorName);
|
||||||
|
|
||||||
|
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME);
|
||||||
|
|
||||||
|
for (VersionControlItem v : items) {
|
||||||
|
try {
|
||||||
|
Result<ConnectorMetrics> ret = connectorMetricService.collectConnectClusterMetricsFromKafka(connectClusterId, connectorName, v.getName(), connectorType);
|
||||||
|
if (null == ret || ret.failed() || null == ret.getData()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
metrics.putMetric(ret.getData().getMetrics());
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error(
|
||||||
|
"method=collectMetrics||connectClusterId={}||connectorName={}||metric={}||errMsg=exception!",
|
||||||
|
connectClusterId, connectorName, v.getName(), e
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 记录采集性能
|
||||||
|
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, (System.currentTimeMillis() - startTime) / 1000.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.LoggerUtil;
|
||||||
|
import com.xiaojukeji.know.streaming.km.core.service.cluster.ClusterPhyService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
public abstract class AbstractKafkaMetricCollector<M> extends AbstractMetricCollector<M, ClusterPhy> {
|
||||||
|
private static final ILog LOGGER = LogFactory.getLog(AbstractMetricCollector.class);
|
||||||
|
|
||||||
|
protected static final ILog METRIC_COLLECTED_LOGGER = LoggerUtil.getMetricCollectedLogger();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClusterPhyService clusterPhyService;
|
||||||
|
|
||||||
|
public abstract List<M> collectKafkaMetrics(ClusterPhy clusterPhy);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getClusterVersion(ClusterPhy clusterPhy){
|
||||||
|
return clusterPhyService.getVersionFromCacheFirst(clusterPhy.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collectMetrics(ClusterPhy clusterPhy) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 采集指标
|
||||||
|
List<M> metricsList = this.collectKafkaMetrics(clusterPhy);
|
||||||
|
|
||||||
|
// 输出耗时信息
|
||||||
|
LOGGER.info(
|
||||||
|
"metricType={}||clusterPhyId={}||costTimeUnitMs={}",
|
||||||
|
this.collectorType().getMessage(), clusterPhy.getId(), System.currentTimeMillis() - startTime
|
||||||
|
);
|
||||||
|
|
||||||
|
// 输出采集到的指标信息
|
||||||
|
METRIC_COLLECTED_LOGGER.debug("metricType={}||clusterPhyId={}||metrics={}!",
|
||||||
|
this.collectorType().getMessage(), clusterPhy.getId(), ConvertUtil.obj2Json(metricsList)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.broker.Broker;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BrokerMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BrokerMetrics;
|
||||||
@@ -27,7 +26,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class BrokerMetricCollector extends AbstractMetricCollector<BrokerMetrics> {
|
public class BrokerMetricCollector extends AbstractKafkaMetricCollector<BrokerMetrics> {
|
||||||
private static final ILog LOGGER = LogFactory.getLog(BrokerMetricCollector.class);
|
private static final ILog LOGGER = LogFactory.getLog(BrokerMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -44,7 +43,7 @@ public class BrokerMetricCollector extends AbstractMetricCollector<BrokerMetrics
|
|||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
|
|
||||||
List<Broker> brokers = brokerService.listAliveBrokersFromDB(clusterPhy.getId());
|
List<Broker> brokers = brokerService.listAliveBrokersFromDB(clusterPhy.getId());
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ClusterMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
@@ -25,7 +24,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class ClusterMetricCollector extends AbstractMetricCollector<ClusterMetrics> {
|
public class ClusterMetricCollector extends AbstractKafkaMetricCollector<ClusterMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(ClusterMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(ClusterMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -38,7 +37,7 @@ public class ClusterMetricCollector extends AbstractMetricCollector<ClusterMetri
|
|||||||
public List<ClusterMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
public List<ClusterMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
||||||
Long startTime = System.currentTimeMillis();
|
Long startTime = System.currentTimeMillis();
|
||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
ClusterMetrics metrics = new ClusterMetrics(clusterPhyId, clusterPhy.getKafkaVersion());
|
ClusterMetrics metrics = new ClusterMetrics(clusterPhyId, clusterPhy.getKafkaVersion());
|
||||||
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME);
|
metrics.putMetric(Constant.COLLECT_METRICS_COST_TIME_METRICS_NAME, Constant.COLLECT_METRICS_ERROR_COST_TIME);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.GroupMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
@@ -28,7 +27,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class GroupMetricCollector extends AbstractMetricCollector<GroupMetrics> {
|
public class GroupMetricCollector extends AbstractKafkaMetricCollector<GroupMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(GroupMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(GroupMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -46,7 +45,7 @@ public class GroupMetricCollector extends AbstractMetricCollector<GroupMetrics>
|
|||||||
|
|
||||||
List<String> groupNameList = new ArrayList<>();
|
List<String> groupNameList = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
groupNameList = groupService.listGroupsFromKafka(clusterPhyId);
|
groupNameList = groupService.listGroupsFromKafka(clusterPhy);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("method=collectKafkaMetrics||clusterPhyId={}||msg=exception!", clusterPhyId, e);
|
LOGGER.error("method=collectKafkaMetrics||clusterPhyId={}||msg=exception!", clusterPhyId, e);
|
||||||
}
|
}
|
||||||
@@ -55,7 +54,7 @@ public class GroupMetricCollector extends AbstractMetricCollector<GroupMetrics>
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
@@ -26,7 +25,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class PartitionMetricCollector extends AbstractMetricCollector<PartitionMetrics> {
|
public class PartitionMetricCollector extends AbstractKafkaMetricCollector<PartitionMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(PartitionMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(PartitionMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -42,7 +41,7 @@ public class PartitionMetricCollector extends AbstractMetricCollector<PartitionM
|
|||||||
public List<PartitionMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
public List<PartitionMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
List<Topic> topicList = topicService.listTopicsFromCacheFirst(clusterPhyId);
|
List<Topic> topicList = topicService.listTopicsFromCacheFirst(clusterPhyId);
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ReplicationMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.ReplicationMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition;
|
||||||
@@ -27,7 +26,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class ReplicaMetricCollector extends AbstractMetricCollector<ReplicationMetrics> {
|
public class ReplicaMetricCollector extends AbstractKafkaMetricCollector<ReplicationMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(ReplicaMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(ReplicaMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -42,8 +41,8 @@ public class ReplicaMetricCollector extends AbstractMetricCollector<ReplicationM
|
|||||||
@Override
|
@Override
|
||||||
public List<ReplicationMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
public List<ReplicationMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
|
||||||
List<Partition> partitions = partitionService.listPartitionFromCacheFirst(clusterPhyId);
|
List<Partition> partitions = partitionService.listPartitionFromCacheFirst(clusterPhyId);
|
||||||
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.result.Result;
|
||||||
@@ -30,7 +29,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class TopicMetricCollector extends AbstractMetricCollector<TopicMetrics> {
|
public class TopicMetricCollector extends AbstractKafkaMetricCollector<TopicMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(TopicMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(TopicMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -48,7 +47,7 @@ public class TopicMetricCollector extends AbstractMetricCollector<TopicMetrics>
|
|||||||
public List<TopicMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
public List<TopicMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
List<Topic> topics = topicService.listTopicsFromCacheFirst(clusterPhyId);
|
List<Topic> topics = topicService.listTopicsFromCacheFirst(clusterPhyId);
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
|
|
||||||
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
FutureWaitUtil<Void> future = this.getFutureUtilByClusterPhyId(clusterPhyId);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.collector.metric.kafka;
|
|||||||
|
|
||||||
import com.didiglobal.logi.log.ILog;
|
import com.didiglobal.logi.log.ILog;
|
||||||
import com.didiglobal.logi.log.LogFactory;
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
import com.xiaojukeji.know.streaming.km.collector.metric.AbstractMetricCollector;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.cluster.ClusterPhy;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.ZKConfig;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkacontroller.KafkaController;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafkacontroller.KafkaController;
|
||||||
@@ -34,7 +33,7 @@ import static com.xiaojukeji.know.streaming.km.common.enums.version.VersionItemT
|
|||||||
* @author didi
|
* @author didi
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class ZookeeperMetricCollector extends AbstractMetricCollector<ZookeeperMetrics> {
|
public class ZookeeperMetricCollector extends AbstractKafkaMetricCollector<ZookeeperMetrics> {
|
||||||
protected static final ILog LOGGER = LogFactory.getLog(ZookeeperMetricCollector.class);
|
protected static final ILog LOGGER = LogFactory.getLog(ZookeeperMetricCollector.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -53,7 +52,7 @@ public class ZookeeperMetricCollector extends AbstractMetricCollector<ZookeeperM
|
|||||||
public List<ZookeeperMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
public List<ZookeeperMetrics> collectKafkaMetrics(ClusterPhy clusterPhy) {
|
||||||
Long startTime = System.currentTimeMillis();
|
Long startTime = System.currentTimeMillis();
|
||||||
Long clusterPhyId = clusterPhy.getId();
|
Long clusterPhyId = clusterPhy.getId();
|
||||||
List<VersionControlItem> items = versionControlService.listVersionControlItem(clusterPhyId, collectorType().getCode());
|
List<VersionControlItem> items = versionControlService.listVersionControlItem(this.getClusterVersion(clusterPhy), collectorType().getCode());
|
||||||
List<ZookeeperInfo> aliveZKList = zookeeperService.listFromDBByCluster(clusterPhyId)
|
List<ZookeeperInfo> aliveZKList = zookeeperService.listFromDBByCluster(clusterPhyId)
|
||||||
.stream()
|
.stream()
|
||||||
.filter(elem -> Constant.ALIVE.equals(elem.getStatus()))
|
.filter(elem -> Constant.ALIVE.equals(elem.getStatus()))
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.sink.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectClusterMetricEvent;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect.ConnectClusterMetricPO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CONNECT_CLUSTER_INDEX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/7
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class ConnectClusterMetricESSender extends AbstractMetricESSender implements ApplicationListener<ConnectClusterMetricEvent> {
|
||||||
|
protected static final ILog LOGGER = LogFactory.getLog(ConnectClusterMetricESSender.class);
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init(){
|
||||||
|
LOGGER.info("class=ConnectClusterMetricESSender||method=init||msg=init finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onApplicationEvent(ConnectClusterMetricEvent event) {
|
||||||
|
send2es(CONNECT_CLUSTER_INDEX, ConvertUtil.list2List(event.getConnectClusterMetrics(), ConnectClusterMetricPO.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.collector.sink.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.collector.sink.AbstractMetricESSender;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect.ConnectorMetricEvent;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.metrice.connect.ConnectorMetricPO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static com.xiaojukeji.know.streaming.km.persistence.es.template.TemplateConstant.CONNECT_CONNECTOR_INDEX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/7
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class ConnectorMetricESSender extends AbstractMetricESSender implements ApplicationListener<ConnectorMetricEvent> {
|
||||||
|
protected static final ILog LOGGER = LogFactory.getLog(ConnectorMetricESSender.class);
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init(){
|
||||||
|
LOGGER.info("class=ConnectorMetricESSender||method=init||msg=init finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onApplicationEvent(ConnectorMetricEvent event) {
|
||||||
|
send2es(CONNECT_CONNECTOR_INDEX, ConvertUtil.list2List(event.getConnectorMetricsList(), ConnectorMetricPO.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.cluster;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.pagination.PaginationSortDTO;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/24
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ClusterConnectorsOverviewDTO extends PaginationSortDTO {
|
||||||
|
@NotNull(message = "latestMetricNames不允许为空")
|
||||||
|
@ApiModelProperty("需要指标点的信息")
|
||||||
|
private List<String> latestMetricNames;
|
||||||
|
|
||||||
|
@NotNull(message = "metricLines不允许为空")
|
||||||
|
@ApiModelProperty("需要指标曲线的信息")
|
||||||
|
private MetricDTO metricLines;
|
||||||
|
|
||||||
|
@ApiModelProperty("需要排序的指标名称列表,比较第一个不为空的metric")
|
||||||
|
private List<String> sortMetricNameList;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ApiModel(description = "集群Connector")
|
||||||
|
public class ClusterConnectorDTO extends BaseDTO {
|
||||||
|
@NotNull(message = "connectClusterId不允许为空")
|
||||||
|
@ApiModelProperty(value = "Connector集群ID", example = "1")
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
@NotBlank(message = "name不允许为空串")
|
||||||
|
@ApiModelProperty(value = "Connector名称", example = "know-streaming-connector")
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
public ClusterConnectorDTO(Long connectClusterId, String connectorName) {
|
||||||
|
this.connectClusterId = connectClusterId;
|
||||||
|
this.connectorName = connectorName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.cluster;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.BaseDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "集群Connector")
|
||||||
|
public class ConnectClusterDTO extends BaseDTO {
|
||||||
|
@ApiModelProperty(value = "Connect集群ID", example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群名称", example = "know-streaming")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群URL", example = "http://127.0.0.1:8080")
|
||||||
|
private String clusterUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群版本", example = "2.5.1")
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "JMX配置", example = "")
|
||||||
|
private String jmxProperties;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "操作Connector")
|
||||||
|
public class ConnectorActionDTO extends ClusterConnectorDTO {
|
||||||
|
@NotBlank(message = "action不允许为空串")
|
||||||
|
@ApiModelProperty(value = "Connector名称", example = "stop|restart|resume")
|
||||||
|
private String action;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "修改Connector配置")
|
||||||
|
public class ConnectorConfigModifyDTO extends ClusterConnectorDTO {
|
||||||
|
@NotNull(message = "configs不允许为空")
|
||||||
|
@ApiModelProperty(value = "配置", example = "")
|
||||||
|
private Properties configs;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "创建Connector")
|
||||||
|
public class ConnectorCreateDTO extends ClusterConnectorDTO {
|
||||||
|
@NotNull(message = "configs不允许为空")
|
||||||
|
@ApiModelProperty(value = "配置", example = "")
|
||||||
|
private Properties configs;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "删除Connector")
|
||||||
|
public class ConnectorDeleteDTO extends ClusterConnectorDTO {
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.connect.task;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.connector.ConnectorActionDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 2022-10-17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "操作Task")
|
||||||
|
public class TaskActionDTO extends ConnectorActionDTO {
|
||||||
|
@NotNull(message = "taskId不允许为NULL")
|
||||||
|
@ApiModelProperty(value = "taskId", example = "123")
|
||||||
|
private Long taskId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ApiModel(description = "Connect集群指标查询信息")
|
||||||
|
public class MetricsConnectClustersDTO extends MetricDTO {
|
||||||
|
@ApiModelProperty("Connect集群ID")
|
||||||
|
private List<Long> connectClusterIdList;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.connect.ClusterConnectorDTO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.dto.metrices.MetricDTO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author didi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ApiModel(description = "Connector指标查询信息")
|
||||||
|
public class MetricsConnectorsDTO extends MetricDTO {
|
||||||
|
@ApiModelProperty("Connector列表")
|
||||||
|
private List<ClusterConnectorDTO> connectorNameList;
|
||||||
|
}
|
||||||
@@ -3,7 +3,6 @@ package com.xiaojukeji.know.streaming.km.common.bean.entity.broker;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.TypeReference;
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.common.IpPortData;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.common.IpPortData;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.po.broker.BrokerPO;
|
import com.xiaojukeji.know.streaming.km.common.bean.po.broker.BrokerPO;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.xiaojukeji.know.streaming.km.common.bean.entity.config.metric;
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.config.metric;
|
||||||
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.EntityIdInterface;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ConnectCluster implements Serializable, Comparable<ConnectCluster>, EntityIdInterface {
|
||||||
|
/**
|
||||||
|
* 集群ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群名字
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组
|
||||||
|
*/
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组状态,也表示集群状态
|
||||||
|
* @see com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum
|
||||||
|
*/
|
||||||
|
private Integer state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker中显示的leader url信息
|
||||||
|
*/
|
||||||
|
private String memberLeaderUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本信息
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jmx配置
|
||||||
|
* @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig
|
||||||
|
*/
|
||||||
|
private String jmxProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群地址
|
||||||
|
*/
|
||||||
|
private String clusterUrl;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(ConnectCluster connectCluster) {
|
||||||
|
return this.id.compareTo(connectCluster.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ConnectClusterMetadata implements Serializable {
|
||||||
|
/**
|
||||||
|
* Kafka集群名字
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组
|
||||||
|
*/
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组状态,也表示集群状态
|
||||||
|
*/
|
||||||
|
private GroupStateEnum state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker中显示的leader url信息
|
||||||
|
*/
|
||||||
|
private String memberLeaderUrl;
|
||||||
|
|
||||||
|
public ConnectClusterMetadata(Long kafkaClusterPhyId, String groupName, GroupStateEnum state, String memberLeaderUrl) {
|
||||||
|
this.kafkaClusterPhyId = kafkaClusterPhyId;
|
||||||
|
this.groupName = groupName;
|
||||||
|
this.state = state;
|
||||||
|
this.memberLeaderUrl = memberLeaderUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect;
|
||||||
|
|
||||||
|
import com.didiglobal.logi.log.ILog;
|
||||||
|
import com.didiglobal.logi.log.LogFactory;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ConnectWorker implements Serializable {
|
||||||
|
|
||||||
|
protected static final ILog LOGGER = LogFactory.getLog(ConnectWorker.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成员ID
|
||||||
|
*/
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主机
|
||||||
|
*/
|
||||||
|
private String host;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jmx端口
|
||||||
|
*/
|
||||||
|
private Integer jmxPort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* leader的URL
|
||||||
|
*/
|
||||||
|
private String leaderUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1:是leader,0:不是leader
|
||||||
|
*/
|
||||||
|
private Integer leader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker地址
|
||||||
|
*/
|
||||||
|
private String workerId;
|
||||||
|
|
||||||
|
public ConnectWorker(Long kafkaClusterPhyId,
|
||||||
|
Long connectClusterId,
|
||||||
|
String memberId,
|
||||||
|
String host,
|
||||||
|
Integer jmxPort,
|
||||||
|
String url,
|
||||||
|
String leaderUrl,
|
||||||
|
Integer leader) {
|
||||||
|
this.kafkaClusterPhyId = kafkaClusterPhyId;
|
||||||
|
this.connectClusterId = connectClusterId;
|
||||||
|
this.memberId = memberId;
|
||||||
|
this.host = host;
|
||||||
|
this.jmxPort = jmxPort;
|
||||||
|
this.url = url;
|
||||||
|
this.leaderUrl = leaderUrl;
|
||||||
|
this.leader = leader;
|
||||||
|
String workerId = CommonUtils.getWorkerId(url);
|
||||||
|
if (workerId == null) {
|
||||||
|
workerId = memberId;
|
||||||
|
LOGGER.error("class=ConnectWorker||connectClusterId={}||memberId={}||url={}||msg=analysis url fail"
|
||||||
|
, connectClusterId, memberId, url);
|
||||||
|
}
|
||||||
|
this.workerId = workerId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class WorkerConnector implements Serializable {
|
||||||
|
/**
|
||||||
|
* connect集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector名称
|
||||||
|
*/
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
private String workerMemberId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务状态
|
||||||
|
*/
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务ID
|
||||||
|
*/
|
||||||
|
private Integer taskId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker信息
|
||||||
|
*/
|
||||||
|
private String workerId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误原因
|
||||||
|
*/
|
||||||
|
private String trace;
|
||||||
|
|
||||||
|
public WorkerConnector(Long kafkaClusterPhyId, Long connectClusterId, String connectorName, String workerMemberId, Integer taskId, String state, String workerId, String trace) {
|
||||||
|
this.kafkaClusterPhyId = kafkaClusterPhyId;
|
||||||
|
this.connectClusterId = connectClusterId;
|
||||||
|
this.connectorName = connectorName;
|
||||||
|
this.workerMemberId = workerMemberId;
|
||||||
|
this.taskId = taskId;
|
||||||
|
this.state = state;
|
||||||
|
this.workerId = workerId;
|
||||||
|
this.trace = trace;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigInfo {
|
||||||
|
private ConnectConfigKeyInfo definition;
|
||||||
|
|
||||||
|
private ConnectConfigValueInfo value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigInfos;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigInfos
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigInfos {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private int errorCount;
|
||||||
|
|
||||||
|
private List<String> groups;
|
||||||
|
|
||||||
|
private List<ConnectConfigInfo> configs;
|
||||||
|
|
||||||
|
public ConnectConfigInfos(ConfigInfos configInfos) {
|
||||||
|
this.name = configInfos.name();
|
||||||
|
this.errorCount = configInfos.errorCount();
|
||||||
|
this.groups = configInfos.groups();
|
||||||
|
|
||||||
|
this.configs = new ArrayList<>();
|
||||||
|
for (ConfigInfo configInfo: configInfos.values()) {
|
||||||
|
ConnectConfigKeyInfo definition = new ConnectConfigKeyInfo();
|
||||||
|
definition.setName(configInfo.configKey().name());
|
||||||
|
definition.setType(configInfo.configKey().type());
|
||||||
|
definition.setRequired(configInfo.configKey().required());
|
||||||
|
definition.setDefaultValue(configInfo.configKey().defaultValue());
|
||||||
|
definition.setImportance(configInfo.configKey().importance());
|
||||||
|
definition.setDocumentation(configInfo.configKey().documentation());
|
||||||
|
definition.setGroup(configInfo.configKey().group());
|
||||||
|
definition.setOrderInGroup(configInfo.configKey().orderInGroup());
|
||||||
|
definition.setWidth(configInfo.configKey().width());
|
||||||
|
definition.setDisplayName(configInfo.configKey().displayName());
|
||||||
|
definition.setDependents(configInfo.configKey().dependents());
|
||||||
|
|
||||||
|
ConnectConfigValueInfo value = new ConnectConfigValueInfo();
|
||||||
|
value.setName(configInfo.configValue().name());
|
||||||
|
value.setValue(configInfo.configValue().value());
|
||||||
|
value.setRecommendedValues(configInfo.configValue().recommendedValues());
|
||||||
|
value.setErrors(configInfo.configValue().errors());
|
||||||
|
value.setVisible(configInfo.configValue().visible());
|
||||||
|
|
||||||
|
ConnectConfigInfo connectConfigInfo = new ConnectConfigInfo();
|
||||||
|
connectConfigInfo.setDefinition(definition);
|
||||||
|
connectConfigInfo.setValue(value);
|
||||||
|
|
||||||
|
this.configs.add(connectConfigInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigKeyInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigKeyInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigKeyInfo {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private boolean required;
|
||||||
|
|
||||||
|
private String defaultValue;
|
||||||
|
|
||||||
|
private String importance;
|
||||||
|
|
||||||
|
private String documentation;
|
||||||
|
|
||||||
|
private String group;
|
||||||
|
|
||||||
|
private int orderInGroup;
|
||||||
|
|
||||||
|
private String width;
|
||||||
|
|
||||||
|
private String displayName;
|
||||||
|
|
||||||
|
private List<String> dependents;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.config;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigValueInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigValueInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigValueInfo {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
private List<String> recommendedValues;
|
||||||
|
|
||||||
|
private List<String> errors;
|
||||||
|
|
||||||
|
private boolean visible;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConnectorStateInfo.AbstractState
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public abstract class KSAbstractConnectState {
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
private String trace;
|
||||||
|
|
||||||
|
@JSONField(name="worker_id")
|
||||||
|
@JsonProperty("worker_id")
|
||||||
|
private String workerId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class KSConnector implements Serializable {
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connect集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector名称
|
||||||
|
*/
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector类名
|
||||||
|
*/
|
||||||
|
private String connectorClassName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector类型
|
||||||
|
*/
|
||||||
|
private String connectorType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访问过的Topic列表
|
||||||
|
*/
|
||||||
|
private String topics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* task数
|
||||||
|
*/
|
||||||
|
private Integer taskCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
private String state;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorType;
|
||||||
|
import org.apache.kafka.connect.util.ConnectorTaskId;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* copy from:
|
||||||
|
* @see org.apache.kafka.connect.runtime.rest.entities.ConnectorInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class KSConnectorInfo implements Serializable {
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Map<String, String> config;
|
||||||
|
|
||||||
|
private List<ConnectorTaskId> tasks;
|
||||||
|
|
||||||
|
private ConnectorType type;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConnectorStateInfo.ConnectorState
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class KSConnectorState extends KSAbstractConnectState {
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConnectorStateInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class KSConnectorStateInfo {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private KSConnectorState connector;
|
||||||
|
|
||||||
|
private List<KSTaskState> tasks;
|
||||||
|
|
||||||
|
private ConnectorType type;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConnectorStateInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConnectorStateInfo.TaskState
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class KSTaskState extends KSAbstractConnectState {
|
||||||
|
private int id;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.connect.plugin;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/10/17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connect插件信息")
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ConnectPluginBasic implements Serializable {
|
||||||
|
/**
|
||||||
|
* Json序列化时对应的字段
|
||||||
|
*/
|
||||||
|
@JSONField(name="class")
|
||||||
|
@JsonProperty("class")
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
private String helpDocLink;
|
||||||
|
|
||||||
|
public ConnectPluginBasic(String className, String type, String version, String helpDocLink) {
|
||||||
|
this.className = className;
|
||||||
|
this.type = type;
|
||||||
|
this.version = version;
|
||||||
|
this.helpDocLink = helpDocLink;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.xiaojukeji.know.streaming.km.common.bean.entity.group;
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.group;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.kafka.KSGroupDescription;
|
||||||
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum;
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.group.GroupTypeEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.kafka.clients.admin.ConsumerGroupDescription;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -61,9 +61,9 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
private int coordinatorId;
|
private int coordinatorId;
|
||||||
|
|
||||||
public Group(Long clusterPhyId, String groupName, ConsumerGroupDescription groupDescription) {
|
public Group(Long clusterPhyId, String groupName, KSGroupDescription groupDescription) {
|
||||||
this.clusterPhyId = clusterPhyId;
|
this.clusterPhyId = clusterPhyId;
|
||||||
this.type = groupDescription.isSimpleConsumerGroup()? GroupTypeEnum.CONSUMER: GroupTypeEnum.CONNECTOR;
|
this.type = GroupTypeEnum.getTypeByProtocolType(groupDescription.protocolType());
|
||||||
this.name = groupName;
|
this.name = groupName;
|
||||||
this.state = GroupStateEnum.getByRawState(groupDescription.state());
|
this.state = GroupStateEnum.getByRawState(groupDescription.state());
|
||||||
this.memberCount = groupDescription.members() == null ? 0 : groupDescription.members().size();
|
this.memberCount = groupDescription.members() == null ? 0 : groupDescription.members().size();
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/9
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectClusterParam extends ClusterParam{
|
||||||
|
protected Long connectClusterId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.param.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterParam;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterPhyParam;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ConnectClusterParam;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/8
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectorParam extends ConnectClusterParam {
|
||||||
|
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
public ConnectorParam(Long connectClusterId, String connectorName) {
|
||||||
|
super(connectClusterId);
|
||||||
|
this.connectorName = connectorName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.MetricParam;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/1
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectClusterMetricParam extends MetricParam {
|
||||||
|
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
private String metric;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.metric.MetricParam;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/2
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ConnectorMetricParam extends MetricParam {
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
private String metricName;
|
||||||
|
|
||||||
|
private ConnectorTypeEnum connectorType;
|
||||||
|
|
||||||
|
public ConnectorMetricParam(Long connectClusterId, String connectorName, String metricName, ConnectorTypeEnum connectorType) {
|
||||||
|
this.connectClusterId = connectClusterId;
|
||||||
|
this.connectorName = connectorName;
|
||||||
|
this.metricName = metricName;
|
||||||
|
this.connectorType = connectorType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -100,6 +100,13 @@ public class Result<T> extends BaseResult {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> buildFrom(Result ret) {
|
||||||
|
Result<T> result = new Result<>();
|
||||||
|
result.setCode(ret.getCode());
|
||||||
|
result.setMessage(ret.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static <T> Result<T> buildFrom(ValidateKafkaAddressErrorEnum errorEnum, String msg) {
|
public static <T> Result<T> buildFrom(ValidateKafkaAddressErrorEnum errorEnum, String msg) {
|
||||||
Result<T> result = new Result<>();
|
Result<T> result = new Result<>();
|
||||||
result.setCode(errorEnum.getCode());
|
result.setCode(errorEnum.getCode());
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ public enum ResultStatus {
|
|||||||
* 调用错误, [8000, 9000)
|
* 调用错误, [8000, 9000)
|
||||||
*/
|
*/
|
||||||
KAFKA_OPERATE_FAILED(8010, "Kafka操作失败"),
|
KAFKA_OPERATE_FAILED(8010, "Kafka操作失败"),
|
||||||
|
KAFKA_CONNECTOR_OPERATE_FAILED(8011, "KafkaConnect操作失败"),
|
||||||
|
KAFKA_CONNECTOR_READ_FAILED(8012, "KafkaConnect读失败"),
|
||||||
MYSQL_OPERATE_FAILED(8020, "MySQL操作失败"),
|
MYSQL_OPERATE_FAILED(8020, "MySQL操作失败"),
|
||||||
ZK_OPERATE_FAILED(8030, "ZK操作失败"),
|
ZK_OPERATE_FAILED(8030, "ZK操作失败"),
|
||||||
ZK_FOUR_LETTER_CMD_FORBIDDEN(8031, "ZK四字命令被禁止"),
|
ZK_FOUR_LETTER_CMD_FORBIDDEN(8031, "ZK四字命令被禁止"),
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.version;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.connect.ConnectorTypeEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/24
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class VersionConnectJmxInfo extends VersionJmxInfo{
|
||||||
|
private ConnectorTypeEnum type;
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package com.xiaojukeji.know.streaming.km.common.bean.entity.version;
|
|||||||
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum;
|
import com.xiaojukeji.know.streaming.km.common.enums.version.VersionEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper;
|
package com.xiaojukeji.know.streaming.km.common.bean.entity.zookeeper;
|
||||||
|
|
||||||
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.Tuple;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.zookeeper.data.Stat;
|
import org.apache.zookeeper.data.Stat;
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.event.cluster.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.enums.operaterecord.OperationEnum;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/7
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class ConnectClusterLoadChangedEvent extends ApplicationEvent {
|
||||||
|
|
||||||
|
private ConnectCluster inDBConnectCluster;
|
||||||
|
|
||||||
|
private ConnectCluster inCacheConnectCluster;
|
||||||
|
|
||||||
|
private final OperationEnum operationEnum;
|
||||||
|
|
||||||
|
public ConnectClusterLoadChangedEvent(Object source, ConnectCluster inDBConnectCluster, ConnectCluster inCacheConnectCluster, OperationEnum operationEnum) {
|
||||||
|
super(source);
|
||||||
|
this.inDBConnectCluster = inDBConnectCluster;
|
||||||
|
this.inCacheConnectCluster = inCacheConnectCluster;
|
||||||
|
this.operationEnum = operationEnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectClusterMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/7
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class ConnectClusterMetricEvent extends BaseMetricEvent {
|
||||||
|
private List<ConnectClusterMetrics> connectClusterMetrics;
|
||||||
|
|
||||||
|
public ConnectClusterMetricEvent(Object source, List<ConnectClusterMetrics> connectClusterMetrics) {
|
||||||
|
super(source);
|
||||||
|
this.connectClusterMetrics = connectClusterMetrics;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.event.metric.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.event.metric.BaseMetricEvent;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/7
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class ConnectorMetricEvent extends BaseMetricEvent {
|
||||||
|
private List<ConnectorMetrics> connectorMetricsList;
|
||||||
|
|
||||||
|
public ConnectorMetricEvent(Object source, List<ConnectorMetrics> connectorMetricsList) {
|
||||||
|
super(source);
|
||||||
|
this.connectorMetricsList = connectorMetricsList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.po.connect;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "connect_cluster")
|
||||||
|
public class ConnectClusterPO extends BasePO {
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群名字
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组
|
||||||
|
*/
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组状态,也表示集群状态
|
||||||
|
*/
|
||||||
|
private Integer state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群地址
|
||||||
|
*/
|
||||||
|
private String clusterUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker中显示的leader url信息
|
||||||
|
*/
|
||||||
|
private String memberLeaderUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本信息
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jmx配置
|
||||||
|
* @see com.xiaojukeji.know.streaming.km.common.bean.entity.config.JmxConfig
|
||||||
|
*/
|
||||||
|
private String jmxProperties;
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.po.connect;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "worker")
|
||||||
|
public class ConnectWorkerPO extends BasePO {
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成员ID
|
||||||
|
*/
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主机
|
||||||
|
*/
|
||||||
|
private String host;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jmx端口
|
||||||
|
*/
|
||||||
|
private Integer jmxPort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* leader的URL
|
||||||
|
*/
|
||||||
|
private String leaderUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1:是leader,0:不是leader
|
||||||
|
*/
|
||||||
|
private Integer leader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker地址
|
||||||
|
*/
|
||||||
|
private String workerId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.po.connect;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "connector")
|
||||||
|
public class ConnectorPO extends BasePO {
|
||||||
|
/**
|
||||||
|
* Kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connect集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector名称
|
||||||
|
*/
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector类名
|
||||||
|
*/
|
||||||
|
private String connectorClassName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector类型
|
||||||
|
*/
|
||||||
|
private String connectorType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访问过的Topic列表
|
||||||
|
*/
|
||||||
|
private String topics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* task数
|
||||||
|
*/
|
||||||
|
private Integer taskCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
private String state;
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.po.connect;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.BasePO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.Constant;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName(Constant.MYSQL_KC_TABLE_NAME_PREFIX + "worker_connector")
|
||||||
|
public class WorkerConnectorPO extends BasePO {
|
||||||
|
/**
|
||||||
|
* connect集群ID
|
||||||
|
*/
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kafka集群ID
|
||||||
|
*/
|
||||||
|
private Long kafkaClusterPhyId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connector名称
|
||||||
|
*/
|
||||||
|
private String connectorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker成员ID
|
||||||
|
*/
|
||||||
|
private String workerMemberId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务ID
|
||||||
|
*/
|
||||||
|
private Integer taskId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* task状态
|
||||||
|
*/
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* worker信息
|
||||||
|
*/
|
||||||
|
private String workerId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群的Connect集群信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connect集群基本信息")
|
||||||
|
public class ConnectClusterBasicCombineExistVO extends ConnectClusterBasicVO {
|
||||||
|
@ApiModelProperty(value="是否存在", example = "true")
|
||||||
|
protected Boolean exist;
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群的Connect集群信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connect集群基本信息")
|
||||||
|
public class ConnectClusterBasicVO extends BaseVO {
|
||||||
|
@ApiModelProperty(value = "Connect集群ID", example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群名称", example = "know-streaming")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群使用的Group", example = "know-streaming")
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群URL", example = "http://127.0.0.1:8080")
|
||||||
|
private String clusterUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群获取到的URL", example = "http://127.0.0.1:8080")
|
||||||
|
private String memberLeaderUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群版本", example = "2.5.1")
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "JMX配置", example = "")
|
||||||
|
private String jmxProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群使用的消费组状态,也表示集群状态
|
||||||
|
* @see com.xiaojukeji.know.streaming.km.common.enums.group.GroupStateEnum
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "状态,2表示Dead,只有Dead才可以删除", example = "")
|
||||||
|
private Integer state;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群Connectors状态信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/10/17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "集群Connects状态信息")
|
||||||
|
public class ConnectStateVO extends BaseVO {
|
||||||
|
@ApiModelProperty(value = "健康检查状态", example = "1")
|
||||||
|
private Integer healthState;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "健康检查通过数", example = "1")
|
||||||
|
private Integer healthCheckPassed;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "健康检查总数", example = "1")
|
||||||
|
private Integer healthCheckTotal;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "connect集群数", example = "1")
|
||||||
|
private Integer connectClusterCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "worker数", example = "1")
|
||||||
|
private Integer workerCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "总Connector数", example = "1")
|
||||||
|
private Integer totalConnectorCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存活Connector数", example = "1")
|
||||||
|
private Integer aliveConnectorCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "总Task数", example = "1")
|
||||||
|
private Integer totalTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存活Task数", example = "1")
|
||||||
|
private Integer aliveTaskCount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群Connector信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connector概览信息")
|
||||||
|
public class ClusterConnectorOverviewVO extends ConnectorBasicVO {
|
||||||
|
@ApiModelProperty(value = "Connector插件名称", example = "know-streaming")
|
||||||
|
private String connectorClassName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connector类型", example = "source")
|
||||||
|
private String connectorType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.apache.kafka.connect.runtime.AbstractStatus.State
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "状态", example = "RUNNING")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Task数", example = "100")
|
||||||
|
private Integer taskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "访问的Topic列表", example = "")
|
||||||
|
private List<String> topicNameList;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "多个指标的当前值, 包括健康分/LogSize等")
|
||||||
|
private BaseMetrics latestMetrics;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "多个指标的历史曲线值,包括LogSize/BytesIn等")
|
||||||
|
private List<MetricLineVO> metricLines;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群Worker信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Worker概览信息")
|
||||||
|
public class ClusterWorkerOverviewVO extends BaseVO {
|
||||||
|
@ApiModelProperty(value = "Connect集群ID", example = "1")
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群名称", example = "know-streaming")
|
||||||
|
private String connectClusterName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "worker主机", example = "know-streaming")
|
||||||
|
private String workerHost;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connector数", example = "10")
|
||||||
|
private Integer connectorCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Task数", example = "10")
|
||||||
|
private Integer taskCount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群Connector信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connector基本信息")
|
||||||
|
public class ConnectorBasicCombineExistVO extends ConnectorBasicVO {
|
||||||
|
@ApiModelProperty(value="是否存在", example = "true")
|
||||||
|
protected Boolean exist;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集群Connector信息
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connector基本信息")
|
||||||
|
public class ConnectorBasicVO extends BaseVO {
|
||||||
|
@ApiModelProperty(value = "Connect集群ID", example = "1")
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connect集群名称", example = "know-streaming")
|
||||||
|
private String connectClusterName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Connector名称", example = "know-streaming")
|
||||||
|
private String connectorName;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.connector;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/15
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ConnectorStateVO {
|
||||||
|
@ApiModelProperty(value = "connect集群ID", example = "1")
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "connector名称", example = "input1")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "connector类型", example = "source")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "connector状态", example = "running")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "总Task数", example = "1")
|
||||||
|
private Integer totalTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "存活Task数", example = "1")
|
||||||
|
private Integer aliveTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "总Worker数", example = "1")
|
||||||
|
private Integer totalWorkerCount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigInfo;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigInfoVO {
|
||||||
|
private ConnectConfigKeyInfoVO definition;
|
||||||
|
|
||||||
|
private ConnectConfigValueInfoVO value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigInfos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigInfos
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigInfosVO {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private int errorCount;
|
||||||
|
|
||||||
|
private List<String> groups;
|
||||||
|
|
||||||
|
private List<ConnectConfigInfoVO> configs;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigKeyInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigKeyInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigKeyInfoVO {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private boolean required;
|
||||||
|
|
||||||
|
private String defaultValue;
|
||||||
|
|
||||||
|
private String importance;
|
||||||
|
|
||||||
|
private String documentation;
|
||||||
|
|
||||||
|
private String group;
|
||||||
|
|
||||||
|
private int orderInGroup;
|
||||||
|
|
||||||
|
private String width;
|
||||||
|
|
||||||
|
private String displayName;
|
||||||
|
|
||||||
|
private List<String> dependents;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.apache.kafka.connect.runtime.rest.entities.ConfigValueInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see ConfigValueInfo
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConnectConfigValueInfoVO {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
private List<String> recommendedValues;
|
||||||
|
|
||||||
|
private List<String> errors;
|
||||||
|
|
||||||
|
private boolean visible;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.plugin;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/10/17
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Connect插件信息")
|
||||||
|
public class ConnectPluginBasicVO extends BaseVO {
|
||||||
|
@ApiModelProperty(value = "指标或操作项名称", example = "org.apache.kafka.connect.file.FileStreamSinkConnector")
|
||||||
|
private String className;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "类型", example = "source|sink")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "版本", example = "2.5.1")
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "帮助文档地址", example = "")
|
||||||
|
private String helpDocLink;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.bean.vo.connect.task;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.BaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Task信息概览
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 22/02/23
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(description = "Task信息概览")
|
||||||
|
public class KCTaskOverviewVO extends BaseVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "connect集群ID", example = "1")
|
||||||
|
private Long connectClusterId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "taskId", example = "1")
|
||||||
|
private Integer taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "worker地址", example = "127.0.0.1:8080")
|
||||||
|
private String workerId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "task状态", example = "RUNNING")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "错误原因", example = "asx")
|
||||||
|
private String trace;
|
||||||
|
}
|
||||||
@@ -20,6 +20,9 @@ public class HealthCheckConfigVO {
|
|||||||
@ApiModelProperty(value="检查维度名称", example = "Broker")
|
@ApiModelProperty(value="检查维度名称", example = "Broker")
|
||||||
private String dimensionName;
|
private String dimensionName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value="检查维度前端展示名称", example = "Connector")
|
||||||
|
private String dimensionDisplayName;
|
||||||
|
|
||||||
@ApiModelProperty(value="配置组", example = "HEALTH")
|
@ApiModelProperty(value="配置组", example = "HEALTH")
|
||||||
private String configGroup;
|
private String configGroup;
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ public class HealthScoreBaseResultVO extends BaseTimeVO {
|
|||||||
@ApiModelProperty(value="检查维度名称", example = "cluster")
|
@ApiModelProperty(value="检查维度名称", example = "cluster")
|
||||||
private String dimensionName;
|
private String dimensionName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value="检查维度前端显示名称", example = "cluster")
|
||||||
|
private String dimensionDisplayName;
|
||||||
|
|
||||||
@ApiModelProperty(value="检查名称", example = "Group延迟")
|
@ApiModelProperty(value="检查名称", example = "Group延迟")
|
||||||
private String configName;
|
private String configName;
|
||||||
|
|
||||||
|
|||||||
@@ -131,13 +131,22 @@ public class RestTemplateConfig {
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
RESP_LOGGER.warn(
|
RESP_LOGGER.warn(
|
||||||
"method=traceResponse||code={}||url={}||text={}||headers={}||body={}||error={}||timeCost={}||subFlag={}",
|
"method=traceResponse||remoteResponse||code={}||url={}||text={}||headers={}||body={}||error={}||timeCost={}||subFlag={}",
|
||||||
response.getStatusCode(), url, response.getStatusText(), response.getHeaders(),
|
response.getStatusCode(),
|
||||||
inputStringBuilder.toString(), e, (System.nanoTime() - nanoTime) / 1000 / 1000, subFlag);
|
url,
|
||||||
|
response.getStatusText(),
|
||||||
|
response.getHeaders(),
|
||||||
|
inputStringBuilder.toString(),
|
||||||
|
e,
|
||||||
|
(System.nanoTime() - nanoTime) / 1000 / 1000,
|
||||||
|
subFlag
|
||||||
|
);
|
||||||
|
|
||||||
if (!response.getStatusCode().is2xxSuccessful()) {
|
if (!response.getStatusCode().is2xxSuccessful()) {
|
||||||
throw new ThirdPartRemoteException(e.getMessage(), e, ResultStatus.HTTP_REQ_ERROR);
|
throw new ThirdPartRemoteException(getResponseBodyAndIgnoreException(response), e, ResultStatus.HTTP_REQ_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String responseString = inputStringBuilder.toString().replace("\n", "");
|
String responseString = inputStringBuilder.toString().replace("\n", "");
|
||||||
responseString = responseString.substring(0, Math.min(responseString.length(), 5000));
|
responseString = responseString.substring(0, Math.min(responseString.length(), 5000));
|
||||||
|
|
||||||
@@ -172,6 +181,19 @@ public class RestTemplateConfig {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getResponseBodyAndIgnoreException(ClientHttpResponse response) {
|
||||||
|
try {
|
||||||
|
byte[] bytes = new byte[response.getBody().available()];
|
||||||
|
response.getBody().read(bytes);
|
||||||
|
|
||||||
|
return new String(bytes);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
private static String simpleUrl(HttpRequest request) {
|
private static String simpleUrl(HttpRequest request) {
|
||||||
String url = request.getURI().toString();
|
String url = request.getURI().toString();
|
||||||
int index = url.indexOf("?");
|
int index = url.indexOf("?");
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.springframework.web.client.RestTemplate;
|
|||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,7 +23,6 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class RestTool {
|
public class RestTool {
|
||||||
|
|
||||||
private static final ILog LOGGER = LogFactory.getLog(RestTool.class);
|
private static final ILog LOGGER = LogFactory.getLog(RestTool.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -38,39 +38,38 @@ public class RestTool {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public <T> T postObjectWithRawContent(String url, Object postBody, HttpHeaders headers, Class<T> resultType) {
|
public <T> T postObjectWithRawContent(String url, Object postBody, HttpHeaders headers, Class<T> resultType) {
|
||||||
ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(postBody, headers),
|
ResponseEntity<String> result = restTemplate.exchange(
|
||||||
String.class);
|
url,
|
||||||
|
HttpMethod.POST,
|
||||||
|
new HttpEntity<>(postBody, headers),
|
||||||
|
String.class
|
||||||
|
);
|
||||||
|
|
||||||
return ConvertUtil.toObj(result.getBody(), resultType);
|
return ConvertUtil.toObj(result.getBody(), resultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* POST请求
|
* POST请求
|
||||||
* @param url 请求地址
|
* @param url 请求地址
|
||||||
* @param request 请求内容
|
* @param postBody 请求内容
|
||||||
* @param responseType 期望返回的类型
|
* @param resultType 期望返回的类型
|
||||||
* @param <T> 泛型T
|
* @param <T> 泛型T
|
||||||
* @return T
|
* @return T
|
||||||
*/
|
*/
|
||||||
public <T> T postObjectWithJsonContent(String url, Object request, Type responseType) {
|
public <T> T postObjectWithJsonContent(String url, Object postBody, Class<T> resultType) {
|
||||||
HttpHeaders jsonHead = getJsonContentHeaders();
|
return this.postObjectWithRawContent(url, postBody, this.getJsonContentHeaders(), resultType);
|
||||||
ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.POST,
|
|
||||||
new HttpEntity<Object>( ConvertUtil.obj2Json(request), jsonHead), String.class);
|
|
||||||
return ConvertUtil.toObj(result.getBody(), responseType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* POST请求
|
* POST请求
|
||||||
* @param url 请求地址
|
* @param url 请求地址
|
||||||
* @param request 请求内容
|
* @param postBody 请求内容
|
||||||
* @param responseType 期望返回的类型
|
* @param resultType 期望返回的类型
|
||||||
* @param <T> 泛型T
|
* @param <T> 泛型T
|
||||||
* @return T
|
* @return T
|
||||||
*/
|
*/
|
||||||
public <T> T postObjectWithJsonContentAndHeader(String url, Map<String, String> headers, Object request,
|
public <T> T postObjectWithJsonContentAndHeader(String url, Map<String, String> headers, Object postBody, Class<T> resultType) {
|
||||||
Type responseType) {
|
return this.postObjectWithRawContent(url, postBody, this.getJsonContentHeaders(headers), resultType);
|
||||||
ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.POST,
|
|
||||||
new HttpEntity<Object>(ConvertUtil.obj2Json(request), getJsonContentHeaders(headers)), String.class);
|
|
||||||
return ConvertUtil.toObj(result.getBody(), responseType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,8 +80,15 @@ public class RestTool {
|
|||||||
* @param <T> 泛型T
|
* @param <T> 泛型T
|
||||||
* @return T
|
* @return T
|
||||||
*/
|
*/
|
||||||
public <T> T getObjectWithJsonContent(String url, Map<String, ?> params, Type resultType) {
|
public <T> T getObjectWithJsonContent(String url, Map<String, ?> params, Class<T> resultType) {
|
||||||
ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.GET, null, String.class, params);
|
ResponseEntity<String> result = restTemplate.exchange(
|
||||||
|
url,
|
||||||
|
HttpMethod.GET,
|
||||||
|
null,
|
||||||
|
String.class,
|
||||||
|
params
|
||||||
|
);
|
||||||
|
|
||||||
return ConvertUtil.toObj(result.getBody(), resultType);
|
return ConvertUtil.toObj(result.getBody(), resultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,8 +101,13 @@ public class RestTool {
|
|||||||
* @return T
|
* @return T
|
||||||
*/
|
*/
|
||||||
public <T> T getForObject(String url, HttpHeaders headers, Type resultType) {
|
public <T> T getForObject(String url, HttpHeaders headers, Type resultType) {
|
||||||
ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers),
|
ResponseEntity<String> result = restTemplate.exchange(
|
||||||
String.class);
|
url,
|
||||||
|
HttpMethod.GET,
|
||||||
|
new HttpEntity<>(null, headers),
|
||||||
|
String.class
|
||||||
|
);
|
||||||
|
|
||||||
return ConvertUtil.toObj(result.getBody(), resultType);
|
return ConvertUtil.toObj(result.getBody(), resultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,6 +180,26 @@ public class RestTool {
|
|||||||
return result.getBody();
|
return result.getBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET请求
|
||||||
|
* @param url 请求地址
|
||||||
|
* @param params 请求参数
|
||||||
|
* @param resultType 返回类型
|
||||||
|
* @param <T> 泛型T
|
||||||
|
* @return T
|
||||||
|
*/
|
||||||
|
public <T> List<T> getArrayObjectWithJsonContent(String url, Map<String, ?> params, Class<T> resultType) {
|
||||||
|
ResponseEntity<String> result = restTemplate.exchange(
|
||||||
|
url,
|
||||||
|
HttpMethod.GET,
|
||||||
|
null,
|
||||||
|
String.class,
|
||||||
|
params
|
||||||
|
);
|
||||||
|
|
||||||
|
return ConvertUtil.str2ObjArrayByJson(result.getBody(), resultType);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据map中的参数构建url+queryString
|
* 根据map中的参数构建url+queryString
|
||||||
* @param url 请求地址
|
* @param url 请求地址
|
||||||
@@ -181,7 +212,6 @@ public class RestTool {
|
|||||||
}
|
}
|
||||||
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
|
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
|
||||||
|
|
||||||
|
|
||||||
return builder.toUriString();
|
return builder.toUriString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ public class ApiPrefix {
|
|||||||
|
|
||||||
public static final String API_V3_PREFIX = API_PREFIX + "v3/";
|
public static final String API_V3_PREFIX = API_PREFIX + "v3/";
|
||||||
|
|
||||||
|
public static final String API_V3_CONNECT_PREFIX = API_V3_PREFIX + "kafka-connect/";
|
||||||
|
|
||||||
public static final String API_V3_OPEN_PREFIX = API_V3_PREFIX + "open/";
|
public static final String API_V3_OPEN_PREFIX = API_V3_PREFIX + "open/";
|
||||||
|
|
||||||
private ApiPrefix() {
|
private ApiPrefix() {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public class Constant {
|
|||||||
public static final int INVALID_CODE = -1;
|
public static final int INVALID_CODE = -1;
|
||||||
|
|
||||||
public static final String MYSQL_TABLE_NAME_PREFIX = "ks_km_";
|
public static final String MYSQL_TABLE_NAME_PREFIX = "ks_km_";
|
||||||
|
public static final String MYSQL_KC_TABLE_NAME_PREFIX = "ks_kc_";
|
||||||
|
|
||||||
public static final String SWAGGER_API_TAG_PREFIX = "KS-KM-";
|
public static final String SWAGGER_API_TAG_PREFIX = "KS-KM-";
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ public class KafkaConstant {
|
|||||||
|
|
||||||
public static final String CONTROLLER_ROLE = "controller";
|
public static final String CONTROLLER_ROLE = "controller";
|
||||||
|
|
||||||
|
public static final String DEFAULT_CONNECT_VERSION = "2.5.0";
|
||||||
|
|
||||||
public static final Map<String, ConfigDef.ConfigKey> KAFKA_ALL_CONFIG_DEF_MAP = new ConcurrentHashMap<>();
|
public static final Map<String, ConfigDef.ConfigKey> KAFKA_ALL_CONFIG_DEF_MAP = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|||||||
@@ -95,4 +95,19 @@ public class MsgConstant {
|
|||||||
public static String getJobNotExist(Long jobId) {
|
public static String getJobNotExist(Long jobId) {
|
||||||
return String.format("jobId:[%d] 不存在", jobId);
|
return String.format("jobId:[%d] 不存在", jobId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************** Connect-Cluster ****************************************************/
|
||||||
|
|
||||||
|
public static String getConnectClusterBizStr(Long clusterId, String clusterName){
|
||||||
|
return String.format("Connect集群ID:[%d] 集群名称:[%s]", clusterId, clusterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getConnectClusterNotExist(Long clusterId) {
|
||||||
|
return String.format("Connect集群ID:[%d] 不存在或者未加载", clusterId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getConnectorBizStr(Long clusterPhyId, String topicName) {
|
||||||
|
return String.format("Connect集群ID:[%d] Connector名称:[%s]", clusterPhyId, topicName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.constant.connect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zengqiao
|
||||||
|
* @date 20/5/20
|
||||||
|
*/
|
||||||
|
public class KafkaConnectConstant {
|
||||||
|
public static final String CONNECTOR_CLASS_FILED_NAME = "connector.class";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_TOPICS_FILED_NAME = "topics";
|
||||||
|
public static final String CONNECTOR_TOPICS_FILED_ERROR_VALUE = "know-streaming-connect-illegal-value";
|
||||||
|
|
||||||
|
private KafkaConnectConstant() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.converter;
|
||||||
|
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnector;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorInfo;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.connector.KSConnectorStateInfo;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.po.connect.ConnectorPO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connect.ConnectClusterBasicCombineExistVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ClusterConnectorOverviewVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ConnectorBasicCombineExistVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.cluster.connector.ConnectorBasicVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricLineVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiLinesVO;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.constant.connect.KafkaConnectConstant;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.CommonUtils;
|
||||||
|
import com.xiaojukeji.know.streaming.km.common.utils.ConvertUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class ConnectConverter {
|
||||||
|
public static ConnectorBasicCombineExistVO convert2BasicVO(ConnectCluster connectCluster, ConnectorPO connectorPO) {
|
||||||
|
ConnectorBasicCombineExistVO vo = new ConnectorBasicCombineExistVO();
|
||||||
|
if (connectCluster == null || connectorPO == null) {
|
||||||
|
vo.setExist(false);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
|
vo.setExist(true);
|
||||||
|
vo.setConnectClusterId(connectorPO.getConnectClusterId());
|
||||||
|
vo.setConnectClusterName(connectCluster.getName());
|
||||||
|
vo.setConnectorName(connectorPO.getConnectorName());
|
||||||
|
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ConnectorBasicVO> convert2BasicVOList(
|
||||||
|
List<ConnectCluster> clusterList,
|
||||||
|
List<ConnectorPO> poList) {
|
||||||
|
Map<Long, ConnectCluster> clusterMap = new HashMap<>();
|
||||||
|
clusterList.stream().forEach(elem -> clusterMap.put(elem.getId(), elem));
|
||||||
|
|
||||||
|
List<ConnectorBasicVO> voList = new ArrayList<>();
|
||||||
|
poList.stream().filter(item -> clusterMap.containsKey(item.getConnectClusterId())).forEach(elem -> {
|
||||||
|
ConnectorBasicVO vo = new ConnectorBasicVO();
|
||||||
|
vo.setConnectClusterId(elem.getConnectClusterId());
|
||||||
|
vo.setConnectClusterName(clusterMap.get(elem.getConnectClusterId()).getName());
|
||||||
|
vo.setConnectorName(elem.getConnectorName());
|
||||||
|
|
||||||
|
voList.add(vo);
|
||||||
|
});
|
||||||
|
|
||||||
|
return voList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ConnectClusterBasicCombineExistVO convert2ConnectClusterBasicCombineExistVO(ConnectCluster connectCluster) {
|
||||||
|
if (connectCluster == null) {
|
||||||
|
ConnectClusterBasicCombineExistVO combineExistVO = new ConnectClusterBasicCombineExistVO();
|
||||||
|
combineExistVO.setExist(false);
|
||||||
|
|
||||||
|
return combineExistVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectClusterBasicCombineExistVO combineExistVO = ConvertUtil.obj2Obj(connectCluster, ConnectClusterBasicCombineExistVO.class);
|
||||||
|
combineExistVO.setExist(true);
|
||||||
|
return combineExistVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ClusterConnectorOverviewVO> convert2ClusterConnectorOverviewVOList(List<ConnectCluster> clusterList,
|
||||||
|
List<ConnectorPO> poList,
|
||||||
|
List<ConnectorMetrics> metricsList) {
|
||||||
|
Map<Long, ConnectCluster> clusterMap = new HashMap<>();
|
||||||
|
clusterList.stream().forEach(elem -> clusterMap.put(elem.getId(), elem));
|
||||||
|
|
||||||
|
Map<String, ConnectorMetrics> metricMap = metricsList.stream().collect(Collectors.toMap(elem -> elem.getConnectClusterId() + "@" + elem.getConnectorName(), Function.identity()));
|
||||||
|
|
||||||
|
List<ClusterConnectorOverviewVO> voList = new ArrayList<>();
|
||||||
|
poList.stream().filter(item -> clusterMap.containsKey(item.getConnectClusterId())).forEach(elem -> {
|
||||||
|
ClusterConnectorOverviewVO vo = new ClusterConnectorOverviewVO();
|
||||||
|
vo.setConnectClusterId(elem.getConnectClusterId());
|
||||||
|
vo.setConnectClusterName(clusterMap.get(elem.getConnectClusterId()).getName());
|
||||||
|
vo.setConnectorName(elem.getConnectorName());
|
||||||
|
vo.setConnectorClassName(elem.getConnectorClassName());
|
||||||
|
vo.setConnectorType(elem.getConnectorType());
|
||||||
|
vo.setState(elem.getState());
|
||||||
|
vo.setTaskCount(elem.getTaskCount());
|
||||||
|
vo.setTopicNameList(CommonUtils.string2StrList(elem.getTopics()));
|
||||||
|
vo.setLatestMetrics(metricMap.getOrDefault(elem.getConnectClusterId() + "@" + elem.getConnectorName(), new ConnectorMetrics(elem.getConnectClusterId(), elem.getConnectorName())));
|
||||||
|
voList.add(vo);
|
||||||
|
});
|
||||||
|
|
||||||
|
return voList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ClusterConnectorOverviewVO> supplyData2ClusterConnectorOverviewVOList(List<ClusterConnectorOverviewVO> voList,
|
||||||
|
List<MetricMultiLinesVO> metricLineVOList) {
|
||||||
|
Map<String, List<MetricLineVO>> metricLineMap = new HashMap<>();
|
||||||
|
if (metricLineVOList != null) {
|
||||||
|
for (MetricMultiLinesVO metricMultiLinesVO : metricLineVOList) {
|
||||||
|
metricMultiLinesVO.getMetricLines()
|
||||||
|
.forEach(metricLineVO -> {
|
||||||
|
String key = metricLineVO.getName();
|
||||||
|
List<MetricLineVO> metricLineVOS = metricLineMap.getOrDefault(key, new ArrayList<>());
|
||||||
|
metricLineVOS.add(metricLineVO);
|
||||||
|
metricLineMap.put(key, metricLineVOS);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
voList.forEach(elem -> {
|
||||||
|
elem.setMetricLines(metricLineMap.get(genConnectorKey(elem.getConnectClusterId(), elem.getConnectorName())));
|
||||||
|
});
|
||||||
|
|
||||||
|
return voList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static KSConnector convert2KSConnector(Long kafkaClusterPhyId, Long connectClusterId, KSConnectorInfo connectorInfo, KSConnectorStateInfo stateInfo, List<String> topicNameList) {
|
||||||
|
KSConnector ksConnector = new KSConnector();
|
||||||
|
ksConnector.setKafkaClusterPhyId(kafkaClusterPhyId);
|
||||||
|
ksConnector.setConnectClusterId(connectClusterId);
|
||||||
|
ksConnector.setConnectorName(connectorInfo.getName());
|
||||||
|
ksConnector.setConnectorClassName(connectorInfo.getConfig().getOrDefault(KafkaConnectConstant.CONNECTOR_CLASS_FILED_NAME, ""));
|
||||||
|
ksConnector.setConnectorType(connectorInfo.getType().name());
|
||||||
|
ksConnector.setTopics(topicNameList != null? CommonUtils.strList2String(topicNameList): "");
|
||||||
|
ksConnector.setTaskCount(connectorInfo.getTasks() != null? connectorInfo.getTasks().size(): 0);
|
||||||
|
ksConnector.setState(stateInfo != null? stateInfo.getConnector().getState(): "");
|
||||||
|
|
||||||
|
return ksConnector;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String genConnectorKey(Long connectorId, String connectorName){
|
||||||
|
return connectorId + "#" + connectorName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConnectConverter() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ public class HealthScoreVOConverter {
|
|||||||
HealthScoreResultDetailVO vo = new HealthScoreResultDetailVO();
|
HealthScoreResultDetailVO vo = new HealthScoreResultDetailVO();
|
||||||
vo.setDimension(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimension());
|
vo.setDimension(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimension());
|
||||||
vo.setDimensionName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getMessage());
|
vo.setDimensionName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getMessage());
|
||||||
|
vo.setDimensionDisplayName(healthScoreResult.getCheckNameEnum().getDimensionEnum().getDimensionDisplayName());
|
||||||
vo.setConfigName(healthScoreResult.getCheckNameEnum().getConfigName());
|
vo.setConfigName(healthScoreResult.getCheckNameEnum().getConfigName());
|
||||||
vo.setConfigItem(healthScoreResult.getCheckNameEnum().getConfigItem());
|
vo.setConfigItem(healthScoreResult.getCheckNameEnum().getConfigItem());
|
||||||
vo.setConfigDesc(healthScoreResult.getCheckNameEnum().getConfigDesc());
|
vo.setConfigDesc(healthScoreResult.getCheckNameEnum().getConfigDesc());
|
||||||
@@ -63,6 +64,7 @@ public class HealthScoreVOConverter {
|
|||||||
public static HealthCheckConfigVO convert2HealthCheckConfigVO(String groupName, BaseClusterHealthConfig config) {
|
public static HealthCheckConfigVO convert2HealthCheckConfigVO(String groupName, BaseClusterHealthConfig config) {
|
||||||
HealthCheckConfigVO vo = new HealthCheckConfigVO();
|
HealthCheckConfigVO vo = new HealthCheckConfigVO();
|
||||||
vo.setDimensionCode(config.getCheckNameEnum().getDimensionEnum().getDimension());
|
vo.setDimensionCode(config.getCheckNameEnum().getDimensionEnum().getDimension());
|
||||||
|
vo.setDimensionDisplayName(config.getCheckNameEnum().getDimensionEnum().getDimensionDisplayName());
|
||||||
vo.setDimensionName(config.getCheckNameEnum().getDimensionEnum().name());
|
vo.setDimensionName(config.getCheckNameEnum().getDimensionEnum().name());
|
||||||
vo.setConfigGroup(groupName);
|
vo.setConfigGroup(groupName);
|
||||||
vo.setConfigName(config.getCheckNameEnum().getConfigName());
|
vo.setConfigName(config.getCheckNameEnum().getConfigName());
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.xiaojukeji.know.streaming.km.common.converter;
|
package com.xiaojukeji.know.streaming.km.common.converter;
|
||||||
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.BaseMetrics;
|
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.PartitionMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.TopicMetrics;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition;
|
import com.xiaojukeji.know.streaming.km.common.bean.entity.partition.Partition;
|
||||||
@@ -14,7 +13,6 @@ import com.xiaojukeji.know.streaming.km.common.bean.vo.metrics.line.MetricMultiL
|
|||||||
import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicRecordVO;
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.TopicRecordVO;
|
||||||
import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition.TopicPartitionVO;
|
import com.xiaojukeji.know.streaming.km.common.bean.vo.topic.partition.TopicPartitionVO;
|
||||||
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
|
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||||
import org.apache.kafka.common.header.Header;
|
import org.apache.kafka.common.header.Header;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.enums.connect;
|
||||||
|
|
||||||
|
public enum ConnectActionEnum {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
STOP(2, "stop"),
|
||||||
|
|
||||||
|
RESUME(3,"resume"),
|
||||||
|
|
||||||
|
RESTART(4,"restart"),
|
||||||
|
|
||||||
|
UNKNOWN(-1, "unknown");
|
||||||
|
|
||||||
|
ConnectActionEnum(int status, String value) {
|
||||||
|
this.status = status;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int status;
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.xiaojukeji.know.streaming.km.common.enums.connect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wyb
|
||||||
|
* @date 2022/11/25
|
||||||
|
*/
|
||||||
|
public enum ConnectorTypeEnum {
|
||||||
|
|
||||||
|
|
||||||
|
UNKNOWN(-1, "unknown"),
|
||||||
|
SOURCE(1, "source"),
|
||||||
|
SINK(2, "sink");
|
||||||
|
|
||||||
|
private final int code;
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
ConnectorTypeEnum(int code, String value) {
|
||||||
|
this.code = code;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ConnectorTypeEnum getByName(String name) {
|
||||||
|
for (ConnectorTypeEnum typeEnum : ConnectorTypeEnum.values()) {
|
||||||
|
if (typeEnum.name().equals(name)) {
|
||||||
|
return typeEnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.xiaojukeji.know.streaming.km.common.enums.group;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author wyb
|
* @author wyb
|
||||||
* @date 2022/10/11
|
* @date 2022/10/11
|
||||||
@@ -13,12 +14,18 @@ public enum GroupTypeEnum {
|
|||||||
|
|
||||||
CONSUMER(0, "Consumer客户端的消费组"),
|
CONSUMER(0, "Consumer客户端的消费组"),
|
||||||
|
|
||||||
CONNECTOR(1, "Connector的消费组");
|
CONNECTOR(1, "Connector的消费组"),
|
||||||
|
|
||||||
|
CONNECT_CLUSTER(2, "Connect集群");
|
||||||
|
|
||||||
private final Integer code;
|
private final Integer code;
|
||||||
|
|
||||||
private final String msg;
|
private final String msg;
|
||||||
|
|
||||||
|
public static final String CONNECTOR_PROTOCOL_TYPE = "consumer";
|
||||||
|
|
||||||
|
public static final String CONNECT_CLUSTER_PROTOCOL_TYPE = "connect";
|
||||||
|
|
||||||
GroupTypeEnum(Integer code, String msg) {
|
GroupTypeEnum(Integer code, String msg) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.msg = msg;
|
this.msg = msg;
|
||||||
@@ -33,4 +40,19 @@ public enum GroupTypeEnum {
|
|||||||
}
|
}
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static GroupTypeEnum getTypeByProtocolType(String protocolType) {
|
||||||
|
if (protocolType == null) {
|
||||||
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
if (protocolType.isEmpty()) {
|
||||||
|
return CONSUMER;
|
||||||
|
} else if (CONNECTOR_PROTOCOL_TYPE.equals(protocolType)) {
|
||||||
|
return CONNECTOR;
|
||||||
|
} else if (CONNECT_CLUSTER_PROTOCOL_TYPE.equals(protocolType)) {
|
||||||
|
return CONNECT_CLUSTER;
|
||||||
|
} else {
|
||||||
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,19 +8,23 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
public enum HealthCheckDimensionEnum {
|
public enum HealthCheckDimensionEnum {
|
||||||
UNKNOWN(-1, "未知"),
|
UNKNOWN(-1, "未知", "未知"),
|
||||||
|
|
||||||
CLUSTER(0, "Cluster"),
|
CLUSTER(0, "Cluster", "Cluster"),
|
||||||
|
|
||||||
BROKER(1, "Broker"),
|
BROKER(1, "Broker", "Broker"),
|
||||||
|
|
||||||
TOPIC(2, "Topic"),
|
TOPIC(2, "Topic", "Topic"),
|
||||||
|
|
||||||
GROUP(3, "Group"),
|
GROUP(3, "Group", "Group"),
|
||||||
|
|
||||||
ZOOKEEPER(4, "Zookeeper"),
|
ZOOKEEPER(4, "Zookeeper", "Zookeeper"),
|
||||||
|
|
||||||
MAX_VAL(100, "所有的dimension的值需要小于MAX_VAL")
|
CONNECT_CLUSTER(5, "ConnectCluster", "Connect"),
|
||||||
|
|
||||||
|
CONNECTOR(6, "Connector", "Connect"),
|
||||||
|
|
||||||
|
MAX_VAL(100, "所有的dimension的值需要小于MAX_VAL", "Ignore")
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -28,9 +32,12 @@ public enum HealthCheckDimensionEnum {
|
|||||||
|
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
HealthCheckDimensionEnum(int dimension, String message) {
|
private final String dimensionDisplayName;
|
||||||
|
|
||||||
|
HealthCheckDimensionEnum(int dimension, String message, String dimensionDisplayName) {
|
||||||
this.dimension = dimension;
|
this.dimension = dimension;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
|
this.dimensionDisplayName=dimensionDisplayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HealthCheckDimensionEnum getByCode(Integer dimension) {
|
public static HealthCheckDimensionEnum getByCode(Integer dimension) {
|
||||||
|
|||||||
@@ -132,6 +132,33 @@ public enum HealthCheckNameEnum {
|
|||||||
false
|
false
|
||||||
),
|
),
|
||||||
|
|
||||||
|
CONNECT_CLUSTER_TASK_STARTUP_FAILURE_PERCENTAGE(
|
||||||
|
HealthCheckDimensionEnum.CONNECT_CLUSTER,
|
||||||
|
"TaskStartupFailurePercentage",
|
||||||
|
Constant.HC_CONFIG_NAME_PREFIX+"CONNECT_CLUSTER_TASK_STARTUP_FAILURE_PERCENTAGE",
|
||||||
|
"connect集群任务启动失败概率",
|
||||||
|
HealthCompareValueConfig.class,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
|
||||||
|
CONNECTOR_FAILED_TASK_COUNT(
|
||||||
|
HealthCheckDimensionEnum.CONNECTOR,
|
||||||
|
"ConnectorFailedTaskCount",
|
||||||
|
Constant.HC_CONFIG_NAME_PREFIX+"CONNECTOR_FAILED_TASK_COUNT",
|
||||||
|
"connector失败状态的任务数量",
|
||||||
|
HealthCompareValueConfig.class,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
|
||||||
|
CONNECTOR_UNASSIGNED_TASK_COUNT(
|
||||||
|
HealthCheckDimensionEnum.CONNECTOR,
|
||||||
|
"ConnectorUnassignedTaskCount",
|
||||||
|
Constant.HC_CONFIG_NAME_PREFIX+"CONNECTOR_UNASSIGNED_TASK_COUNT",
|
||||||
|
"connector未被分配的任务数量",
|
||||||
|
HealthCompareValueConfig.class,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public enum ModuleEnum {
|
|||||||
|
|
||||||
KAFKA_CONTROLLER(70, "KafkaController"),
|
KAFKA_CONTROLLER(70, "KafkaController"),
|
||||||
|
|
||||||
|
KAFKA_CONNECT_CLUSTER(80, "KafkaConnectCluster"),
|
||||||
|
KAFKA_CONNECT_CONNECTOR(81, "KafkaConnectConnector"),
|
||||||
|
|
||||||
PLATFORM_CONFIG(100, "平台配置"),
|
PLATFORM_CONFIG(100, "平台配置"),
|
||||||
|
|
||||||
JOB_KAFKA_REPLICA_REASSIGN(110, "Job-KafkaReplica迁移"),
|
JOB_KAFKA_REPLICA_REASSIGN(110, "Job-KafkaReplica迁移"),
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ public enum OperationEnum {
|
|||||||
|
|
||||||
CANCEL(10, "取消"),
|
CANCEL(10, "取消"),
|
||||||
|
|
||||||
|
RESTART(11, "重启"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
OperationEnum(int code, String desc) {
|
OperationEnum(int code, String desc) {
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ public enum VersionItemTypeEnum {
|
|||||||
|
|
||||||
METRIC_ZOOKEEPER(110, "ZookeeperMetric"),
|
METRIC_ZOOKEEPER(110, "ZookeeperMetric"),
|
||||||
|
|
||||||
|
METRIC_CONNECT_CLUSTER(120, "ConnectClusterMetric"),
|
||||||
|
METRIC_CONNECT_CONNECTOR(121, "ConnectConnectorMetric"),
|
||||||
|
METRIC_CONNECT_MIRROR_MAKER(122, "ConnectMirrorMakerMetric"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务端查询
|
* 服务端查询
|
||||||
*/
|
*/
|
||||||
@@ -37,6 +41,9 @@ public enum VersionItemTypeEnum {
|
|||||||
|
|
||||||
SERVICE_OP_REASSIGNMENT(330, "service_reassign_operation"),
|
SERVICE_OP_REASSIGNMENT(330, "service_reassign_operation"),
|
||||||
|
|
||||||
|
SERVICE_OP_CONNECT_CLUSTER(400, "service_connect_cluster_operation"),
|
||||||
|
SERVICE_OP_CONNECT_CONNECTOR(401, "service_connect_connector_operation"),
|
||||||
|
SERVICE_OP_CONNECT_PLUGIN(402, "service_connect_plugin_operation"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前端操作
|
* 前端操作
|
||||||
|
|||||||
@@ -34,6 +34,116 @@ public class JmxAttribute {
|
|||||||
|
|
||||||
public static final String VERSION = "Version";
|
public static final String VERSION = "Version";
|
||||||
|
|
||||||
|
/*********************************************************** connect cluster***********************************************************/
|
||||||
|
public static final String TASK_COUNT = "task-count";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_STARTUP_ATTEMPTS_TOTAL = "connector-startup-attempts-total";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_STARTUP_FAILURE_PERCENTAGE = "connector-startup-failure-percentage";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_STARTUP_FAILURE_TOTAL = "connector-startup-failure-total";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_STARTUP_SUCCESS_PERCENTAGE = "connector-startup-success-percentage";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_STARTUP_SUCCESS_TOTAL = "connector-startup-success-total";
|
||||||
|
|
||||||
|
public static final String TASK_STARTUP_ATTEMPTS_TOTAL = "task-startup-attempts-total";
|
||||||
|
|
||||||
|
public static final String TASK_STARTUP_FAILURE_PERCENTAGE = "task-startup-failure-percentage";
|
||||||
|
|
||||||
|
public static final String TASK_STARTUP_FAILURE_TOTAL = "task-startup-failure-total";
|
||||||
|
|
||||||
|
public static final String TASK_STARTUP_SUCCESS_PERCENTAGE = "task-startup-success-percentage";
|
||||||
|
|
||||||
|
public static final String TASK_STARTUP_SUCCESS_TOTAL = "task-startup-success-total";
|
||||||
|
|
||||||
|
/*********************************************************** connect ***********************************************************/
|
||||||
|
public static final String CONNECTOR_TOTAL_TASK_COUNT = "connector-total-task-count";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_RUNNING_TASK_COUNT = "connector-running-task-count";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_PAUSED_TASK_COUNT = "connector-paused-task-count";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_FAILED_TASK_COUNT = "connector-failed-task-count";
|
||||||
|
|
||||||
|
public static final String CONNECTOR_UNASSIGNED_TASK_COUNT = "connector-unassigned-task-count";
|
||||||
|
|
||||||
|
public static final String BATCH_SIZE_AVG = "batch-size-avg";
|
||||||
|
|
||||||
|
public static final String BATCH_SIZE_MAX = "batch-size-max";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_AVG_TIME_MS = "offset-commit-avg-time-ms";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_MAX_TIME_MS = "offset-commit-max-time-ms";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_FAILURE_PERCENTAGE = "offset-commit-failure-percentage";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_SUCCESS_PERCENTAGE = "offset-commit-success-percentage";
|
||||||
|
|
||||||
|
public static final String POLL_BATCH_AVG_TIME_MS = "poll-batch-avg-time-ms";
|
||||||
|
|
||||||
|
public static final String POLL_BATCH_MAX_TIME_MS = "poll-batch-max-time-ms";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_ACTIVE_COUNT = "source-record-active-count";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_ACTIVE_COUNT_AVG = "source-record-active-count-avg";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_ACTIVE_COUNT_MAX = "source-record-active-count-max";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_POLL_RATE = "source-record-poll-rate";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_POLL_TOTAL = "source-record-poll-total";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_WRITE_RATE = "source-record-write-rate";
|
||||||
|
|
||||||
|
public static final String SOURCE_RECORD_WRITE_TOTAL = "source-record-write-total";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_COMPLETION_RATE = "offset-commit-completion-rate";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_COMPLETION_TOTAL = "offset-commit-completion-total";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_SKIP_RATE = "offset-commit-skip-rate";
|
||||||
|
|
||||||
|
public static final String OFFSET_COMMIT_SKIP_TOTAL = "offset-commit-skip-total";
|
||||||
|
|
||||||
|
public static final String PARTITION_COUNT = "partition-count";
|
||||||
|
|
||||||
|
public static final String PUT_BATCH_AVG_TIME_MS = "put-batch-avg-time-ms";
|
||||||
|
|
||||||
|
public static final String PUT_BATCH_MAX_TIME_MS = "put-batch-max-time-ms";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_ACTIVE_COUNT = "sink-record-active-count";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_ACTIVE_COUNT_AVG = "sink-record-active-count-avg";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_ACTIVE_COUNT_MAX = "sink-record-active-count-max";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_LAG_MAX = "sink-record-lag-max";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_READ_RATE = "sink-record-read-rate";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_READ_TOTAL = "sink-record-read-total";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_SEND_RATE = "sink-record-send-rate";
|
||||||
|
|
||||||
|
public static final String SINK_RECORD_SEND_TOTAL = "sink-record-send-total";
|
||||||
|
|
||||||
|
public static final String DEADLETTERQUEUE_PRODUCE_FAILURES = "deadletterqueue-produce-failures";
|
||||||
|
|
||||||
|
public static final String DEADLETTERQUEUE_PRODUCE_REQUESTS = "deadletterqueue-produce-requests";
|
||||||
|
|
||||||
|
public static final String LAST_ERROR_TIMESTAMP = "last-error-timestamp";
|
||||||
|
|
||||||
|
public static final String TOTAL_ERRORS_LOGGED = "total-errors-logged";
|
||||||
|
|
||||||
|
public static final String TOTAL_RECORD_ERRORS = "total-record-errors";
|
||||||
|
|
||||||
|
public static final String TOTAL_RECORD_FAILURES = "total-record-failures";
|
||||||
|
|
||||||
|
public static final String TOTAL_RECORDS_SKIPPED = "total-records-skipped";
|
||||||
|
|
||||||
|
public static final String TOTAL_RETRIES = "total-retries";
|
||||||
|
|
||||||
private JmxAttribute() {
|
private JmxAttribute() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,8 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
public class JmxConnectorWrap {
|
public class JmxConnectorWrap {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(JmxConnectorWrap.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(JmxConnectorWrap.class);
|
||||||
|
|
||||||
private final Long physicalClusterId;
|
//jmx打印日志时的附带信息
|
||||||
|
private final String clientLogIdent;
|
||||||
private final Integer brokerId;
|
|
||||||
|
|
||||||
private final Long brokerStartupTime;
|
private final Long brokerStartupTime;
|
||||||
|
|
||||||
@@ -44,9 +43,8 @@ public class JmxConnectorWrap {
|
|||||||
|
|
||||||
private JmxConfig jmxConfig;
|
private JmxConfig jmxConfig;
|
||||||
|
|
||||||
public JmxConnectorWrap(Long physicalClusterId, Integer brokerId, Long brokerStartupTime, String host, Integer port, JmxConfig jmxConfig) {
|
public JmxConnectorWrap(String clientLogIdent, Long brokerStartupTime, String host, Integer port, JmxConfig jmxConfig) {
|
||||||
this.physicalClusterId = physicalClusterId;
|
this.clientLogIdent=clientLogIdent;
|
||||||
this.brokerId = brokerId;
|
|
||||||
this.brokerStartupTime = brokerStartupTime;
|
this.brokerStartupTime = brokerStartupTime;
|
||||||
this.host = host;
|
this.host = host;
|
||||||
|
|
||||||
@@ -93,7 +91,7 @@ public class JmxConnectorWrap {
|
|||||||
|
|
||||||
jmxConnector = null;
|
jmxConnector = null;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.warn("close JmxConnector exception, physicalClusterId:{} brokerId:{} host:{} port:{}.", physicalClusterId, brokerId, host, port, e);
|
LOGGER.warn("close JmxConnector exception, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,12 +174,12 @@ public class JmxConnectorWrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jmxConnector = JMXConnectorFactory.connect(new JMXServiceURL(jmxUrl), environment);
|
jmxConnector = JMXConnectorFactory.connect(new JMXServiceURL(jmxUrl), environment);
|
||||||
LOGGER.info("JMX connect success, physicalClusterId:{} brokerId:{} host:{} port:{}.", physicalClusterId, brokerId, host, port);
|
LOGGER.info("JMX connect success, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port);
|
||||||
return true;
|
return true;
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
LOGGER.error("JMX url exception, physicalClusterId:{} brokerId:{} host:{} port:{} jmxUrl:{}", physicalClusterId, brokerId, host, port, jmxUrl, e);
|
LOGGER.error("JMX url exception, clientLogIdent:{} host:{} port:{} jmxUrl:{}", clientLogIdent, host, port, jmxUrl, e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("JMX connect exception, physicalClusterId:{} brokerId:{} host:{} port:{}.", physicalClusterId, brokerId, host, port, e);
|
LOGGER.error("JMX connect exception, clientLogIdent:{} host:{} port:{}.", clientLogIdent, host, port, e);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,6 +69,20 @@ public class JmxName {
|
|||||||
public static final String JMX_ZK_SYNC_CONNECTS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec";
|
public static final String JMX_ZK_SYNC_CONNECTS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec";
|
||||||
public static final String JMX_ZK_DISCONNECTORS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperDisconnectsPerSec";
|
public static final String JMX_ZK_DISCONNECTORS_PER_SEC = "kafka.server:type=SessionExpireListener,name=ZooKeeperDisconnectsPerSec";
|
||||||
|
|
||||||
|
/*********************************************************** connect ***********************************************************/
|
||||||
|
public static final String JMX_CONNECT_WORKER_METRIC = "kafka.connect:type=connect-worker-metrics";
|
||||||
|
|
||||||
|
public static final String JMX_CONNECT_WORKER_CONNECTOR_METRIC = "kafka.connect:type=connect-worker-metrics,connector=%s";
|
||||||
|
|
||||||
|
public static final String JMX_CONNECTOR_TASK_CONNECTOR_METRIC = "kafka.connect:type=connector-task-metrics,connector=%s,task=%s";
|
||||||
|
|
||||||
|
public static final String JMX_CONNECTOR_SOURCE_TASK_METRICS = "kafka.connect:type=source-task-metrics,connector=%s,task=%s";
|
||||||
|
|
||||||
|
public static final String JMX_CONNECTOR_SINK_TASK_METRICS = "kafka.connect:type=sink-task-metrics,connector=%s,task=%s";
|
||||||
|
|
||||||
|
public static final String JMX_CONNECTOR_TASK_ERROR_METRICS = "kafka.connect:type=task-error-metrics,connector=%s,task=%s";
|
||||||
|
|
||||||
|
|
||||||
private JmxName() {
|
private JmxName() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
import java.net.URI;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -251,4 +252,13 @@ public class CommonUtils {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getWorkerId(String url){
|
||||||
|
try {
|
||||||
|
URI uri = new URI(url);
|
||||||
|
return uri.getHost() + ":" + uri.getPort();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user