[Optimize]无ZK模块时,巡检详情忽略对ZK的展示(#764)

This commit is contained in:
zengqiao
2023-01-03 13:16:54 +08:00
committed by EricZeng
parent c187b5246f
commit 4994639111
12 changed files with 93 additions and 42 deletions

View File

@@ -33,10 +33,6 @@ public class HealthScoreBaseResultVO extends BaseTimeVO {
@ApiModelProperty(value="检查说明", example = "Group延迟") @ApiModelProperty(value="检查说明", example = "Group延迟")
private String configDesc; private String configDesc;
@Deprecated
@ApiModelProperty(value="得分", example = "100")
private Integer score = 100;
@ApiModelProperty(value="结果", example = "true") @ApiModelProperty(value="结果", example = "true")
private Boolean passed; private Boolean passed;

View File

@@ -28,6 +28,8 @@ public abstract class AbstractHealthCheckService {
public abstract HealthCheckDimensionEnum getHealthCheckDimensionEnum(); public abstract HealthCheckDimensionEnum getHealthCheckDimensionEnum();
public abstract Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId);
public HealthCheckResult checkAndGetResult(ClusterParam clusterParam, BaseClusterHealthConfig clusterHealthConfig) { public HealthCheckResult checkAndGetResult(ClusterParam clusterParam, BaseClusterHealthConfig clusterHealthConfig) {
if (ValidateUtils.anyNull(clusterParam, clusterHealthConfig)) { if (ValidateUtils.anyNull(clusterParam, clusterHealthConfig)) {
return null; return null;

View File

@@ -57,6 +57,11 @@ public class HealthCheckBrokerService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.BROKER; return HealthCheckDimensionEnum.BROKER;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
return this.getHealthCheckDimensionEnum().getDimension();
}
/** /**
* Broker网络处理线程平均值过低 * Broker网络处理线程平均值过低
*/ */

View File

@@ -44,6 +44,11 @@ public class HealthCheckClusterService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.CLUSTER; return HealthCheckDimensionEnum.CLUSTER;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
return this.getHealthCheckDimensionEnum().getDimension();
}
/** /**
* 检查NoController * 检查NoController
*/ */

View File

@@ -14,7 +14,9 @@ import com.xiaojukeji.know.streaming.km.common.constant.Constant;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum;
import com.xiaojukeji.know.streaming.km.common.utils.Tuple; import com.xiaojukeji.know.streaming.km.common.utils.Tuple;
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterMetricService; import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterMetricService;
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService;
import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService; import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService;
import com.xiaojukeji.know.streaming.km.persistence.connect.cache.LoadedConnectClusterCache; import com.xiaojukeji.know.streaming.km.persistence.connect.cache.LoadedConnectClusterCache;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -32,9 +34,11 @@ import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.conn
*/ */
@Service @Service
public class HealthCheckConnectClusterService extends AbstractHealthCheckService { public class HealthCheckConnectClusterService extends AbstractHealthCheckService {
private static final ILog log = LogFactory.getLog(HealthCheckConnectClusterService.class); private static final ILog log = LogFactory.getLog(HealthCheckConnectClusterService.class);
@Autowired
private ConnectClusterService connectClusterService;
@Autowired @Autowired
private ConnectClusterMetricService connectClusterMetricService; private ConnectClusterMetricService connectClusterMetricService;
@@ -57,6 +61,16 @@ public class HealthCheckConnectClusterService extends AbstractHealthCheckService
return HealthCheckDimensionEnum.CONNECT_CLUSTER; return HealthCheckDimensionEnum.CONNECT_CLUSTER;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
List<ConnectCluster> clusterList = connectClusterService.listByKafkaCluster(kafkaClusterPhyId);
if (ValidateUtils.isEmptyList(clusterList)) {
return null;
}
return this.getHealthCheckDimensionEnum().getDimension();
}
private HealthCheckResult checkStartupFailurePercentage(Tuple<ClusterParam, BaseClusterHealthConfig> paramTuple) { private HealthCheckResult checkStartupFailurePercentage(Tuple<ClusterParam, BaseClusterHealthConfig> paramTuple) {
ConnectClusterParam param = (ConnectClusterParam) paramTuple.getV1(); ConnectClusterParam param = (ConnectClusterParam) paramTuple.getV1();
HealthCompareValueConfig compareConfig = (HealthCompareValueConfig) paramTuple.getV2(); HealthCompareValueConfig compareConfig = (HealthCompareValueConfig) paramTuple.getV2();

View File

@@ -4,6 +4,7 @@ import com.didiglobal.logi.log.ILog;
import com.didiglobal.logi.log.LogFactory; import com.didiglobal.logi.log.LogFactory;
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig; import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.BaseClusterHealthConfig;
import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.HealthCompareValueConfig; import com.xiaojukeji.know.streaming.km.common.bean.entity.config.healthcheck.HealthCompareValueConfig;
import com.xiaojukeji.know.streaming.km.common.bean.entity.connect.ConnectCluster;
import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthCheckResult; import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthCheckResult;
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterParam; import com.xiaojukeji.know.streaming.km.common.bean.entity.param.cluster.ClusterParam;
@@ -13,6 +14,8 @@ import com.xiaojukeji.know.streaming.km.common.constant.Constant;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum;
import com.xiaojukeji.know.streaming.km.common.utils.Tuple; import com.xiaojukeji.know.streaming.km.common.utils.Tuple;
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService;
import com.xiaojukeji.know.streaming.km.core.service.connect.connector.ConnectorMetricService; 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.connect.connector.ConnectorService;
import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService; import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService;
@@ -32,11 +35,14 @@ import static com.xiaojukeji.know.streaming.km.core.service.version.metrics.conn
*/ */
@Service @Service
public class HealthCheckConnectorService extends AbstractHealthCheckService { public class HealthCheckConnectorService extends AbstractHealthCheckService {
private static final ILog log = LogFactory.getLog(HealthCheckConnectorService.class); private static final ILog log = LogFactory.getLog(HealthCheckConnectorService.class);
@Autowired @Autowired
private ConnectorService connectorService; private ConnectorService connectorService;
@Autowired
private ConnectClusterService connectClusterService;
@Autowired @Autowired
private ConnectorMetricService connectorMetricService; private ConnectorMetricService connectorMetricService;
@@ -66,6 +72,16 @@ public class HealthCheckConnectorService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.CONNECTOR; return HealthCheckDimensionEnum.CONNECTOR;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
List<ConnectCluster> clusterList = connectClusterService.listByKafkaCluster(kafkaClusterPhyId);
if (ValidateUtils.isEmptyList(clusterList)) {
return null;
}
return this.getHealthCheckDimensionEnum().getDimension();
}
private HealthCheckResult checkFailedTaskCount(Tuple<ClusterParam, BaseClusterHealthConfig> paramTuple) { private HealthCheckResult checkFailedTaskCount(Tuple<ClusterParam, BaseClusterHealthConfig> paramTuple) {
ConnectorParam param = (ConnectorParam) paramTuple.getV1(); ConnectorParam param = (ConnectorParam) paramTuple.getV1();
HealthCompareValueConfig compareConfig = (HealthCompareValueConfig) paramTuple.getV2(); HealthCompareValueConfig compareConfig = (HealthCompareValueConfig) paramTuple.getV2();

View File

@@ -51,6 +51,11 @@ public class HealthCheckGroupService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.GROUP; return HealthCheckDimensionEnum.GROUP;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
return this.getHealthCheckDimensionEnum().getDimension();
}
/** /**
* 检查Group re-balance太频繁 * 检查Group re-balance太频繁
*/ */

View File

@@ -62,6 +62,11 @@ public class HealthCheckTopicService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.TOPIC; return HealthCheckDimensionEnum.TOPIC;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
return this.getHealthCheckDimensionEnum().getDimension();
}
/** /**
* 检查Topic长期未同步 * 检查Topic长期未同步
*/ */

View File

@@ -19,6 +19,7 @@ import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum;
import com.xiaojukeji.know.streaming.km.common.enums.zookeeper.ZKRoleEnum; import com.xiaojukeji.know.streaming.km.common.enums.zookeeper.ZKRoleEnum;
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.Tuple; import com.xiaojukeji.know.streaming.km.common.utils.Tuple;
import com.xiaojukeji.know.streaming.km.common.utils.ValidateUtils;
import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.ZookeeperUtils; import com.xiaojukeji.know.streaming.km.common.utils.zookeeper.ZookeeperUtils;
import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService; import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService;
import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ZookeeperMetricVersionItems; import com.xiaojukeji.know.streaming.km.core.service.version.metrics.kafka.ZookeeperMetricVersionItems;
@@ -56,7 +57,7 @@ public class HealthCheckZookeeperService extends AbstractHealthCheckService {
@Override @Override
public List<ClusterParam> getResList(Long clusterPhyId) { public List<ClusterParam> getResList(Long clusterPhyId) {
ClusterPhy clusterPhy = LoadedClusterPhyCache.getByPhyId(clusterPhyId); ClusterPhy clusterPhy = LoadedClusterPhyCache.getByPhyId(clusterPhyId);
if (clusterPhy == null) { if (clusterPhy == null || ValidateUtils.isBlank(clusterPhy.getZookeeper())) {
return new ArrayList<>(); return new ArrayList<>();
} }
@@ -80,6 +81,15 @@ public class HealthCheckZookeeperService extends AbstractHealthCheckService {
return HealthCheckDimensionEnum.ZOOKEEPER; return HealthCheckDimensionEnum.ZOOKEEPER;
} }
@Override
public Integer getDimensionCodeIfSupport(Long kafkaClusterPhyId) {
if (ValidateUtils.isEmptyList(this.getResList(kafkaClusterPhyId))) {
return null;
}
return this.getHealthCheckDimensionEnum().getDimension();
}
private HealthCheckResult checkBrainSplit(Tuple<ClusterParam, BaseClusterHealthConfig> singleConfigSimpleTuple) { private HealthCheckResult checkBrainSplit(Tuple<ClusterParam, BaseClusterHealthConfig> singleConfigSimpleTuple) {
ZookeeperParam param = (ZookeeperParam) singleConfigSimpleTuple.getV1(); ZookeeperParam param = (ZookeeperParam) singleConfigSimpleTuple.getV1();

View File

@@ -3,7 +3,6 @@ package com.xiaojukeji.know.streaming.km.core.service.health.state;
import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthScoreResult; import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthScoreResult;
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.*; import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.*;
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum;
import java.util.List; import java.util.List;
@@ -22,8 +21,7 @@ public interface HealthStateService {
/** /**
* 获取集群健康检查结果 * 获取集群健康检查结果
*/ */
List<HealthScoreResult> getClusterHealthResult(Long clusterPhyId); List<HealthScoreResult> getAllDimensionHealthResult(Long clusterPhyId);
List<HealthScoreResult> getDimensionHealthResult(Long clusterPhyId, HealthCheckDimensionEnum dimensionEnum);
List<HealthScoreResult> getDimensionHealthResult(Long clusterPhyId, List<Integer> dimensionCodeList); List<HealthScoreResult> getDimensionHealthResult(Long clusterPhyId, List<Integer> dimensionCodeList);
List<HealthScoreResult> getResHealthResult(Long clusterPhyId, Long clusterId, Integer dimension, String resNme); List<HealthScoreResult> getResHealthResult(Long clusterPhyId, Long clusterId, Integer dimension, String resNme);
} }

View File

@@ -8,12 +8,14 @@ import com.xiaojukeji.know.streaming.km.common.bean.entity.health.HealthScoreRes
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.*; import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.*;
import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics; import com.xiaojukeji.know.streaming.km.common.bean.entity.metrics.connect.ConnectorMetrics;
import com.xiaojukeji.know.streaming.km.common.bean.po.health.HealthCheckResultPO; import com.xiaojukeji.know.streaming.km.common.bean.po.health.HealthCheckResultPO;
import com.xiaojukeji.know.streaming.km.common.component.SpringTool;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckDimensionEnum;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthCheckNameEnum;
import com.xiaojukeji.know.streaming.km.common.enums.health.HealthStateEnum; import com.xiaojukeji.know.streaming.km.common.enums.health.HealthStateEnum;
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.broker.BrokerService; import com.xiaojukeji.know.streaming.km.core.service.broker.BrokerService;
import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService; import com.xiaojukeji.know.streaming.km.core.service.connect.cluster.ConnectClusterService;
import com.xiaojukeji.know.streaming.km.core.service.health.checker.AbstractHealthCheckService;
import com.xiaojukeji.know.streaming.km.core.service.health.checkresult.HealthCheckResultService; import com.xiaojukeji.know.streaming.km.core.service.health.checkresult.HealthCheckResultService;
import com.xiaojukeji.know.streaming.km.core.service.health.state.HealthStateService; import com.xiaojukeji.know.streaming.km.core.service.health.state.HealthStateService;
import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperService; import com.xiaojukeji.know.streaming.km.core.service.zookeeper.ZookeeperService;
@@ -224,17 +226,20 @@ public class HealthStateServiceImpl implements HealthStateService {
} }
@Override @Override
public List<HealthScoreResult> getClusterHealthResult(Long clusterPhyId) { public List<HealthScoreResult> getAllDimensionHealthResult(Long clusterPhyId) {
List<HealthCheckResultPO> poList = healthCheckResultService.listCheckResult(clusterPhyId); List<Integer> supportedDimensionCodeList = new ArrayList<>();
return this.convert2HealthScoreResultList(clusterPhyId, poList, null); // 获取支持的code
} for (AbstractHealthCheckService service: SpringTool.getBeansOfType(AbstractHealthCheckService.class).values()) {
Integer dimensionCode = service.getDimensionCodeIfSupport(clusterPhyId);
if (dimensionCode == null) {
continue;
}
@Override supportedDimensionCodeList.add(dimensionCode);
public List<HealthScoreResult> getDimensionHealthResult(Long clusterPhyId, HealthCheckDimensionEnum dimensionEnum) { }
List<HealthCheckResultPO> poList = healthCheckResultService.listCheckResult(clusterPhyId, dimensionEnum.getDimension());
return this.convert2HealthScoreResultList(clusterPhyId, poList, dimensionEnum.getDimension()); return this.getDimensionHealthResult(clusterPhyId, supportedDimensionCodeList);
} }
@Override @Override
@@ -242,22 +247,14 @@ public class HealthStateServiceImpl implements HealthStateService {
//查找健康巡查结果 //查找健康巡查结果
List<HealthCheckResultPO> poList = new ArrayList<>(); List<HealthCheckResultPO> poList = new ArrayList<>();
for (Integer dimensionCode : dimensionCodeList) { for (Integer dimensionCode : dimensionCodeList) {
HealthCheckDimensionEnum dimensionEnum = HealthCheckDimensionEnum.getByCode(dimensionCode); if (dimensionCode.equals(HealthCheckDimensionEnum.CONNECTOR.getDimension())) {
if (dimensionEnum.equals(HealthCheckDimensionEnum.UNKNOWN)) {
continue;
}
if (dimensionEnum.equals(HealthCheckDimensionEnum.CONNECTOR)) {
poList.addAll(healthCheckResultService.getConnectorHealthCheckResult(clusterPhyId)); poList.addAll(healthCheckResultService.getConnectorHealthCheckResult(clusterPhyId));
} else { } else {
poList.addAll(healthCheckResultService.listCheckResult(clusterPhyId, dimensionEnum.getDimension())); poList.addAll(healthCheckResultService.listCheckResult(clusterPhyId, dimensionCode));
} }
} }
List<HealthScoreResult> resultList = this.getResHealthResult(clusterPhyId, dimensionCodeList, poList); return this.getResHealthResult(clusterPhyId, dimensionCodeList, poList);
return resultList;
} }
@Override @Override

View File

@@ -17,7 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -31,14 +31,6 @@ public class KafkaHealthController {
@Autowired @Autowired
private HealthStateService healthStateService; private HealthStateService healthStateService;
private List<Integer> allDimensionCodeList = new ArrayList<Integer>() {
{
for (HealthCheckDimensionEnum dimensionEnum : HealthCheckDimensionEnum.values()) {
add(dimensionEnum.getDimension());
}
}
};
@Autowired @Autowired
private HealthCheckResultService healthCheckResultService; private HealthCheckResultService healthCheckResultService;
@@ -49,12 +41,18 @@ public class KafkaHealthController {
@RequestParam(required = false) Integer dimensionCode) { @RequestParam(required = false) Integer dimensionCode) {
HealthCheckDimensionEnum dimensionEnum = HealthCheckDimensionEnum.getByCode(dimensionCode); HealthCheckDimensionEnum dimensionEnum = HealthCheckDimensionEnum.getByCode(dimensionCode);
if (!dimensionEnum.equals(HealthCheckDimensionEnum.UNKNOWN)) { if (!dimensionEnum.equals(HealthCheckDimensionEnum.UNKNOWN)) {
return Result.buildSuc(HealthScoreVOConverter.convert2HealthScoreResultDetailVOList(healthStateService.getDimensionHealthResult(clusterPhyId, Arrays.asList(dimensionCode)))); return Result.buildSuc(
HealthScoreVOConverter.convert2HealthScoreResultDetailVOList(
healthStateService.getDimensionHealthResult(clusterPhyId, Collections.singletonList(dimensionCode))
)
);
} }
return Result.buildSuc(HealthScoreVOConverter.convert2HealthScoreResultDetailVOList( return Result.buildSuc(
healthStateService.getDimensionHealthResult(clusterPhyId, allDimensionCodeList) HealthScoreVOConverter.convert2HealthScoreResultDetailVOList(
)); healthStateService.getAllDimensionHealthResult(clusterPhyId)
)
);
} }
@ApiOperation(value = "集群-健康检查详情") @ApiOperation(value = "集群-健康检查详情")