public Result addRules()

in ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppAlarmServiceImpl.java [424:513]


    public Result addRules(AlarmRuleRequest param, AppMonitor app) {
        
        for (AlarmRuleData ruleData : param.getAlarmRules()) {
            
            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.setAlertMembers(param.getAlertMembers());
            ruleData.setAtMembers(param.getAtMembers());
            
            ruleData.setIncludeFunctions(param.getIncludeFunctions());
            ruleData.setExceptFunctions(param.getExceptFunctions());
            ruleData.setIncludeModules(param.getIncludeModules());
            ruleData.setExceptModules(param.getExceptModules());
            
            ruleData.convertLabels();
            AppAlarmRule rule = new AppAlarmRule();
            BeanUtils.copyProperties(ruleData, rule);
            StringBuilder cname = new StringBuilder();
            cname.append(param.getIamId() != null ? param.getIamId() : param.getProjectId());
            if (param.getStrategyType().intValue() == AlarmStrategyType.PAOMQL.getCode()) {
                if (rule.getMetricType() == null) {
                    rule.setMetricType(AlarmRuleMetricType.customer_promql.getCode());
                }
                
                if (StringUtils.isBlank(ruleData.getAlert())) {
                    cname.append("-").append(AlarmRuleMetricType.customer_promql.getDesc());
                } else {
                    cname.append("-").append(ruleData.getAlert());
                }
                
                cname.append("-").append(System.currentTimeMillis());
                rule.setCname(cname.toString());
                rule.setAlert(StringUtils.isBlank(rule.getAlert()) ? cname.toString() : rule.getAlert());
            } else {
                if (rule.getMetricType() == null) {
                    rule.setMetricType(AlarmRuleMetricType.preset.getCode());
                }
                cname.append("-").append(ruleData.getAlert());
                cname.append("-").append(System.currentTimeMillis());
                rule.setCname(cname.toString());
            }
            
            rule.setRuleType(AlarmRuleType.app_config.getCode());
            rule.setProjectId(param.getProjectId());
            
            rule.setIamId(param.getIamId());
            int alarmForTime = evaluationInterval * ruleData.getDataCount();
            String alarmForTimeS = alarmForTime + evaluationUnit;
            rule.setForTime(alarmForTimeS);
            rule.setRuleGroup("group" + param.getIamId());
            rule.setEnv(prometheusAlarmEnv);
            rule.setStatus(0);
            rule.setCreater(param.getUser());
            rule.setRuleStatus(RuleStatusType.active.getCode());
            
            String remark = null;
            if (rule.getMetricType() == AlarmRuleMetricType.customer_promql.getCode()) {
                remark = StringUtils.isBlank(rule.getRemark()) ? param.getStrategyDesc() : rule.getRemark();
            } else {
                remark = param.getStrategyDesc();
            }
            rule.setRemark(remark);
            
            rule.setCreateTime(new Date());
            rule.setUpdateTime(new Date());
            rule.setStrategyId(param.getStrategyId());
            
            Result result = alarmService.addRule(app, rule, param.getUser(), ruleData);
            if (result.getCode() != 0) {
                log.error("AppAlarmService.addRules error! remote add ruleData fail!ruleData:{}", rule.toString());
                return Result.fail(ErrorCode.unknownError);
            }
            
            Integer alarmId = appAlarmServiceExtension.getAlarmIdByResult(result);
            rule.setAlarmId(alarmId);
            
            int i = appAlarmRuleDao.create(rule);
            if (i < 0) {
                log.error("AppAlarmService.addRules error! add ruleData data fail!ruleData:{}", rule.toString());
                return Result.fail(ErrorCode.unknownError);
            }
            
        }
        return Result.success(null);
        
    }