From b8f07beee80d780edf6102fac87ff3af570d0783 Mon Sep 17 00:00:00 2001 From: WujieRen Date: Sun, 5 Mar 2023 19:34:06 +0800 Subject: [PATCH] perf: Remove constant Constants.ID/ALERT_GROUP_ID/ALERT_QUOTA_NAME/ALERT_GROUP_NAME/ALERT_LEVEL, and use SFunction instead. --- .../api/controller/AlertGroupController.java | 4 +- .../api/controller/UserInfoController.java | 2 +- .../service/impl/AlertGroupServiceImpl.java | 45 ++++++++++---- .../impl/ClusterAlertHistoryServiceImpl.java | 13 ++-- .../impl/ClusterAlertQuotaServiceImpl.java | 62 +++++++++++-------- .../service/impl/ClusterHostServiceImpl.java | 6 +- ...ClusterServiceRoleInstanceServiceImpl.java | 9 +-- .../service/impl/FrameServiceServiceImpl.java | 2 +- .../java/com/datasophon/common/Constants.java | 5 -- .../com/datasophon/common/utils/Result.java | 7 +++ 10 files changed, 94 insertions(+), 61 deletions(-) diff --git a/datasophon-api/src/main/java/com/datasophon/api/controller/AlertGroupController.java b/datasophon-api/src/main/java/com/datasophon/api/controller/AlertGroupController.java index b7ea82d4..4fa97e55 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/controller/AlertGroupController.java +++ b/datasophon-api/src/main/java/com/datasophon/api/controller/AlertGroupController.java @@ -19,11 +19,9 @@ import java.util.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.datasophon.api.enums.Status; import com.datasophon.api.service.AlertGroupService; import com.datasophon.api.service.ClusterAlertQuotaService; -import com.datasophon.common.Constants; import com.datasophon.dao.entity.ClusterAlertQuota; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; @@ -96,7 +94,7 @@ public Result update(@RequestBody AlertGroupEntity alertGroup) { public Result delete(@RequestBody Integer[] ids) { //校验是否绑定告警指标 - List list = alertQuotaService.list(new QueryWrapper().in(Constants.ALERT_GROUP_ID, ids)); + List list = alertQuotaService.lambdaQuery().in(ClusterAlertQuota::getAlertGroupId, ids).list(); if(list.size() > 0){ return Result.error(Status.ALERT_GROUP_TIPS_ONE.getMsg()); } diff --git a/datasophon-api/src/main/java/com/datasophon/api/controller/UserInfoController.java b/datasophon-api/src/main/java/com/datasophon/api/controller/UserInfoController.java index 9f607c9c..e542d9aa 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/controller/UserInfoController.java +++ b/datasophon-api/src/main/java/com/datasophon/api/controller/UserInfoController.java @@ -64,7 +64,7 @@ public Result list(String username,Integer page,Integer pageSize) { */ @RequestMapping("/all") public Result all() { - List list = userInfoService.list(new QueryWrapper().ne(Constants.ID,1)); + List list = userInfoService.lambdaQuery().eq(UserInfoEntity::getId, 1).list(); return Result.success(list); } diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/AlertGroupServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/AlertGroupServiceImpl.java index 5e0da4db..8c6369b3 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/AlertGroupServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/AlertGroupServiceImpl.java @@ -17,9 +17,11 @@ package com.datasophon.api.service.impl; +import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper; import com.datasophon.api.service.ClusterAlertGroupMapService; import com.datasophon.api.service.ClusterAlertQuotaService; import com.datasophon.common.Constants; +import com.datasophon.common.utils.CollectionUtils; import com.datasophon.common.utils.Result; import com.datasophon.dao.entity.ClusterAlertGroupMap; import com.datasophon.dao.entity.ClusterAlertQuota; @@ -28,6 +30,8 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -51,21 +55,36 @@ public class AlertGroupServiceImpl extends ServiceImpl list = alertGroupMapService.list(new QueryWrapper().eq(Constants.CLUSTER_ID, clusterId)); - List groupIds = list.stream().map(e -> e.getAlertGroupId()).collect(Collectors.toList()); - List alertGroupList = this.list(new QueryWrapper() - .in(Constants.ID, groupIds) - .like(StringUtils.isNotBlank(alertGroupName),Constants.ALERT_GROUP_NAME,alertGroupName) - .last("limit " + offset + "," + pageSize)); - int count = this.count(new QueryWrapper() - .in(Constants.ID, groupIds) - .like(StringUtils.isNotBlank(alertGroupName),Constants.ALERT_GROUP_NAME,alertGroupName)); + + List alertGroupMapList = alertGroupMapService.list(new QueryWrapper().eq(Constants.CLUSTER_ID, clusterId)); + if(CollectionUtils.isEmpty(alertGroupMapList)) { + return Result.successEmptyCount(); + } + + List groupIds = alertGroupMapList.stream().map(ClusterAlertGroupMap::getAlertGroupId).collect(Collectors.toList()); + LambdaQueryChainWrapper wrapper = this.lambdaQuery() + .in(AlertGroupEntity::getId, groupIds) + .like(StringUtils.isNotBlank(alertGroupName), AlertGroupEntity::getAlertGroupName, alertGroupName); + + List alertGroupList = wrapper.last("limit " + offset + "," + pageSize).list(); + if(CollectionUtils.isEmpty(alertGroupList)) { + return Result.successEmptyCount(); + } + + Set alertGroupIdList = alertGroupList.stream().map(AlertGroupEntity::getId).collect(Collectors.toSet()); //查询告警组下告警指标个数 - for (AlertGroupEntity alertGroupEntity : alertGroupList) { - List quotaList = quotaService.list(new QueryWrapper().eq(Constants.ALERT_GROUP_ID, alertGroupEntity.getId())); - alertGroupEntity.setAlertQuotaNum(quotaList.size()); + List clusQuotaList = quotaService.lambdaQuery().in(ClusterAlertQuota::getAlertGroupId, alertGroupIdList).list(); + if(CollectionUtils.isNotEmpty(clusQuotaList)) { + Map> alertGroupByGroupId = clusQuotaList.stream().collect(Collectors.groupingBy(ClusterAlertQuota::getAlertGroupId)); + alertGroupList.forEach(a -> { + List tmpQuotaList = alertGroupByGroupId.get(a.getId()); + int quotaCnt = CollectionUtils.isEmpty(tmpQuotaList) ? 0 : tmpQuotaList.size(); + a.setAlertQuotaNum(quotaCnt); + }); } - return Result.success(alertGroupList).put(Constants.TOTAL,count); + + int count = wrapper.count() == null ? 0 : wrapper.count(); + return Result.success(alertGroupList).put(Constants.TOTAL, count); } @Override diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertHistoryServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertHistoryServiceImpl.java index cec3417d..8f4e89e7 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertHistoryServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertHistoryServiceImpl.java @@ -164,12 +164,13 @@ public void saveAlertHistory(String alertMessage) { if ("resolved".equals(status)) { if (Objects.nonNull(clusterAlertHistory)) { clusterAlertHistory.setIsEnabled(2); - List warnAlertList = this.list(new QueryWrapper() - .eq(Constants.HOSTNAME, hostname) - .eq(Constants.ALERT_GROUP_NAME, serviceRoleName.toLowerCase()) - .eq(Constants.IS_ENABLED, 1) - .eq(Constants.ALERT_LEVEL, AlertLevel.WARN) - .ne(Constants.ID,clusterAlertHistory.getId())); + List warnAlertList = this.lambdaQuery() + .eq(ClusterAlertHistory::getHostname, hostname) + .eq(ClusterAlertHistory::getAlertGroupName, serviceRoleName.toLowerCase()) + .eq(ClusterAlertHistory::getIsEnabled, 1) + .eq(ClusterAlertHistory::getAlertLevel, AlertLevel.WARN) + .ne(ClusterAlertHistory::getId,clusterAlertHistory.getId()) + .list(); if("exception".equals(labels.getSeverity())){//异常告警处理 if("node".equals(serviceRoleName)){ //置为正常 diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertQuotaServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertQuotaServiceImpl.java index 421b7dfa..44384eea 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertQuotaServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterAlertQuotaServiceImpl.java @@ -18,14 +18,15 @@ package com.datasophon.api.service.impl; import akka.actor.ActorRef; +import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper; import com.datasophon.api.master.ActorUtils; import com.datasophon.api.master.PrometheusActor; import com.datasophon.api.service.AlertGroupService; import com.datasophon.common.Constants; -import com.datasophon.common.cache.CacheUtils; import com.datasophon.common.command.GenerateAlertConfigCommand; import com.datasophon.common.model.AlertItem; import com.datasophon.common.model.Generators; +import com.datasophon.common.utils.CollectionUtils; import com.datasophon.common.utils.Result; import com.datasophon.dao.entity.AlertGroupEntity; import com.datasophon.dao.enums.QuotaState; @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; import java.util.*; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -56,42 +58,52 @@ public class ClusterAlertQuotaServiceImpl extends ServiceImpl list = this.list(new QueryWrapper() - .eq(alertGroupId != null, Constants.ALERT_GROUP_ID, alertGroupId) - .like(StringUtils.isNotBlank(quotaName), Constants.ALERT_QUOTA_NAME, quotaName) - .last("limit " + offset + "," + pageSize)); - int count = this.count(new QueryWrapper() - .eq(alertGroupId != null, Constants.ALERT_GROUP_ID, alertGroupId) - .like(StringUtils.isNotBlank(quotaName), Constants.ALERT_QUOTA_NAME, quotaName)); + + LambdaQueryChainWrapper wrapper = this.lambdaQuery() + .eq(alertGroupId != null, ClusterAlertQuota::getAlertGroupId, alertGroupId) + .like(StringUtils.isNotBlank(quotaName), ClusterAlertQuota::getAlertQuotaName, quotaName); + + List alertQuotaList = wrapper.last("limit " + offset + "," + pageSize).list(); + if(CollectionUtils.isEmpty(alertQuotaList)) { + return Result.successEmptyCount(); + } //查询通知组 - for (ClusterAlertQuota clusterAlertQuota : list) { - AlertGroupEntity alertGroupEntity = alertGroupService.getById(clusterAlertQuota.getAlertGroupId()); - clusterAlertQuota.setAlertGroupName(alertGroupEntity.getAlertGroupName()); - clusterAlertQuota.setQuotaStateCode(clusterAlertQuota.getQuotaState().getValue()); + Set alertQuotaIdList = alertQuotaList.stream().map(ClusterAlertQuota::getAlertGroupId).collect(Collectors.toSet()); + Collection alertGroupEntityList = alertGroupService.listByIds(alertQuotaIdList); + if(CollectionUtils.isNotEmpty(alertGroupEntityList)) { + Map idMap = alertGroupEntityList.stream().collect(Collectors.toMap(AlertGroupEntity::getId, a -> a, (a1, a2) -> a1)); + alertQuotaList.forEach(a -> { + AlertGroupEntity alertGroupEntity = idMap.get(a.getAlertGroupId()); + if(Objects.nonNull(alertGroupEntity)) { + a.setAlertGroupName(alertGroupEntity.getAlertGroupName()); + } + a.setQuotaStateCode(a.getQuotaState().getValue()); + }); } - return Result.success(list).put(Constants.TOTAL,count); + + int count = wrapper.count() == null ? 0 : wrapper.count(); + return Result.success(alertQuotaList).put(Constants.TOTAL, count); } @Override public Result start(Integer clusterId, String alertQuotaIds) { HashMap> map = new HashMap<>(); List ids = Arrays.asList(alertQuotaIds.split(",")); - List alertQuotaList = this.list(new QueryWrapper() - .in(Constants.ID, ids)); + List alertQuotaList = this.lambdaQuery().in(ClusterAlertQuota::getId, ids).list(); for (ClusterAlertQuota alertQuota : alertQuotaList) { - if(!map.containsKey(alertQuota.getServiceCategory())){ + if (!map.containsKey(alertQuota.getServiceCategory())) { ArrayList quotaList = new ArrayList<>(); quotaList.add(alertQuota); - map.put(alertQuota.getServiceCategory(),quotaList); - }else{ + map.put(alertQuota.getServiceCategory(), quotaList); + } else { List quotaList = map.get(alertQuota.getServiceCategory()); quotaList.add(alertQuota); } alertQuota.setQuotaState(QuotaState.RUNNING); } - if(alertQuotaList.size() > 0){ - logger.info("start alert size is {}",alertQuotaList.size()); + if (alertQuotaList.size() > 0) { + logger.info("start alert size is {}", alertQuotaList.size()); this.updateBatchById(alertQuotaList); } HashMap> configFileMap = new HashMap<>(); @@ -99,14 +111,14 @@ public Result start(Integer clusterId, String alertQuotaIds) { String category = entry.getKey(); List alerts = entry.getValue(); Generators generators = new Generators(); - generators.setFilename(category.toLowerCase()+".yml"); + generators.setFilename(category.toLowerCase() + ".yml"); generators.setConfigFormat("prometheus"); generators.setOutputDirectory("alert_rules"); ArrayList alertItems = new ArrayList<>(); for (ClusterAlertQuota clusterAlertQuota : alerts) { AlertItem alertItem = new AlertItem(); alertItem.setAlertName(clusterAlertQuota.getAlertQuotaName()); - alertItem.setAlertExpr(clusterAlertQuota.getAlertExpr()+" "+ clusterAlertQuota.getCompareMethod()+" "+clusterAlertQuota.getAlertThreshold()); + alertItem.setAlertExpr(clusterAlertQuota.getAlertExpr() + " " + clusterAlertQuota.getCompareMethod() + " " + clusterAlertQuota.getAlertThreshold()); alertItem.setClusterId(clusterId); alertItem.setServiceRoleName(clusterAlertQuota.getServiceRoleName()); alertItem.setAlertLevel(clusterAlertQuota.getAlertLevel().getDesc()); @@ -114,9 +126,9 @@ public Result start(Integer clusterId, String alertQuotaIds) { alertItem.setTriggerDuration(clusterAlertQuota.getTriggerDuration()); alertItems.add(alertItem); } - configFileMap.put(generators,alertItems); + configFileMap.put(generators, alertItems); } - ActorRef prometheusActor = ActorUtils.getLocalActor(PrometheusActor.class,ActorUtils.getActorRefName(PrometheusActor.class)); + ActorRef prometheusActor = ActorUtils.getLocalActor(PrometheusActor.class, ActorUtils.getActorRefName(PrometheusActor.class)); GenerateAlertConfigCommand alertConfigCommand = new GenerateAlertConfigCommand(); alertConfigCommand.setClusterId(clusterId); alertConfigCommand.setConfigFileMap(configFileMap); @@ -140,6 +152,6 @@ public void saveAlertQuota(ClusterAlertQuota clusterAlertQuota) { @Override public List listAlertQuotaByServiceName(String serviceName) { - return this.list(new QueryWrapper().eq(Constants.SERVICE_CATEGORY,serviceName)); + return this.list(new QueryWrapper().eq(Constants.SERVICE_CATEGORY, serviceName)); } } diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterHostServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterHostServiceImpl.java index 65027baa..67a74d99 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterHostServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterHostServiceImpl.java @@ -148,7 +148,7 @@ public void deleteHostByClusterId(Integer clusterId) { @Override public void updateBatchNodeLabel(List hostIds, String nodeLabel) { - List list = this.list(new QueryWrapper().in(Constants.ID, hostIds)); + List list = this.lambdaQuery().in(ClusterHostEntity::getId, hostIds).list(); for (ClusterHostEntity clusterHostEntity : list) { clusterHostEntity.setNodeLabel(nodeLabel); } @@ -157,13 +157,13 @@ public void updateBatchNodeLabel(List hostIds, String nodeLabel) { @Override public List getHostListByIds(List ids) { - return this.list(new QueryWrapper().in(Constants.ID, ids)); + return this.lambdaQuery().in(ClusterHostEntity::getId, ids).list(); } @Override public Result assignRack(Integer clusterId, String rack, String hostIds) { List ids = Arrays.asList(hostIds.split(",")); - List list = this.list(new QueryWrapper().in(Constants.ID, ids)); + List list = this.lambdaQuery().in(ClusterHostEntity::getId, ids).list(); for (ClusterHostEntity clusterHostEntity : list) { clusterHostEntity.setRack(rack); } diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterServiceRoleInstanceServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterServiceRoleInstanceServiceImpl.java index 11de8202..31b829c4 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterServiceRoleInstanceServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/ClusterServiceRoleInstanceServiceImpl.java @@ -238,16 +238,17 @@ public Result decommissionNode(String serviceRoleInstanceIds, String serviceName } } //查询已退役节点 - List list = this.list(new QueryWrapper() - .eq(Constants.SERVICE_ROLE_STATE, ServiceRoleState.DECOMMISSIONING) - .in(Constants.ID, serviceRoleInstanceIds)); + List list = this.lambdaQuery() + .eq(ClusterServiceRoleInstanceEntity::getServiceRoleState, ServiceRoleState.DECOMMISSIONING) + .in(ClusterServiceRoleInstanceEntity::getId, serviceRoleInstanceIds) + .list(); //添加已退役节点到黑名单 for (ClusterServiceRoleInstanceEntity roleInstanceEntity : list) { hosts.add(roleInstanceEntity.getHostname()); } String type = "blacklist"; String roleName = "NameNode"; - if ("nodemanager".equals(serviceRoleName.toLowerCase())) { + if ("nodemanager".equalsIgnoreCase(serviceRoleName)) { type = "nmexclude"; roleName = "ResourceManager"; } diff --git a/datasophon-api/src/main/java/com/datasophon/api/service/impl/FrameServiceServiceImpl.java b/datasophon-api/src/main/java/com/datasophon/api/service/impl/FrameServiceServiceImpl.java index 31780ebe..db785e92 100644 --- a/datasophon-api/src/main/java/com/datasophon/api/service/impl/FrameServiceServiceImpl.java +++ b/datasophon-api/src/main/java/com/datasophon/api/service/impl/FrameServiceServiceImpl.java @@ -107,7 +107,7 @@ public List getAllFrameServiceByFrameCode(String clusterFram @Override public List listServices(String serviceIds) { List ids = Arrays.stream(serviceIds.split(",")).collect(Collectors.toList()); - return this.list(new QueryWrapper().in(Constants.ID, ids)); + return this.lambdaQuery().in(FrameServiceEntity::getId, ids).list(); } diff --git a/datasophon-common/src/main/java/com/datasophon/common/Constants.java b/datasophon-common/src/main/java/com/datasophon/common/Constants.java index 0fda4ba4..c254104c 100644 --- a/datasophon-common/src/main/java/com/datasophon/common/Constants.java +++ b/datasophon-common/src/main/java/com/datasophon/common/Constants.java @@ -65,7 +65,6 @@ public final class Constants { public static final String LOCALE_LANGUAGE = "language"; public static final String CODE = "code"; public static final String CLUSTER_CODE = "cluster_code"; - public static final String ID = "id"; public static final String START_DISTRIBUTE_AGENT = "start_distribute_agent"; public static final String CHECK_WORKER_MD5_CMD = "md5sum "+INSTALL_PATH+"/datasophon-worker.tar.gz | awk '{print $1}'"; public static final String CREATE_TIME = "create_time"; @@ -92,8 +91,6 @@ public final class Constants { public static final String IS_ENABLED = "is_enabled"; public static final String SORT_NUM = "sort_num"; public static final String CN = "chinese"; - public static final String ALERT_GROUP_ID = "alert_group_id"; - public static final String ALERT_QUOTA_NAME = "alert_quota_name"; public static final String NAME = "name"; public static final String QUEUE_NAME = "queue_name"; public static final String ROLE_TYPE = "role_type"; @@ -107,8 +104,6 @@ public final class Constants { public static final String ROLE_GROUP_TYPE = "role_group_type"; public static final String NEET_RESTART = "need_restart"; - public static final String ALERT_GROUP_NAME = "alert_group_name"; - public static final String ALERT_LEVEL = "alert_level"; public static final String CPU_ARCHITECTURE = "cpu_architecture"; public static final String HOST_STATE = "host_state"; public static final String FAILED = "failed"; diff --git a/datasophon-common/src/main/java/com/datasophon/common/utils/Result.java b/datasophon-common/src/main/java/com/datasophon/common/utils/Result.java index aceabdd5..d8a373ea 100644 --- a/datasophon-common/src/main/java/com/datasophon/common/utils/Result.java +++ b/datasophon-common/src/main/java/com/datasophon/common/utils/Result.java @@ -21,6 +21,7 @@ import com.datasophon.common.Constants; import lombok.Data; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -80,6 +81,12 @@ public static Result success() { return result; } + public static Result successEmptyCount() { + Result result = success(new ArrayList<>(0)); + result.put(Constants.TOTAL, 0); + return result; + } + @Override public Result put(String key, Object value) { super.put(key, value);