in ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java [630:745]
public Result editRulesByStrategy(AlarmRuleRequest param) {
/**
* 参数校验
*/
List<AlarmRuleData> alarmRuleDatas = param.getAlarmRules();
if (CollectionUtils.isEmpty(alarmRuleDatas)) {
log.error("editRules no rule data found!param:{}", param);
return Result.fail(ErrorCode.invalidParamError);
}
/**
* 校验当前操作人是否具有权限
*/
AppMonitor app = null;
if (param.getStrategyType().equals(AlarmStrategyType.TESLA.getCode())) {
app = appMonitorDao.getByIamTreeId(param.getIamId());
} else {
app = appMonitorDao.getMyApp(param.getProjectId(), param.getIamId(), param.getUser(), AppViewType.MyApp);
}
if (app == null) {
log.error("不存在projectId={}的项目", param.getProjectId());
return Result.fail(ErrorCode.NoOperPermission);
}
/**
* 检查策略是否存在
*/
AlarmStrategy alarmStrategy = alarmStrategyService.getById(param.getStrategyId());
if (alarmStrategy == null) {
log.error("the strategy is not exist!param:{}", param.toString());
return Result.fail(ErrorCode.nonExistentStrategy);
}
/**
* 过滤参数中新增的规则(rule的id为null),进行创建
*/
List<AlarmRuleData> addRules = alarmRuleDatas.stream().filter(t -> t.getId() == null)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(addRules)) {
//指定要添加的报警规则列表
param.setAlarmRules(addRules);
Result result1 = addRules(param, app);
if (result1.getCode() != 0) {
return result1;
}
}
/**
* 检查报警组、通知人列表、选择的环境是否有更新,有更新则级联更新历史报警规则
*/
if (!nullToEmpty(alarmStrategy.getAlertTeam()).equals(nullToEmpty(param.getAlertTeam())) || !nullToEmpty(
alarmStrategy.getAlertMembers()).equals(nullToEmpty(String.join(",", param.getAlertMembers())))
|| !nullToEmpty(alarmStrategy.getAtMembers()).equals(
nullToEmpty(String.join(",", param.getAtMembers() == null ? new ArrayList<>() : param.getAtMembers())))
|| !nullToEmpty(alarmStrategy.getEnvs()).equals(nullToEmpty(param.convertEnvs())) || !nullToEmpty(
alarmStrategy.getDesc()).equals(nullToEmpty(param.getStrategyDesc()))) {
alarmStrategy.setDesc(param.getStrategyDesc());
List<AlarmRuleData> updateRules = alarmRuleDatas.stream().filter(t -> t.getId() != null)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(updateRules)) {
AppMonitor appMonitor = app;
Optional<Result> failResult = Optional.empty();
updateRules.forEach(ruleData -> {
ruleData.setIncludeEnvs(param.getIncludeEnvs());
ruleData.setExceptEnvs(param.getExceptEnvs());
ruleData.setIncludeZones(param.getIncludeZones());
ruleData.setExceptZones(param.getExceptZones());
ruleData.setIncludeContainerName(param.getIncludeContainerName());
ruleData.setExceptContainerName(param.getExceptContainerName());
ruleData.setIncludeModules(param.getIncludeModules());
ruleData.setExceptModules(param.getExceptModules());
ruleData.setIncludeFunctions(param.getIncludeFunctions());
ruleData.setExceptFunctions(param.getExceptFunctions());
ruleData.setAlertMembers(param.getAlertMembers());
ruleData.setAtMembers(param.getAtMembers());
ruleData.setAlertTeam(param.getAlertTeam());
Result result = editAlarmRule(ruleData, alarmStrategy, appMonitor, param.getUser());
if (!result.isSuccess()) {
failResult.orElse(result);
return;
}
});
if (failResult.isPresent()) {
return failResult.get();
}
}
}
/**
* 更新策略信息
*/
Result<AlarmStrategy> strategyUpdateResult = alarmStrategyService.updateByParam(param);
if (strategyUpdateResult.getCode() != ErrorCode.success.getCode()) {
log.error("update strategy in db fail!param:{}", param.toString());
return Result.fail(ErrorCode.ALARM_STRATEGY_INFO_UPDATE_FAIL);
}
return Result.success(null);
}