public Result editRulesByStrategy()

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);
    }