This is an automated email from the ASF dual-hosted git repository. gaoxihui pushed a commit to branch business-alert in repository https://gitbox.apache.org/repos/asf/ozhera.git
commit 328302a6c011111be8e44c64acb5de9d3a46b77d Author: gaoxihui <[email protected]> AuthorDate: Mon May 19 14:19:40 2025 +0800 feat: extended business alarm --- .../apache/ozhera/monitor/bo/AlarmRuleType.java | 4 +- .../ozhera/monitor/bo/AlarmStrategyType.java | 2 + .../service/api/AppAlarmServiceExtension.java | 10 +++++ .../api/impl/AppAlarmServiceExtensionImpl.java | 19 ++++++++ .../service/impl/AlarmStrategyServiceImpl.java | 51 ++++++++++++++++------ .../monitor/service/impl/AppAlarmServiceImpl.java | 36 ++++++++++++--- .../service/model/prometheus/AlarmRuleRequest.java | 1 + 7 files changed, 102 insertions(+), 21 deletions(-) diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmRuleType.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmRuleType.java index f7eff598..9dbcfb5d 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmRuleType.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmRuleType.java @@ -27,7 +27,9 @@ public enum AlarmRuleType { template(0,"模版规则"), - app_config(1,"应用配置规则") + app_config(1,"应用配置规则"), + + business_config(2,"业务指标配置规则"), ; private Integer code; diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmStrategyType.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmStrategyType.java index e399479c..70885652 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmStrategyType.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/bo/AlarmStrategyType.java @@ -31,6 +31,7 @@ public enum AlarmStrategyType { INTERFACE(1,"接口类监控", "Interface monitoring"), PAOMQL(2,"自定义PromQL", "Custom PromQL"), TESLA(3,"TESLA监控", "TESLA Monitoring"), + BUSINESS_METRIC(4,"业务指标监控", "BUSINESS_METRIC Monitoring"), ; private Integer code; private String label; @@ -54,6 +55,7 @@ public enum AlarmStrategyType { list.add(new Triple(AlarmStrategyType.SYSTEM.getCode() + "", AlarmStrategyType.SYSTEM.getLabel(), AlarmStrategyType.SYSTEM.getLabelEn())); list.add(new Triple(AlarmStrategyType.INTERFACE.getCode() + "", AlarmStrategyType.INTERFACE.getLabel(), AlarmStrategyType.INTERFACE.getLabelEn())); list.add(new Triple(AlarmStrategyType.PAOMQL.getCode(), AlarmStrategyType.PAOMQL.getLabel(), AlarmStrategyType.PAOMQL.getLabelEn())); + list.add(new Triple(AlarmStrategyType.BUSINESS_METRIC.getCode(), AlarmStrategyType.BUSINESS_METRIC.getLabel(), AlarmStrategyType.BUSINESS_METRIC.getLabelEn())); return list; } diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/AppAlarmServiceExtension.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/AppAlarmServiceExtension.java index 59c369c3..9a5f10d2 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/AppAlarmServiceExtension.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/AppAlarmServiceExtension.java @@ -18,7 +18,10 @@ */ package org.apache.ozhera.monitor.service.api; +import org.apache.ozhera.monitor.bo.AlarmStrategyParam; import org.apache.ozhera.monitor.result.Result; +import org.apache.ozhera.monitor.service.model.prometheus.AlarmRuleData; +import org.apache.ozhera.monitor.service.model.prometheus.AlarmRuleRequest; public interface AppAlarmServiceExtension { Result queryFunctionList(Integer projectId); @@ -26,4 +29,11 @@ public interface AppAlarmServiceExtension { Result queryRulesByIamId(Integer iamId, String userName); Integer getAlarmIdByResult(Result result); + + Result createBusinessAlert(AlarmRuleRequest param); + + Result editBusinessAlert(AlarmRuleRequest param); + + Result editBusinessAlertSingle(AlarmRuleData ruleData, String user); + } diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/impl/AppAlarmServiceExtensionImpl.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/impl/AppAlarmServiceExtensionImpl.java index e5ef188e..0c41e738 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/impl/AppAlarmServiceExtensionImpl.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/api/impl/AppAlarmServiceExtensionImpl.java @@ -18,8 +18,11 @@ */ package org.apache.ozhera.monitor.service.api.impl; +import org.apache.ozhera.monitor.bo.AlarmStrategyParam; import org.apache.ozhera.monitor.result.Result; import org.apache.ozhera.monitor.service.api.AppAlarmServiceExtension; +import org.apache.ozhera.monitor.service.model.prometheus.AlarmRuleData; +import org.apache.ozhera.monitor.service.model.prometheus.AlarmRuleRequest; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; @@ -46,4 +49,20 @@ public class AppAlarmServiceExtensionImpl implements AppAlarmServiceExtension { Double alarmId = (Double) result.getData(); return alarmId == null ? null : alarmId.intValue(); } + + @Override + public Result createBusinessAlert(AlarmRuleRequest param) { + return null; + } + + @Override + public Result editBusinessAlert(AlarmRuleRequest param) { + return null; + } + + @Override + public Result editBusinessAlertSingle(AlarmRuleData ruleData, String user) { + return null; + } + } diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AlarmStrategyServiceImpl.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AlarmStrategyServiceImpl.java index cc7378e0..73227441 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AlarmStrategyServiceImpl.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AlarmStrategyServiceImpl.java @@ -22,6 +22,7 @@ package org.apache.ozhera.monitor.service.impl; import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.JsonObject; +import com.xiaomi.mone.tpc.login.util.GsonUtil; import org.apache.ozhera.monitor.bo.AlarmStrategyInfo; import org.apache.ozhera.monitor.bo.AlarmStrategyParam; import org.apache.ozhera.monitor.bo.AlarmStrategyType; @@ -36,6 +37,7 @@ import org.apache.ozhera.monitor.result.ErrorCode; import org.apache.ozhera.monitor.result.Result; import org.apache.ozhera.monitor.service.AlarmStrategyService; import org.apache.ozhera.monitor.service.AppAlarmService; +import org.apache.ozhera.monitor.service.api.AppAlarmServiceExtension; import org.apache.ozhera.monitor.service.model.PageData; import org.apache.ozhera.monitor.service.model.prometheus.AlarmRuleRequest; import org.apache.ozhera.monitor.service.prometheus.PrometheusService; @@ -74,6 +76,9 @@ public class AlarmStrategyServiceImpl implements AlarmStrategyService { @Autowired private PrometheusService prometheusService; + + @Autowired + private AppAlarmServiceExtension appAlarmServiceExtension; private static final List<String> orderSorts = Lists.newArrayList("asc", "ASC", "desc", "DESC"); @@ -248,26 +253,35 @@ public class AlarmStrategyServiceImpl implements AlarmStrategyService { @Override public Result enabled(String user, AlarmStrategyParam param) { + AlarmStrategy strategy = appAlarmStrategyDao.getById(param.getId()); if (strategy == null) { return Result.fail(ErrorCode.nonExistentStrategy); } - AppMonitor app = - AlarmStrategyType.TESLA.getCode().equals(strategy.getStrategyType()) ? appMonitorDao.getByIamTreeId( - strategy.getIamId()) - : appMonitorDao.getMyApp(strategy.getAppId(), strategy.getIamId(), user, AppViewType.MyApp); - if (app == null) { - return Result.fail(ErrorCode.NoOperPermission); + + if(!AlarmStrategyType.BUSINESS_METRIC.getCode().equals(strategy.getStrategyType())){ + AppMonitor app = + AlarmStrategyType.TESLA.getCode().equals(strategy.getStrategyType()) ? appMonitorDao.getByIamTreeId( + strategy.getIamId()) + : appMonitorDao.getMyApp(strategy.getAppId(), strategy.getIamId(), user, AppViewType.MyApp); + if (app == null) { + return Result.fail(ErrorCode.NoOperPermission); + } } + Integer ruleStat = param.getStatus() == 0 ? 1 : 0; Result result = appAlarmService.enabledRules(strategy.getIamId(), strategy.getId(), ruleStat, user); + log.info("enabled alarm result : {}", GsonUtil.gsonString(result)); if (result.getCode() != ErrorCode.success.getCode()) { return result; } strategy = new AlarmStrategy(); strategy.setId(param.getId()); strategy.setStatus(param.getStatus()); - if (!appAlarmStrategyDao.updateById(strategy)) { + boolean updateDb = appAlarmStrategyDao.updateById(strategy); + log.info("enabled updateDb : {}", updateDb); + if (!updateDb) { + log.info("enabled alarm result : {}", GsonUtil.gsonString(result)); return Result.fail(ErrorCode.unknownError); } log.info("enabled规则策略成功:strategy={}", strategy); @@ -307,12 +321,15 @@ public class AlarmStrategyServiceImpl implements AlarmStrategyService { return Result.fail(ErrorCode.nonExistentStrategy); } log.info("AlarmStrategyService.deleteById strategy : {}", new Gson().toJson(strategy)); - AppMonitor app = - AlarmStrategyType.TESLA.getCode().equals(strategy.getStrategyType()) ? appMonitorDao.getByIamTreeId( - strategy.getIamId()) - : appMonitorDao.getMyApp(strategy.getAppId(), strategy.getIamId(), user, AppViewType.MyApp); - if (app == null) { - return Result.fail(ErrorCode.NoOperPermission); + + if(!AlarmStrategyType.BUSINESS_METRIC.getCode().equals(strategy.getStrategyType())){ + AppMonitor app = + AlarmStrategyType.TESLA.getCode().equals(strategy.getStrategyType()) ? appMonitorDao.getByIamTreeId( + strategy.getIamId()) + : appMonitorDao.getMyApp(strategy.getAppId(), strategy.getIamId(), user, AppViewType.MyApp); + if (app == null) { + return Result.fail(ErrorCode.NoOperPermission); + } } Result result = appAlarmService.deleteRulesByIamId(strategy.getIamId(), strategyId, user); if (result.getCode() != ErrorCode.success.getCode()) { @@ -389,6 +406,14 @@ public class AlarmStrategyServiceImpl implements AlarmStrategyService { if (deptMap.containsKey(5)) { strategy.setGroup5(deptMap.get(5).getDeptName()); } + + if(AlarmStrategyType.BUSINESS_METRIC.getCode().equals(param.getStrategyType())){ + PageData<List<AlarmStrategyInfo>> pageData = appAlarmStrategyDao.searchByCondNoUser(strategy, + param.getPage(), param.getPageSize(), param.getSortBy(), param.getSortOrder()); + ruleDataHandler(pageData.getList()); + return Result.success(pageData); + } + PageData<List<AlarmStrategyInfo>> pageData = appAlarmStrategyDao.searchByCond(user, param.isOwner(), strategy, param.getPage(), param.getPageSize(), param.getSortBy(), param.getSortOrder()); ruleDataHandler(pageData.getList()); diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java index 1e278344..b7bfc865 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java @@ -24,6 +24,7 @@ import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.xiaomi.mone.tpc.login.util.GsonUtil; import org.apache.ozhera.monitor.bo.AlarmCheckDataCount; import org.apache.ozhera.monitor.bo.AlarmRuleMetricType; import org.apache.ozhera.monitor.bo.AlarmRuleTemplateType; @@ -106,7 +107,7 @@ public class AppAlarmServiceImpl implements AppAlarmService { @NacosValue("${rule.evaluation.interval:20}") private Integer evaluationInterval; - + @NacosValue("${rule.evaluation.unit:s}") private String evaluationUnit; @@ -322,9 +323,12 @@ public class AppAlarmServiceImpl implements AppAlarmService { * 校验当前操作人是否具有权限 */ AppMonitor app = null; - if (param.getStrategyType().equals(AlarmStrategyType.TESLA.getCode())) { + if(param.getStrategyType().equals(AlarmStrategyType.BUSINESS_METRIC.getCode())){ + return appAlarmServiceExtension.createBusinessAlert(param); + + }else if (param.getStrategyType().equals(AlarmStrategyType.TESLA.getCode())) { app = appMonitorDao.getByIamTreeId(param.getIamId()); - } else { + }else { app = appMonitorDao.getMyApp(param.getProjectId(), param.getIamId(), param.getUser(), AppViewType.MyApp); } @@ -353,6 +357,10 @@ public class AppAlarmServiceImpl implements AppAlarmService { @Override public Result batchAddRulesWithStrategy(AlarmRuleRequest param) { + + if(param.getStrategyType().equals(AlarmStrategyType.BUSINESS_METRIC.getCode())){ + return appAlarmServiceExtension.createBusinessAlert(param); + } List<ProjectAlarmInfo> projectsAlarmInfo = param.getProjectsAlarmInfo(); if (projectsAlarmInfo == null) { @@ -601,6 +609,11 @@ public class AppAlarmServiceImpl implements AppAlarmService { log.error("editAlarmRuleSingle strategy is not exist!ruleData:{}", ruleData); return Result.fail(ErrorCode.nonExistentStrategy); } + + + if(alarmStrategy.getStrategyType().equals(AlarmStrategyType.BUSINESS_METRIC.getCode())){ + return appAlarmServiceExtension.editBusinessAlertSingle(ruleData,user); + } /** * 校验当前操作人是否具有权限 @@ -637,6 +650,10 @@ public class AppAlarmServiceImpl implements AppAlarmService { log.error("editRules no rule data found!param:{}", param); return Result.fail(ErrorCode.invalidParamError); } + + if(param.getStrategyType().equals(AlarmStrategyType.BUSINESS_METRIC.getCode())){ + return appAlarmServiceExtension.editBusinessAlert(param); + } /** * 校验当前操作人是否具有权限 @@ -874,15 +891,20 @@ public class AppAlarmServiceImpl implements AppAlarmService { * 同时暂停远程接口的数据,和本地数据 */ for (AppAlarmRule rule : delRules) { + + if(rule.getStatus() != 0){ + log.info("enabledRules the rule is invalid status! it has been deleted! rule : {}", GsonUtil.gsonString(rule)); + continue; + } Result result = alarmService.enabledRule(rule.getAlarmId(), pauseStatus, iamId, user); if (result.getCode() == 0) { - AppAlarmRule condition = new AppAlarmRule(); - condition.setIamId(rule.getIamId()); - condition.setStatus(0); AppAlarmRule value = new AppAlarmRule(); + value.setId(rule.getId()); value.setRuleStatus(pauseStatus); + value.setUpdateTime(new Date()); try { - int update = appAlarmRuleDao.update(condition, value); + int update = appAlarmRuleDao.updateByIdSelective(value); + log.info("enabledRules in db, update result : {} ,rule : {}", update, GsonUtil.gsonString(value)); if (update < 1) { log.info("AppAlarmService.enabledRules update data failed!"); return Result.fail(ErrorCode.unknownError); diff --git a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/model/prometheus/AlarmRuleRequest.java b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/model/prometheus/AlarmRuleRequest.java index c9253e52..2c5aa501 100644 --- a/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/model/prometheus/AlarmRuleRequest.java +++ b/ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/model/prometheus/AlarmRuleRequest.java @@ -38,6 +38,7 @@ public class AlarmRuleRequest implements Serializable { private Integer iamId; private Integer iamType; private Integer projectId; + private String projectName; private Integer ruleTemplateId; private List<ProjectAlarmInfo> projectsAlarmInfo; @Deprecated --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
